본문 바로가기

딥러닝

4. CNN 발전 (1) - Alexnet, GoogLeNet

1. CNN의 발전

 

 CNN은 1990년대 Yann LeCun 교수가 발표한 이후, 발전을 많이 했습니다. 특히 2010년 초중반에 많은 발전이 있었습니다. Conv layer 자체에서 Convolution을 어떤식으로 진행할지를 고민하는 차원에서도 발전을 이루었고, 여러 Conv layer를 어떻게 조합하는지 등에서도 발전이 있었습니다.

 다른 CNN 관련 설명글을 참고로, CNN의 발전을 다음과 같은 순서로 알려드리겠습니다. 

 

 (Lenet) -> Alexnet -> GoogLeNet -> VGGNet -> Resnet

                (2012)        (2014)           (2014)        (2015)

 

 각각 논문, 모델의 이름과 처음 나온 년도 입니다. 위의 모델들은 ILSVRC라는 컴퓨터 비전 성능 대회에서 우수한 성능을 보인 모델입니다. 

 

2. ILSVRC

 

 ILSVRC는 ImageNet Large Scale Visual Recognition Challenge의 약자 입니다. 2010년에 시작한 대회로, 물체 탐지(Object Detection), 이미지 분류(Image Classification) 성능을 높이는 대회입니다. ImageNet은 이 분야를 대표하는 거대한 데이터셋 입니다. http://www.image-net.org/에 나와 있는 기록으로는 무려 1420만장의 이미지가 존재합니다. 이러한 데이터셋을 이용하고, 서로간의 경쟁을 촉진하면서 매년 대단한 발전이 있었습니다. 

ILSVRC Results

 2010년 시작해서, 2010~11년에는 Feature Enginering을 사용해 주로 모델의 성능을 높였지만, 12년 이후에는 CNN이 모델의 성능을 크게 증가시켰다고 합니다. 14년에는 GoogleNet이 에러율이 더 낮았지만, VGG 모델이 훨씬 직관적이고 변형하기도 편리해서 VGG 모델이 이후에 더 주목을 받습니다.

 2015년 모델인 ResNet을 보시면 Layer의 숫자가 그 이전보다 엄청 커진 것을 알 수 있습니다. 152개나 되는 layer를 학습시킬 수 있는 방법을 개발하면서 큰 인기를 끌었고, 특히 3.57이라는 에러율은 사람의 에러율인 5% 보다 뛰어난 모델입니다. 이후 2016년, 2017년에도 각각 Densenet, SENet 등의 발전이 있었고 2018년 부터는 따로 진행을 하지 않는 것으로 보입니다. Densenet과 SENet은 추후에 다시 포스팅해보겠습니다.

 

3. Alexnet

Alexnet Architecture

위의 그림이 Alexnet의 구조 입니다. Conv layer 5개, 중간 중간 pooling layer, 맨 마지막에 3개의 dense layer(Fully Connected Layer)가 존재합니다. 논문 구현을 처음 연습해 볼때 Alexnet의 모델을 구현하고자 했고, 그림부터가 너무 복잡해서 머리가 아팠던 경험이 있습니다...

 그림을 보시면 마지막 Dense layer를 제외하고는 이미지가 크게 두갈래로 나뉘어 학습이 되는 것을 볼 수 있습니다. Alexnet이 처음으로 GPU를 병렬적으로 학습에 활용한 모델이기 때문입니다. 이 이후에 GPU를 활용해서 학습하는 것이 일반적인 생각이 되었고, 특히 GPU를 활용할 수 있게 CNN을 설계하기 시작했습니다. 

 Alexnet은 성능을 높이고, 학습을 빠르게 하고, 과적합을 막기 위해서 많은 고심을 했습니다. Data Augmentation으로 데이터의 양을 증가시키고, Dropout 등을 사용했습니다. 그 중 특히 ReLU의 사용을 주목해야 합니다. ReLU는 0이하의 값은 0으로 출력하고, 0 이상의 값은 그대로 출력하는 비선형 함수입니다. ReLU를 활성화 함수(Activation Function)으로 사용하면서 학습속도를 높였습니다.

 기존에 활성화 함수로 활용하던 함수로는 Sigmoid, tanh 등이 있었는데, 그것들과 비교해서 학습속도가 무려 6배나 빨라졌다고 합니다. 이 이후로도 정말 많은 모델에서 ReLU 또는 ReLU 계열의 함수를 활성화 함수로 사용하고 있습니다.

 

 이와 같이 Alexnet은 GPU를 병렬처리 하는 프로세스, 그리고 ReLU 같이 학습을 도와주는 방법들을 사용했다는 점에서 주목할 만 합니다.

 

