39. ConvNet의 활용예 (lec 11-3)


이번 동영상에서는 CNN이 발전해 온 과정에 대해 구체적인 사례를 들어 설명한다.


CNN의 고전이라고 부를 수 있는 LeNet-5이다. LeCun 교수님께서 1998년에 만드신 모델로, 이후에 나오는 모델에 비해 굉장히 단순한 형태이다. 6개의 hidden layer를 사용하고 있다.

1. Input - 크기 32x32x1. 흑백 이미지. (필터 5x5, stride 1)
2. C1 - 크기 28x28x6. feature maps 6개. (필터 2x2, subsampling)
3. S2 - 크기 14x14x6. feature maps 6개. (필터 5x5, stride 1)
4. C3 - 크기 10x10x16. feature maps 16개
5. S4 - 크기 5x5x16. feature maps 16개.
6. C5 - FC(Full Connection )120개
7. F6 - FC(Full Connection) 84개
8. Output - GC(Gaussian Connections) 10개. (최종 분류)


softmax에서 좋은 결과를 내기 위한 두 가지 방법이 있었다. Deep & Wide. layer를 여러 개 만드는 deep과 하나의 layer에 노드를 많이 만드는 wide.


Deep Learning계의 전설이 된 AlexNet이다. 불과 몇 년 전인데, 벌써 전설이라 불러도 어색하지 않다. 이쪽 세계에서는 시간이 빨리 흐른다.

원본 그림의 크기가 227x227의 정사각형 형태이고, RGB의 3가지 색상으로 구성된다. 앞에 나왔던 32x32의 흑백 이미지에 비해 대략 150배 용량이 증가했다. 필터의 크기 또한 11x11로 엄청나게 커졌다. 그렇다면 W의 갯수는 11x11x3이니까 363개나 된다. 와우.. 이런 필터를 96개나 만들었다. 그럼 전체 입력의 갯수는 363x96으로 34,848(35k)개가 된다. 이러니 며칠씩 걸리면서 계산을 하는 것이 맞다.

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

출력 결과의 크기는 위의 공식으로 계산할 수 있다. 필터의 갯수는 출력 layer 갯수와 동일해야 하니까, 전체 크기는 55x55x96이 된다.

갑자기 96이 뭐지? 라는 생각이 들었다면, 이전 글을 보고 오자. 필터의 갯수는 색상처럼 생각하면 된다고 매우 강조했다. 픽셀을 구분하기 위해 96가지 특징이 있는 셈이다.


두 번째 layer에 대해 설명한다. convolutional layer가 아니라 pooling layer를 적용했다. pooling layer도 stride를 지정할 수 있다. (55 - 3) / 2 + 1은 27이 된다. 단순하게 가장 큰 값을 찾는 Max Pooling을 적용했으므로 필터 갯수였던 96은 바뀌지 않고 입력 또한 없다. Max Pooling을 사용했다는 표시는 네트워크 구성도에 쓰여 있다.


전체 네트워크를 어떤 방식으로 구성했는지 보여준다. 이 정도면 할만 하겠다는 생각이 든다.

그림 오른쪽 설명에서 ReLU를 사용한 첫 번째 모델이라고 되어 있다. dropout도 사용했고 앙상블(ensemble)까지 적용하고 있다. 앞에서 배운 모든 기술을 적용했다는 것을 알 수 있다. 그래서, 좋은 성능이 나왔고, 사람들이 놀랬다.

그런데, ImageNet 대회가 처음 있었던 것도 아닌데, 15.4%의 에러에 사람들이 반응했다는 것이 어색할 수도 있다. 그 이전에는 27%의 에러였고, 12% 정도의 성능 향상이 있었는데, 기존 기술로도 충분히 가능하다고 생각한다. 개인적으로는 AlexNet의 놀라운 점은 hinton 교수님의 학생이었고, 발전할 가능성이 많은 모델이었기 때문이라고 생각한다. 기존의 머신러닝 기술은 사실상 한계에 도달했었고 새로운 돌파구가 필요했을 수도 있다. 마치 deep learning에 찾아왔던 겨울(winter)처럼. 어찌 됐건 그 이후로 AlexNet을 바탕으로 한 새로운 network이 매년 출시되고 있고, 계속적인 성능 향상이 일어나고 있는 중이다.


2013년의 자료는 없다. 2014년에는 놀랍게도 구글에서 출전했고, 이름 값을 했다. GoogleNet이 아니라 GoogLeNet이다. 1998년에 만들어진 LeNet을 기념하기 위해 붙인 이름인 듯.

inception module이라는 새로운 이론을 적용했다. inception의 뜻은 처음 또는 시초, 발단이라고 되어 있다. 아무도 만들어 본 적이 없기 때문일까?

앞에서 본 AlexNet에 비해 많이 깊어졌다. 그러나, 많이 넓어지지는 않았다. layer에 포함된 파란 사각형의 갯수가 많아야 5개에 불과하다. 특이한 점은 모델의 처음과 끝에 FC layer가 적용됐다는 점이다. CNN에서는 보통 마지막에만 둔다. convolutional layer와 pooling layer를 이상한 조합으로 연결한 점이 특별하고, 목표까지 가기 위한 layer가 많지 않은 점도 특별하다. 그림 아래에 있는 inception module에는 hidden layer에 포함된 노드(or layer)가 7개 있는데, 최대 2개만 거치면 목표까지 갈 수 있다. 거쳐야 하는 1개 또는 2개는 반복할 때마다 달라질 것이고, 역시 균형 잡힌 결과를 얻게 된다.

