44. 4주차 스터디 정리

너무 금세 처음 계획했던 4주의 시간이 흘렀다. 무지하게 힘들었지만, 재미있었으니까 고생 제로.


1. convolutional의 뜻
영어 사전에 보면 "소용돌이 치는, 나선형의, 주름 모양의" 뜻으로 정의되어 있다. 그런데, convolutional network의 구성을 보면 단어의 뜻과는 차이가 있다. 다른 분이 정의한 내용 중에는 이런 것이 있었다. [컨볼루션 네트워크]이곳에는 다른 좋은 내용도 많아서 살펴보기만 해도 도움이 될 수 있으니 꼭 들러보자.
어원은 라틴어 convolvere이고 그 뜻은 두 가지를 같이 돌돌 마는 행동을 의미합니다. 수학에서 컨볼루션은 두 가지 함수가 얼마나 겹치는지를 적분을 이용해 측정하는 것입니다. 두 함수를 하나로 합치는 것이라고 이해해도 됩니다.

2. 고양이가 반응하는 방식과 convolutional하고 무슨 관계가 있는걸까?
두 가지의 공통점은 매우 작은 일부 영역을 통해서 전체를 찾아낼 수 있다는 것. 고양이가 사물을 볼 때 뇌의 일부만 활성화되지만, 결국에는 사물 전체가 무엇인지 식별하게 된다. ConvNet은 이미지를 조그맣게 잘라서 이들 영역을 통해 결국에는 무슨 그림인지 식별하게 된다.

3. 마지막에 반드시 pooling 하는 이유
동영상에서의 pooling은 이미지 크기를 절반으로 줄이는 역할을 한다. pooling layer를 호출할 때마다 크기가 줄기 때문에 원하는 정도의 크기가 될 때까지 반복해서 호출하는 것이 맞다. FC에 전달할 데이터의 갯수를 조절해야 한다면, FC 앞에 위치하는 것이 좋다.

4. 마지막에 FC하는 이유
fully connected network은 쉽게 얘기하면 softmax를 의미한다. softmax는 여러 개의 label 중에서 하나를 선택하는 모델이기 때문에 그림의 label이 무엇인지 판단하는 CNN과 매우 잘 어울린다. label을 선택하기 위해 있을 뿐이다.

5. network이란?
network은 여러 층의 layer가 연결된 형태의 모델을 말하고, layer는 여러 개의 노드(node)라는 것으로 구성된다.

6. 나누어 떨어지지 않으면 필터와 spride를 구성할 수 없는가?
구성할 수 없다. 나누어 떨어지지 않아도 계산을 진행할 수는 있겠지만, 나누어 떨어진다면 쉽게 처리할 수 있다. 데이터를 가공하는 과정에서 여러 가지 경우로 쉽게 나누어 떨어뜨리도록 만드는 것도 기술이 될 수 있다.

7. 이미지가 작아지는 것이 문제일까? 패딩을 추가하면 크기를 유지할 수 있다.
convolutional layer를 거칠 때마다 그림 크기가 작아진다. 1998년에 만든 LeNet이 동작한 방식이다. 그러나, 그 이후에 나온 모델에서는 패딩을 사용해서 원본 크기가 줄어들지 않도록 강제한다. 대표적으로 구글의 알파고가 패딩을 사용했다. 패딩을 사용하면 크기는 줄어들지 않겠지만, 테두리는 희석될 수밖에 없다. 가운데 영역은 희석되지 않고 테두리만 희석된다. 그런데도 이게 의미가 있을까?
교수님께서 앞에서 이 부분에 대해 잠깐 말씀하신 적이 있다. 패딩을 추가하는 목적은 두 가지로 크기 유지와 경계선 추가. 프로그래밍의 관점에서 본다면 경계선을 추가해서 계산의 성능을 높이는 것에 한 표. 희석되기 때문에 결과만 놓고 본다면 크기가 줄어드는 것과 차이가 없지 않을 것 같다.
최근에 크기가 줄어들지 않기 때문에 테두리 근방의 값들이 보존될 수 있다는 생각이 들었다. 테두리 자체는 희석될 수도 있겠지만, 줄어들지 않기 때문에 새로운 테두리가 생기고 없어지는 현상은 막을 수 있게 된다.