4. GoogLeNet

 

 다음은 모델의 이름에서 나오듯이 구글에서 발표한 모델입니다.

 

 산넘어 산이라고 눈이 아플정도로 모델이 복잡해보입니다. 하지만 위의 모델은 알고보면 특정한 구조가 계속 반복되고 있습니다. 그 특정한 구조가 Inception Module 입니다.

 Inception Module은 기본적으로 이전 layer의 output에 각각 1x1 conv, 3x3 conv, 5x5 conv, 그리고 3x3 max pool을 적용시켜서 나온 output을 합친(concat) 것 입니다. Conv나, Pooling이나 이미지에서 feature를 얻어낼 수 있습니다. conv layer의 filter의 크기를 바꾸면 다른 scale의 feature를 얻을 수 있습니다. 

 그런데 그림을 보시면 inception module에 각각 1x1 convolutions를 추가한 것을 볼 수 있습니다. 

 

 5x5 Conv를 1x1 conv + 5x5 conv 조합으로 바꾸었을때의 그림 입니다. 1x1 conv를 추가했음에도, 원래 얻고자 하는 이미지(28x28x32)를 얻을 수 있습니다. 그런데 계산하는 parameter의 수는 1/10로 크게 준것을 볼 수 있습니다. 그러면서도 성능의 저하는 없다고 알려져 있습니다. 또 1x1 conv에 비선형성을 가지는 활성화 함수를 추가한다면 비선형성을 추가 할 수도 있습니다.

 즉 Inception module에 1x1 conv 조합을 활용함으로써, 더 깊고 넓은 모델을 적은 연산량으로 훈련할 수 있다는 장점이 생깁니다. 

 

 그외에 Auxiliary classifier, Global Average Pooling 등을 사용했습니다.

 Auxiliary classifier는 위의 GoogLeNet 사진을 보시면 노란색 박스가 3개 있는 것을 볼 수 있습니다. 노란색 박스 마다 output을 출력해서 loss를 계산하는 것 입니다. 그리고 그 output은 같은 true 값으로 loss를 계산하게 됩니다. 이것을 보조 분류기로 사용해서, 네트워크의 깊이가 깊어져도 vanishing gradient가 발생하지 않도록 방지해주는 역할을 합니다. 훈련 보조 용도 이기 때문에 실제 test할때는 제거해줍니다.

 

 Global Average Pooling은 보통 CNN을 활용한 분류 모델에서 가장 마지막에 FC layer를 쓰는 대신에 사용합니다. FC layer를 모델 가장 뒤에 사용하는 이유는 1차원으로 데이터를 변형하고 softmax 층을 활용해 분류를 하기 위해서 입니다. 이 FC layer는 이미지 크기 * filter 만큼의 데이터를 flatten 하기 때문에 상당히 차원수가 높고 따라서 계산해야할 파라메터가 상당히 많습니다.

 GAP는 CNN 에서 사용하는 FC layer의 효과를 얻기 위해 pooling을 사용하는데, 5x5 conv를 그려놓은 위의 사진을 예시로 들자면, 28 * 28 * 32 이미지가 있습니다. 28 * 28 크기의 이미지에 32개의 특성을 만들었다고 볼 수 있는데, 여기서 28*28 크기 만큼 각각 평균을 내준다는 의미입니다. 이러면 최종 결과는 32개의 1차원 데이터가 나옵니다. 결과적으로 학습할 파라메터 없이 1차원 데이터로 Flatten한 것 입니다.


다음글에 이어서 작성하도록 하겠습니다.

 

이미지 출처 : [1] https://www.researchgate.net/publication/321896881_Iris_Recognition_with_Off-the-Shelf_CNN_Features_A_Deep_Learning_Perspective

[2] https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

[3] https://hwiyong.tistory.com/45