인터넷에서 관련 논문을 잠시 찾아봤다. 놀랍게도 저자가 10명이 넘었다. 그냥 참가한 사람은 없을테니, 모델을 만드는 것이 얼마나 어려운 것인지.. 짐작할 수 있다. 교수님께서 우리도 할 수 있다고 용기를 주시고 있긴 한데.. 진짜 가능한지 모르겠다.


2015년에 나온 따끈따끈한 사례다. 2015년에 개최된 여러 대회에서 놀라운 성적으로 우승했음을 보여주고 있다. 2등과의 격차가 장난 아니다. 그런데, 이런 정도의 격차라면 2014년의 GoogLeNet보다 못한 2등이다. 왜 그랬을까?


해를 거듭할수록 layer의 갯수가 기하급수적으로 늘어나고 있다. 무려 152개의 layer를 사용했다. 그림 오른쪽에 2~3주 동안 8개의 GPU로 학습했다고 설명하고 있다. 이번에 큰 맘 먹고 장만한 내 컴퓨터는 GPU가 1개밖에 없다.

그런데, 정말 놀라운 것이 8배 이상의 layer로 인해 학습은 오래 걸렸지만, 실전 적용에서는 VGGNet보다 빠르다고 말하고 있다. VGGNet은 2014년에 ImageNet 대회에 출전했던 모델로 네트웍의 깊이가 성능과 중요한 관련이 있음을 보여줬다. 당시 16개의 CONV/FC layer만을 사용해서 놀라운 성적을 거두었던 모델이다.

어떻게 152개의 layer를 갖는 모델이 16 layer 모델보다 빠를 수 있을까?


좋은 성능을 위한 방법을 보여준다. 이상하게 보일 수 있지만, 모든 layer를 거치는 것이 아니라 일부 layer만 거치는 것이 핵심이다.

ResNet은 Residual Network의 약자로 residual은 '남아 있는' 정도의 뜻으로 쓰이는데, '계산이 설명되지 않는' 등의 뜻 또한 갖고 있다. 교수님께서 설명하실 때, '왜 그런지는 모르지만'이라고 말씀하셨는데, 그런 의미를 준 것일지도 모르겠다.


교수님께서는 이것을 fast net이라고 말씀하셨다. 여러 layer를 건너 뛰어서 목표에 빨리 도착할 수 있기 때문에 fast라고 설명하셨다. 건너뛰는 갯수를 난수로 처리하면, 반복할 때마다 다른 결과를 얻을 수 있고, 역시 균형 잡힌 결과를 구할 수 있게 된다.


ResNet과 GoogLeNet의 공통점을 보여주고 있다. 모양은 다르지만, 목표까지 가기 위해 거치는 layer의 갯수가 적다. ResNet은 일렬로 배치해서 건너 뛰도록 설계했고, GoogLeNet은 처음부터 길을 여러 개 만들었다.

GoogLeNet의 단점은 경로가 여러 개이긴 하지만, 특정 경로로 진입하면 경로에 포함된 모든 layer를 거쳐야 한다는 점이 아닐까 싶다. ResNet이 매번 통과할 때마다 거치는 layer의 구성이 달라지는 반면 GoogLeNet은 구성이 같기 때문에 다양한 결과를 만들지 못하는 것이 단점으로 보인다. ResNet이 GoogLeNet보다 더욱 균형 잡힌 결과를 만들어 낼 수 있는 구조라고 보여진다.


2014년에 발표한 문장 분석을 위한 CNN. 한국인 윤김 교수님께서 만드셨다. 많이 사용하는 모델이라고 말씀도 하셨다.


설명할 필요가 없는 사진, 알파고. 그림 오른쪽에는 알파고가 국면을 해석하는 단계를 순서대로 보여주고 있다. 여기에도 CNN이 사용됐다고 한다.


국제적인 학술지 Paper에 실린 알파고에 대한 설명.

19x19x48 이미지 스택을 사용하고 있다. 바둑은 19x19개의 칸으로 구성되어 있다. 즉, 바둑판 이미지를 읽을 지는 모르지만, 19픽셀로 재구성하고 있음을 알 수 있다. 이후 이미지 크기를 패딩을 적용해서 23x23으로 바꾸었다고 설명하고 있다. 48개의 feature planes(채널)를 사용했다는 것은 바둑돌이 하나 놓여질 때마다 해당 돌의 특징을 48가지로 판단했음을 뜻한다. 가령, 흑돌인지 백돌인지, 주변에 흑돌이 있는지 백돌이 있는지, 현재 정세가 어떠한지 등등. 바둑을 조금밖에 모르기 때문에 48가지의 특징을 짐작조차 할 수 없지만, 아무리 생각해도 48가지라는 것은 너무 엄청나다. 그랬기 때문에 이세돌을 이길 수 있었던 것 같다.

앞에서 배운 지식을 사용하면 대략이나마 어떻게 구성했는지 알 수 있다. 어렵긴 하지만, 한 발 나아간 것 같아 다행이다.