작성
·
699
·
수정됨
2
안녕하세요 맛비님. AI HW 6장 강의를 들으면서 MAC연산량 관련하여 의문점이 생겨서 질문 드립니다.
(관련 질문글 링크)
1. 강의에서는 weight 수를 "kernel의 sample수"라고 하셨는데, 위 질문 답변의 A2에서 처럼
정확히는 Convolution layer에서의 weigth 수는 "kernel의 sample수 * Output channel 수"가 맞지 않나요? 즉, OCH :output channel수 * (ICH * Kx * Ky : Kerner의 sample 수)
2. Convolution layer에서의 MAC수를 계산할 때는 Kernel size * Input Channel * Output Channel 을 한 게 output feature map의 한 point(1*1*OCH size)에 필요한 연산수 이기 때문에
위 질문 답변에서의 A1.하나의 layer 에서의 MAC 량 = OCH* ICH * KX * KY이 아니라
Kernel size * Input Channel * Output Channel* Output Feature map Size를 하여
하나의 layer 에서의 MAC 량 = OCH * ICH * KX *KY* (Output Feature Map size)를 해줘야 맞는게 아닌가 싶습니다.
3. AI HW 6장의 교안에 LeNet-5 Network구현에 필요한 MAC연산수가 341k라고 되어있는데, 첫 Conv layer에 필요한 MAC연산은 (2번이 맞다면) 5*5*1*6*28*28 = 117,600이고 두 번째 Conv layer에 필요한 MAC연산은 5*5*6*16*10*10 = 240,000으로 두 개의 Conv Layer에서의 MAC연산량만 해도 357.6k로 341k를 넘는데 Fully Connected Layer에서의 MAC연산량을 더하면 더 커질 것이라 생각하는데 MAC연산량이 341k가 맞나요?? 정확한 값을 알고 싶습니다.
117.6k+240k+20*84+84*10 = 368.52k가 맞나요? 구글링해도 MAC수에 대한 자료는 잘 안나와서요..
3-1. Fully Connected Layer가 2개라고 하시고 C5-F6에 하나, F6-OUTPUT에 하나 해서 두 개라고 하셨는데, 검색을 해보니 F6-OUTPUT은 Gaussian connected layer라고 fully connected layer가 아니라고 하는데, 뭐가 맞는건지 잘 모르겠습니다.. S4-C5/ C5-F6가 두 개의 FC layer인건가요?
4. HW engineer라면 연산량을 잘 파악할 수 있어야 된다고 하셨기에, Network Model을 보고 Weight와 MAC연산수를 잘 파악할 수 있어야 될 것 같다고 생각해서 정리를 해보았는데
FC Layer에서의 Weight = Edge의 개수 = Input Node * Output Node
FC Layer에서의 MAC = Weight와 동일
Conv Layer에서의 Weight = "kernel의 sample수 * Output channel 수" = OCH *ICH * Ky * Kx
Conv Layer에서의 MAC = (Output Feature Map 의 Size) * Weight 수 = (Output Feature Map 의 Size) * OCH * ICH * Ky* Kx
라고 생각했는데, 옳게 파악한 것이 맞을까요?
항상 강의 잘 듣고있습니다. 바쁘신데도 질문에 친절하게 답변해주셔서 감사합니다 맛비님!
긴 글 읽어주셔서 감사하고 좋은 하루 되세요 :)
답변 1
0
안녕하세요.
먼저 오류를 제대로 파악했어야 했는데, 제가 안일했습니다. 이해 부탁드립니다 ㅠ
이해 안되는 내용은 다시 남겨주세요. ^^
1. 강의에서는 weight 수를 "kernel의 sample수"라고 하셨는데, 위 질문 답변의 A2에서 처럼
정확히는 Convolution layer에서의 weigth 수는 "kernel의 sample수 Output channel 수"가 맞지 않나요? 즉, OCH :output channel수 (ICH Kx Ky : Kerner의 sample 수)
A1. weight의 수는 CO 와 무관합니다.
2. Convolution layer에서의 MAC수를 계산할 때는 Kernel size Input Channel Output Channel 을 한 게 output feature map의 한 point(1*1*OCH size)에 필요한 연산수 이기 때문에
위 질문 답변에서의 A1.하나의 layer 에서의 MAC 량 = OCH* ICH KX KY이 아니라
Kernel size Input Channel Output Channel* Output Feature map Size를 하여
하나의 layer 에서의 MAC 량 = OCH ICH KX KY (Output Feature Map size)를 해줘야 맞는게 아닌가 싶습니다.
링크의 weight 수를 의미한 질문이었다면, 제 답이 맞고요.
질문자님 관점에서는 weight 수가 아닌 순수 layer 전체 연산량을 의미하는 MAC 의 의미였다면, 질문자님 생각이 맞습니다. (stride, padding 이 고려된다면, 전체 MAC 수의 튜닝 은 필요하겠죠.)
============
위의 1,2 번까지 정리하면 다음과 같습니다.
weight 수 = OCH ICH KX KY
MAC 량 = OCH ICH KX KY (Output Feature Map size) (stride, padding 고려는 필요함)
============
3. AI HW 6장의 교안에 LeNet-5 Network구현에 필요한 MAC연산수가 341k라고 되어있는데, 첫 Conv layer에 필요한 MAC연산은 (2번이 맞다면) 5*5*1*6*28*28 = 117,600이고 두 번째 Conv layer에 필요한 MAC연산은 5*5*6*16*10*10 = 240,000으로 두 개의 Conv Layer에서의 MAC연산량만 해도 357.6k로 341k를 넘는데 Fully Connected Layer에서의 MAC연산량을 더하면 더 커질 것이라 생각하는데 MAC연산량이 341k가 맞나요?? 정확한 값을 알고 싶습니다.
117.6k+240k+20*84+84*10 = 368.52k가 맞나요? 구글링해도 MAC수에 대한 자료는 잘 안나와서요..
어.. 이 부분은 질문자님께서 이해하신게 맞은 것 같은데요. 제가 틀렸습니다.
그림만 봐서는 숨은 뜻을 몰랐네요. ㅠ
https://velog.io/@lighthouse97/LeNet-5%EC%9D%98-%EC%9D%B4%ED%95%B4
위 링크가 이해에 도움이 될 것 같습니다.
3-1. Fully Connected Layer가 2개라고 하시고 C5-F6에 하나, F6-OUTPUT에 하나 해서 두 개라고 하셨는데, 검색을 해보니 F6-OUTPUT은 Gaussian connected layer라고 fully connected layer가 아니라고 하는데, 뭐가 맞는건지 잘 모르겠습니다.. S4-C5/ C5-F6가 두 개의 FC layer인건가요?
제가 알려드린 방법으로만 계산하면, 세 개가 맞습니다.
핑계를 대자면 저 자료가... MIT 에서 만들어진내용인데... 확인을 못한 제 잘못이네요 ㅠ
S4-C5
C5-F6
F6-output
글로 설명보다 계산 방법을 엑셀링크로 드렸습니다.
수식을 보고 3, 3-1 을 확인해보시겠어요?
=============================
4. HW engineer라면 연산량을 잘 파악할 수 있어야 된다고 하셨기에, Network Model을 보고 Weight와 MAC연산수를 잘 파악할 수 있어야 될 것 같다고 생각해서 정리를 해보았는데
FC Layer에서의 Weight = Edge의 개수 = Input Node * Output Node
FC Layer에서의 MAC = Weight와 동일
Conv Layer에서의 Weight = "kernel의 sample수 Output channel 수" = OCH ICH Ky Kx
Conv Layer에서의 MAC = (Output Feature Map 의 Size) Weight 수 = (Output Feature Map 의 Size) OCH ICH Ky* Kx
라고 생각했는데, 옳게 파악한 것이 맞을까요?
Conv Layer에서의 Weight = "kernel의 sample수 Output channel 수" = OCH ICH Ky Kx
-> output channel 수를 빼야합니다. 첨부해드린 엑셀시트 연산 방법을 참고해주세요.
Conv Layer에서의 MAC = (Output Feature Map 의 Size) Weight 수 = (Output Feature Map 의 Size) OCH ICH Ky* Kx
-> padding 과 stride 의 컨디션에 의해 output feature map 부분이 달라질 수 있습니다. 그 가정을 제외한다면 옳습니다.
그림만 봐서는 러프하게 계산이 어렵네요. 숨은 의도를 모르니;;
현업 가시면 꼭 알고리즘 엔지니어랑 이야기를 해보세요.
정확한 지적 진심으로 감사드립니다. 즐공하세요 :)
아하 그림만 보고는 C3의 연산이 나누어져서 이뤄진다는 걸 알 수가 없었네요!
Weight수 부분에서 저는 "Kernel의 sample수"가 "Kernel의 volume"인 Kx* Ky * ICH이고 이게 OCH개 있어서 총 weight의 개수가 Kx* Ky *ICH *OCH라고 생각해서 그렇게 질문 드린 것이었습니다.
바쁘신데도 이렇게 자세하게 설명해주셔서 정말 감사합니다. 맛비님 로드맵 착실히 밟아서 좋은 HW engineer가 되도록 하겠습니다!