CNN 이란 ?

feature 의 공간 정보를 소실하지 않으면서, 동시에 효율적으로 (parameters 수를 최대한 적게 하는) 학습하는 딥러닝 모델 cf. rnn, linear

사실 CNN 은 뭐 워낙에 유명하니까 아예 기본도 모르지는 않았다. 하지만 컴퓨터 비전을 공부하기로 했으니깐 이제부터 햇갈렸던 것들 다시 한번 정리하고 가려고 한다.

CNN 에서 채널 vs 필터, 파이토치 input shape

conv2d 를 기준으로 pytorch 공식 다큐멘터리에 나와있는 input shape 은 (N x C x H x W) 입니다.

여기서 C 는 채널을 나타냅니다.

모든 색깔은 red / green / blue 채널들을 결합하여서 만들 수 있다고 합니다. 즉 컬러 이미지는 3개의 채널로 만들 수 있습니다. 반면 흑백 이미지의 경우 다채로운 색이 필요없기 때문에 1개의 채널로 만들 수 있습니다.

즉 채널은 그림을 그린다고 생각하면 기본적으로 주어지는 색깔 ? 빛 ? 이라고 이해하였습니다.

반면 필터는 (제가 이해한 바로는) 각 사진 데이터들을 보는 여러가지 관점을 가지는 것이라고 이해하였습니다.

예를 들어 필터를 5개로 한다면, 그 사진을 보고 특징을 추출하는 사람이 5명이라고 생각할 수 있습니다.

똑같은 강아지 사진을 보고도 A 라는 사람은 ‘저 강아지는 눈이 특히 크고, 털이 검은색이네’ 라고 특징을 잡는 반면 또 다른 사람 B 는 ‘저 강아지는 털에 흰 털이 숨겨져있구나. 꼬리가 둥글고’ 이런 다른 특징들을 발견할 수 있습니다. 즉 필터를 하나로 하는 것보다 5개로 하는 것이 사진의 특징을 보다 낱낱이, 자세하게 파악하는 데 도움이 될 것입니다.

선택 영역_046

선택 영역_045

제가 햇갈렸던 부분은 그러면 예를 들어 컬러 이미지 10장을 넣어서 필터를 1장으로 써서 추출하고 싶다면 어떻게 학습되는거지 ? 였습니다.

그럴 경우 각 사진의 채널 개수에 맞춰서 필터도 3개가 생기고 각 필터에서 나온 동일 위치의 값들을 모두 더해줘서 하나의 feature map 을 만듭니다.

선택 영역_047

선택 영역_048

필터를 2개로 하고 싶다면 그런 필터가 2개 있다고 보면 됩니다.

선택 영역_049

Conv 1d, 2d, 3d

이 부분도 엄청 햇갈렸는데 TCN 모델을 공부하면서 많이 이해가 되었습니다.

conv 1d 는 데이터가 1차원이므로 (N,input_size, input_length) filter 도 한 방향으로만 돕니다. ➡️

선택 영역_050

conv 2d 는 데이터가 2차원이므로 (N x C x H x W) filter 이 도는 방향이 두 방향입니다. ➡️ ⬇️

선택 영역_052

출처 : https://yjjo.tistory.com/8

CNN parameter 수, output_size 계산

이 부분은 어차피 model.summary 찍어보면 컴퓨터가 다 계산해주겠지만 cnn 이 얼마나 효율적이고, cnn 모델을 어떻게 구성해야 더 효율적일지 직관적으로 감을 잡는데 더 도움이 될 것이라는 생각이 들었습니다.

parameter 수 계산

parameter 수 계산은 비교적 간단합니다.

선택 영역_053

출처 : https://gaussian37.github.io/dl-keras-number-of-cnn-param/

output_size 계산

O = ( n - f + 2p / s ) + 1

왜 이렇게 나오는지는 햇갈린다. 누가 알려주면 .. 좋겠다 🥺

CNN backpropagation

이 부분은 backpropagation 에 나중에 또 따로 정리해서 모아두어야겠다.

정말 친절하게 해당 부분을 설명해주신 분을 미디엄에서 발견하였습니다 ㅠㅠㅠㅠㅠ 감동했어요 !

https://medium.com/@pavisj/convolutions-and-backpropagations-46026a8f5d2c

제가 조금 요약해보았는데, 신기했던 점은 CNN 은 오차 역전파도 CNN 방식으로 진행된다는 것입니다.

선택 영역_054

선택 영역_055

선택 영역_056

그리고 쭉 과정을 구해보면 결국

선택 영역_057

여기서 ∂L/∂O 는 이전 layer 의 loss gradient 입니다.

해당 게시물에 왜 이렇게 성립하는지, 그리고 Full Convolution 이 무엇인지까지 애니메이션으로 매우 잘 나와있습니다 !