8. 계속 같은 크기로 만들려면 매번 패딩을 추가해야 하는데..
정답. 크기가 줄어든다면 항상 패딩을 먼저 추가한다. 원본 크기를 유지하기 위해 패딩의 크기도 제각각. 1, 2, 3픽셀 등등 원하는 크기로 추가한다.

9. 왜 여러 개의 필터를 둘까(activation maps)?
필터를 정확하게 말하면 weight이 된다. 이걸 이해하지 못하면.. 좀 어렵다. 6장의 필터를 사용하면 6장의 출력이 만들어진다. 6장의 필터는 모두 조금씩 다른 weight을 표현한다. 결국 여러 개의 필터를 사용해서 동일 데이터(필터와 계산할 영역)에 대해 6가지의 결과를 얻게 된다. 이 말은 6명의 전문가를 투입하는 것과 같고, 정확도 향상을 위해 여러 장의 필터를 사용하는 것이 좋다.

10. 5x5x3에서 3은 무엇을 의미하나?
채널(channel)을 의미한다. 똑같은 크기의 그림이 여러 장 겹쳐 있다고 보면 된다.

11. 필터에 포함된 변수(피처)의 갯수는?
필터는 weight의 다른 말. 필터 크기가 5x5x3이라면 75개의 피처를 갖는 셈이 된다. 여기에 필터가 6개라면 6을 곱해서 450개의 피처가 된다.

12. Wx에 사용된 곱셈
원본 그림과 필터를 곱해서 one number를 구하는데, 이때 사용된 곱셈은 행렬 곱셈이 아니다. 필터가 덮은 영역의 값과 곱셈을 하기 때문에 element-wise 곱셈이 되어야 한다.

13. 왜 Max Pooling을 사용할까?
pooling에는 여러 가지 방법이 있다. 가장 먼저 생각나는 방법은 평균을 사용하는 것이다. 여러 개 중에서 하나를 선택해야 한다면, 중앙값과 평균 중에서 하나를 고르는 것이 맞다.
평균은 필터 영역의 특징을 표현하지 못하기 때문으로 보인다. 평균을 사용하면 여러 번의 pooling을 거치면 전체 값들이 비슷해지는 증상을 보일 수 있을 것 같다. 평균의 평균의 평균을 하는 셈이 되므로 비슷해지는 것이 당연하다. 그럼.. 모든 그림이 다 똑같은 그림이라는 결론이 나올 수도 있겠다.
특징을 표현할 수 있는 값을 선택해야 한다면, max pooling이 맞는 것 같다. Min Pooling은 사용할 수 없다. LeRU를 거치기 때문에 음수는 0이 되어 버려서 최소값의 의미가 없다.
우리가 사람의 얼굴을 기억한다는 것은, 얼굴의 모든 것을 기억하는 것이 아니라 두드러진 특징 몇 가지를 기억하는 것이다. CNN에서 두드러진 특징을 찾기 위한 방법이 max pooling이라고 보면 된다.

14. pooling에도 stride가 있다?
convolutional과 pooling은 모두 필터와 stride를 사용한다. 필터는 영역의 크기를 지정하기 위해, stride는 움직일 거리를 지정하기 위해 필요하다. pooling도 몇 개 중에서 뽑을 것인지, 다음 번에 어디서 뽑을 것인지 결정해야 한다.

15. 마지막 fc는 구체적으로 어떻게 구성되어지나?
softmax라고 설명했다. LeNet 그림을 보면 첫 번째 layer는 120개, 두 번째는 84개, 마지막에는 10개로 줄어든다. 줄어드는 규칙은 모르겠지만, 10개를 고를 때 가장 이상적인 조합이 아닐까, 생각한다.

16. 파라미터의 갯수가 35k라는데..?
AlexNet에서는 227x227x3 형식의 그림을 사용하고 있다. 필터 크기는 11x11x3, stride는 4x4. 공식에 넣어보면 출력 크기는 55x55가 된다. 필터 갯수는 96개였으니까, 최종적으로는 55x55x96.


  (227 - 11) / 4 + 1 = 216/4 + 1 = 54+1 = 55

  출력크기 : 55x55x96 = 290,400 byte
  파라미터 : 11x11x3x96 = 34,848 (35k)

필터는 weight을 가리키고 11x11x3이 weight의 갯수가 된다. 이런 게 96개 있다.