인프런 커뮤니티 질문&답변

NPU꿈나무님의 프로필 이미지
NPU꿈나무

작성한 질문수

설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)

CNN paper review 영상 관련 질문있습니다.

작성

·

699

·

수정됨

2

안녕하세요 맛비님. AI HW 6장 강의를 들으면서 MAC연산량 관련하여 의문점이 생겨서 질문 드립니다.

 

https://www.inflearn.com/questions/735204/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-%EC%B1%95%ED%84%B06-7%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4

(관련 질문글 링크)

 

 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 와 무관합니다.

image

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 에서 만들어진내용인데... 확인을 못한 제 잘못이네요 ㅠ

  1. S4-C5

  2. C5-F6

  3. F6-output

글로 설명보다 계산 방법을 엑셀링크로 드렸습니다.

수식을 보고 3, 3-1 을 확인해보시겠어요?

https://docs.google.com/spreadsheets/d/1RM_z0npDiITybZLXG1VD1Fox8NOCoefe/edit?usp=sharing&ouid=100748217551877297613&rtpof=true&sd=true

=============================

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 부분이 달라질 수 있습니다. 그 가정을 제외한다면 옳습니다.

그림만 봐서는 러프하게 계산이 어렵네요. 숨은 의도를 모르니;;

현업 가시면 꼭 알고리즘 엔지니어랑 이야기를 해보세요.

정확한 지적 진심으로 감사드립니다. 즐공하세요 :)

NPU꿈나무님의 프로필 이미지
NPU꿈나무
질문자

아하 그림만 보고는 C3의 연산이 나누어져서 이뤄진다는 걸 알 수가 없었네요!

Weight수 부분에서 저는 "Kernel의 sample수"가 "Kernel의 volume"인 Kx* Ky * ICH이고 이게 OCH개 있어서 총 weight의 개수가 Kx* Ky *ICH *OCH라고 생각해서 그렇게 질문 드린 것이었습니다.

바쁘신데도 이렇게 자세하게 설명해주셔서 정말 감사합니다. 맛비님 로드맵 착실히 밟아서 좋은 HW engineer가 되도록 하겠습니다!

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

제 실력이 부족한게 문제네요 ㅠ

지금처럼 의문을 갖고 고민하시면 저는 금방 뛰어넘으실 것 같아요. ㅎ

즐공하셔요!

NPU꿈나무님의 프로필 이미지
NPU꿈나무

작성한 질문수

질문하기