NeuroWhAI의 잡블로그

CNN의 합성곱 연산을 매트릭스 곱으로 구현한다면 본문

자료

CNN의 합성곱 연산을 매트릭스 곱으로 구현한다면

NeuroWhAI 2018. 1. 20. 16:56


뭐 구현하는 방법을 쓸게아니라 제가 이해한 내용을 끄적인 글입니다.
ㅇㅅㅇ;;


이 문서 중간쯤의 '매트릭스 곱으로 구현' 항목을 읽고 그림으로 옮겨봤습니다.

... 똥손이라 죄송합니다.
CNN의 합성곱 연산은 커널을 슬라이딩하면서 출력값을 계산한다는건 유명한(?) 사실입니다.
이걸 매트릭스 연산으로 바꾸는 방법이 이것인데 저는 수학을 잘 모르므로 문과스럽게 설명할겁니다. 그렇다고 문과인건 아닙닏ㅌㅌ
또한 위 글에서와는 다르게 채널의 크기를 3이 아니라 1로 두어서 생략할겁니다.

  1. 이미지의 크기가 227x227이고 커널의 크기가 11x11이며 stride가 4라면 일단 이미지의 11x11 영역에 대해서 커널과 연산을 할겁니다.
  2. 이때의 11x11 영역의 이미지 데이터를 11x11=121크기의 열 벡터로 바꿉니다. 이게 그림에서의 '슬라이드 1'이 되는겁니다.
  3. 슬라이딩을 55x55=3025번 진행하므로 슬라이드는 총 3025개가 되며 결과적으로 [K, n] 행렬은 [121, 3025]가 될겁니다.
  4. 이제 커널 행렬[k, K]을 구해봅시다.
  5. 커널도 똑같이 11x11=121이므로 이걸 행 벡터로 펼치면 그림에서의 '커널1'이 됩니다.
  6. 예시에서 커널이 96개이므로 결과적으로 [k, K]행렬은 [96, 121]행렬이 됩니다.
  7. 이제 이 둘을 행렬곱해주기만 하면 96개의 커널(11x11)과 하나의 이미지(227x227)를 stride 4로 합성곱한 결과[96, 3025]가 나오게 됩니다.
  8. 이걸 [55, 55, 96](55x55 크기로 줄었고 96개 커널과의 연산에 대한 결과라는 뜻)으로 reshape해주면 진짜 결과가 됩니다.

헤헷 수알못이 이해하려니 힘드네요.




Comments