[논문리뷰 | CV] ImageNet Classification with Deep Convolutional Neural Networks (2012) Summary

9e0na·2023년 4월 11일
2

[논문리뷰]

목록 보기
1/40
post-thumbnail

Title

  • ImageNet Classification with Deep Convolutional Neural Networks(2012)
  • AlexNet


Abstract

  • ILSVRC-2010 컨테스트에서 120만개의 고해상도 이미지를 1,000개의 다른 클래스로 분류하기 위해 Convolutional 신경망을 훈련하였고, 그 결과 top-1 및 top-5 오류율 37.5% 및 17%를 달성하였다.
  • 5개의 Convolutional layers로 구성되며, 그 중 일부는 Max-Pooling layers가 뒤에 따르고, softmax함수를 사용하여 1,000개의 output을 출력하는 3개의 Fully-connected layers로 이루어졌다.
  • 연산의 효율성을 위해 2개의 GPU 로 병렬적인 구조로 설계됐다.
  • Fully-connected layers의 과적합을 줄이기 위해 'dropout' 정규화 방법을 사용했다.
  • ILSVRC-2012 컴피티션에서 우승을 차지한 모델이며, 15.3%의 상위 5개 테스트 오류율을 달성하였다.

0. Background

  • AlexNet이란?
    -2012년 ILSVRC 대회 우승 모델
    -CNN 모델의 기초인 LeNet 이후 14년만에 나온 후속 모델로 ImageNet Top-5 정확도를 73.8%에서 83.7%로 대폭 증가시킨 모델
    -2개의 GPU로 병렬연산을 수행하기 위해 병렬적인 구조로 설계된 모델
    -딥러닝 열풍을 일으키는 데 큰 역할

  • ILSVRC(Imagenet Large Scale Visual Recognition Challenge)
    -이미지 인식 경진대회로 대용량의 이미지 데이터셋을 주고 이미지 분류 알고리즘의 성능 평가
    -2012년 AlextNet이 오류율을 크게 낮추며 딥러닝이 큰 주목을 받았다.
    -그 후 딥러닝을 활용한 기법이 꾸준히 정확도를 개선해 오고, 컴퓨터 비전 분야에 큰 역할을 수행

  • Keypoint
    : CNN을 사용한 딥러닝 구조에서 120만 개의 고해상도 이미지를 어떤 기술로 처리를 하였는지, 오버피팅 방지를 위해 어떻게 해결하였는지, 어떤 활성화 함수를 사용하였는지 등 확인해보기를 권장한다.

1. Introduction

본 논문의 기여는 다음 다섯 가지로 요약된다.

  1. ILSVRC-2010 및 ILSVRC-2012 대회에서 사용된 ImageNet의 하위 집합에서 지금까지 가장 높은 점수를 기록했다.
  2. 2D 합성곱에 최적화된 GPU를 사용하여 Convolutional 신경망 훈련을 공개적으로 제공한다.
  3. 이 네트워크에는 성능을 개선하고 훈련시간을 줄일 수 있는 새로운 기능이 많이 포함되었다.
  4. 과적합 방지를 위한 다양한 기술들을 사용하였다.
  5. 5개의 Convolutional Layers와 3개의 Fully-connected Layers로 구성되었으며, 이 깊이가 매우 중요하다.

2. The Dataset & Environment

  • ImageNet은 약 22,000개의 범주에 속하는 1,500만 개 이상의 레이블이 지정된 고해상도 이미지 데이터를 제공한다. 이것의 하위 집합인 ILSVRC 대회에서는 1,000개의 범주에 대해 각각 약 1,000개의 이미지를 제공한다. 약 120만개의 Training set, 50,000개의 Validation set, 150,000개의 Test set를 제공한다.

  • ImageNet은 이미지를 256 × 256의 고정 해상도로 downscale했다. 직사각형 이미지가 주어졌을 때, 먼저 이미지의 짧은 변을 기준으로 길이가 256이 되도록 rescale해주고, 256 × 256사이즈에 맞게 중앙에서 잘라냈다. 이후 Training Set에서 zero-centered를 맞추기 위해 각 필셀에서 각 필셀에 전체 픽셀의 평균을 빼주는 것 이외는 별다른 이미지 전처리를 하지 않았다.

  • 환경: GTX 580 3GB 2개


3. The Architecture

  • 227x227 크기의 RGB 3 Channel 이미지를 input으로 사용한다.
  • 총 8개의 레이어로 구성되어 있고, 5개는 Convolutional Layers, 3개는 Fully Connected Layers로 구성된다.
  • [Input - Conv1-MaxPool1-Conv2-MaxPool2-Conv3-Conv4-Conv5-MaxPool5-FC6-FC7-FC8(output)]으로 구성된다.
  • 첫번째와 두번째 Layer에는 ReLU + MaxPooling + LRN 으로 연결된다.
  • Convolutional Layer와 Fully-Connected Layer에는 모두 ReLU 활성화함수를 사용한다.

*224x224는 오타입니다.


AlexNet 구조를 정리해보면 다음과 같다.

  • 첫번째, Conv1, MaxPool1

-input size: (3,227,227) -Filter 수: 96개
-Filter size: (3x11x11) -stride: 4

-Pooling size: 3x3 -stride:2

-activation: ReLU + MaxPooling + LRN

  • 병렬적인 구조이기 때문에 Conv1 Layer에서 Filter의 수가 96에서 48, 48로 할당 되었다는 것을 확인할 수 있다. 이후 Convolution 연산 공식을 참고해서 shape를 계산한다.
  • Pooling size보다 Stride가 작기 때문에 Max Pooling 연산을 할 때 겹치는 부분이 발생한다.

  • 두번째, Norm1, Conv2, MaxPool2

-Filter 수: 256개 -Filter size: (48x5x5)
-stride: 1 -padding: 2

-Pooling size: 3x3 -stride:2

-activation: ReLU + MaxPooling + LRN


  • 세번째, Norm2, Conv3, Conv4

-Filter 수: 384개 -Filter size: (128x3x3)
-stride: 1 -padding: 1

-activation: ReLU + Addictional trick

Addictional trick
: 유일하게 이전 layer에서 모든 커널 맵들과 연결된다.
즉, '이전에는 따로따로 들어왔더라면, 이제부터는 합쳐서 같이 보내겠다'는 의미이다.


예를 들어, layer3의 입력은 모든 커널의 layer2에서 받지만, layer4이 입력은 같은 GPU에 있는 layer3에서만 입력을 받는다. 이러한 방법은 교차검증에서 문제가 되지만 방대한 양의 계산이 가능하게 된다.


  • 네번째, Conv4, Conv5, MaxPool5

-Filter 수: 256개 -Filter size: (192x3x3)
-stride: 1 -padding: 1

-Pooling size: 3x3 -stride:2

-activation: ReLU + MaxPooling


  • 다섯번째, MaxPool5, FC6, FC7, FC8(Output)

-Flatten: 9,216

-activation: ReLU

128x6x6 = 4,608
병렬구조이기 때문에 4,608x2 = 9,216이 된다. 9,216으로 Flatten 이후 3개의 Fully Connected 거친 후 Softmax 함수를 활용하여 출력에 적용한다.


3.1 ReLU 함수

  • 입력 x 에 대해 f를 출력하는 기본적인 방법은 f(x) = tanh(x) 혹은 f(x) = (1 + e−x)−1이다.
  • LeNet-5에서는 tanh 사용했지만, 기울기가 점점 0에서 수렴하여 역전파의 경우 기울기 소실 문제가 발생하였다.
  • RuLU를 사용하는 것이 정확도를 유지하면서 tanh를 사용하는 것보다 6배나 빨라 AlexNet 이후로는 ReLU 함수를 주로 사용한다.


3.2 Training on Multiple GPUs

  • 메모리는 3GB에 불과하므로 네트워크의 최대 크기가 제한 되기 때문에 두 개의 GPU에 네트워크를 분산시킨다.
  • GPU 간 병렬구조 방식은 커널의 절반을 각 GPU에 배치하고 한 가지 Addictional trick을 사용한다.

3.3 Local Response Normalization (LRN)

  • 현재는 Batch Normalization의 등장으로 잘 사용하지는 않는다. 하지만, 그 당시에는 ReLU의 결과값이 커서 주변 뉴런에 영향을 주는 것을 방지하기 위해 정규화 과정이 필요했다.
  • ReLU는 양수의 방향으로 입력의 값을 그대로 사용하기 때문에 매우 높은 하나의 픽셀값이 주변의 픽셀에 영향을 미치게 될 수 있다. 즉, 인접해 있는 픽셀을 참고해서 현재 픽셀에 대한 결과를 계산해야 되기 때문에 영향을 미칠 수 있다.
  • Map의 같은 위치에 있는 픽셀끼리 정규화하는 것이다.

  • N: 레이어에 존재하는 전체 커널의 수
  • n: 인접하다고 판단할 범위 값(하이퍼파라미터)
  • aix,y: (x,y)에 존재하는 픽셀에 대해 i번째 커널을 적용하여 얻은 결과에 ReLU를 씌운 값
  • 신경생물학에서 원리를 가져온 것으로, '측면억제'현상이 발생한다.
    구체적인 예시로 아래 그림에 검은 부분을 집중해서 보이면 회색의 점이 보일 것이다.
    이는 강한 자극인 검정색이 약한 자극인 흰색의 인식을 막아 발생하는 '측면억제'현상이 발생한다.


3.4 Overlapping Pooling

  • Pooling size보다 Stride가 작기 때문에 Max Pooling 연산을 할 때 겹치는 부분이 발생한다.
  • 중첩 플링은 정보의 손실을 최소하하고 Overfitting을 방지한다.

4. Reducing Overfitting

  • 1) Data Augmentation

  • 2) Dropout

4.1 Data Augmentation

  • 데이터의 과적합을 줄이는 가장 쉽고 일반적인 방법은 데이터 집합을 인위적으로 확대하는 것이다.
  • 첫 번째 변형 방법은 '좌우반전'이다.
    이미지(256 x 256)를 좌우반전 시켜도 이미지의 라벨은 변하지 않고, 그 이미지를 랜덤으로 잘라서 이미지(227 x 227)를 입력으로 사용하였다.

  • 두 번째 변형 방법은 'RGB 채널의 색상강도를 조절'하는 것이다.

    -학습 세트 전체에서 RGB 픽셀 값 세트에 대해 주성분분석(PCA)를 수행한다. 해당 고유값에 비례하는 크기와 평균0, 표준편차 1을 갖는 가우시안에서 추출한 무작위 변수를 곱한 후 원래의 픽셀 값에 곱해주어 색상의 변형을 주는 방법이다. 원래의 라벨을 해치지 않으면서 색상의 변형을 일으키는 것이 가능하다.


출처: https://www.researchgate.net/figure/a-RGB-image-of-first-three-PCA-and-third-component-of-A1-and-A2-image-in-gray-tones_fig2_281721779


4.2 Dropout

  • 확률 0.5로 각 숨겨진 뉴런의 출력을 다음 뉴런으로 신호를 전달하지 않는 방법이다.
  • 이 기술은 뉴런이 특정 다른 뉴런의 존재에 의존할 수 없기 때문에 뉴런의 복잡성을 크게 감소시킨다.
  • Alexnet에서는 첫번째와 2번째의 Fully-Connected Layers에 Dropout을 적용해서 좋은 효과를 봤다.

*dropout 그림(출처: Srivastava, Nitish, et al. ”Dropout: a simple way to prevent neural networks from overfitting”, JMLR 2014)


5. Details of learning

-batch_size = 128
-momentum = 0.9
-weight_decay=0.0005
-optimizer = Stochastic Gradient Descent(SGD)

  • 새롭게 발견한 점
    : 작은 양의 가중치 감소가 모델 학습하는 데 매우 중요하다는 것을 발견했다. 여기서 가중치 감소는 단순한 정규화가 아니라 모델 훈련 오류를 줄이는 것이다.

-i: iteration index
-v: momentum variable
-ε: learning rate
-<dl/dw>: i번째 bach에서 W_i를 사용하여 구한 gradient들의 평균

  • 초기화방법: 표준편차 0.01이 적용된 zero-mean Gaussian distribution을 각 Layer에 적용

  • neuron bias=1로 설정. 특히 2,4,5번째 Convolutional Layers와 앞의 두 개의 Fully-Connected Layers에 1로 설정하였다.

    bias를 1로 주면 ReLU에 positive input을 주는 효과가 있기 때문에 초기 학습을 더 가속화시킬 수 있다.

  • Learning rate: 현재의 Learning rate에서 더 이상 감소하지 않을 경우 1/10만큼 감소시켰다.

    초기 learning rate는 0.01이었고, 학습이 끝날 때까지 3번 감소하여 최종적인 learning rate는 0.00001이였다.

  • 훈련횟수: 90cycle


6. Results

  • 위의 결과는 AlextNet을 사용한 ILSVRC-2010 컴피티션 결과이다.
  • SParse coding: 6개의 sparse-coding model들로부터 나온 predict 결과를 평균 후 예측하는 방식
  • SIFT+FVs: 훈련된 두 개의 분류기로 predict한 것들의 평균으로 예측하는 방식

  • 위의 결과는 AlextNet을 사용한 ILSVRC-2012 컴피티션 결과이다.
  • Test set과 Validation set을 예측했을 때 정확도 차이가 0.1% 이하로 발생하였기 때문에 두 지표를 같이 비교
  • 1 CNN: CNN 모델을 하나만 써서 predict 하는 방식
  • 5 CNN: CNN 모델을 5개의 평균을 사용하여 predict 하는 방식
  • 1 CNN*: 하나의 CNN 모델에 추가로 6개의 Convolutional Layers을 붙여 predict 하는 방식
  • 7 CNNs: 1 CNN7개의 모델을 그 평균을 사용하여 predict 하는 방식

6.1 Qualitative Evaluations

  • (왼쪽) 8개의 ILSVRC-2010 Test 이미지와 모델에서 가장 가능성이 높은 곳으로 간주되는 5개의 레이블
  • (오른쪽) 첫번째 열에 있는 ILSVRC-2010 Test 이미지이며, 나머지 열은 특정 벡터에서 유클리드 거리가 가장 작은 특정 백터를 생성하는 6개의 Train 이미지
  • network's visual knowledge 관찰하기 위해 마지막 Fully-Connected Layer의 4,096차원을 살펴봤다.
  • L2 기준에 따라 4,096 layer에서의 feature activation을 기준으로 추출하였다. 픽셀 단위로는 train set과 test set이 전혀 다르지만 같은 부류라고 판단하는 것을 확인할 수 있다.
  • 결론: 더 고차원적인 근거로 분류해야 한다.

7. Discussion

본 논문을 통해 주목할만한 점은 다음 다섯 가지로 요약된다.

  1. Single convolutional layer가 제거되면 네트워크의 성능이 저하된다.
    ex) 중간 계층을 제거하면 네트워크의 상위 1위 성능에 대해 약 2%의 손실이 발생
  2. 모델의 깊이는 매우 매우 중요하다.
  3. 학습 이전에 비지도학습으로 미리 학습 했더라면, 성능을 높이는 데 도움이 됐을 것이다.
  4. 컴퓨터의 성능이 좋아진다면, 성능을 높이는 데 도움이 됐을 것이다.
  5. 정적인 이미지에서는 볼 수 없고, 다양한 요소들을 분류할 수 있는 Convolutional Layer를 사용하고자 한다.

🎯 summary

첫 논문 리뷰여서 그런지 생각보다 시간이 꽤 걸렸다. 그럼에도 불구하고 CNN에 대해서 공부하는 것은 너무 재밌었다. 머신러닝 기말고사 컴피티션에서 MLP 모델 성능을 높이기 위해 하이퍼파라미터 튜닝과 아키텍처 구성을 했던 경험이 있어서 아주 흥미롭게 읽었던 것 같다.

과적합 방지를 위해 지금도 자주 쓰이는 'Dropout'과 'Augmentation' 개념이 이때부터 나왔다는 사실을 알게 되었고, ReLU 함수도 이 논문을 기점으로 많이 사용한다는 사실도 알게 되었다. 그리고 LRN으로 정규화를 수행하는 것에 대해 인상 깊었다. 특히 '측면억제'현상과 같이 인접한 픽셀에 영향을 줄 수 있기 때문에 나온 아이디어라는 것이 인상 깊었다. 지금으로부터 11년전 발표한 논문임에도 뛰어난 성능을 보인다는 것이 놀라웠고, 딥러닝의 발전속도가 빨라지고 있어서 한편으로는 무서웠다.

궁금한 점은 1,5 Layer 이외에 다른 Layer를 추가하였을 때는 어떤 결과가 나올 것이고, "더 적은 레이어로는 유사한 성능을 낼 수 없을까?"라는 의문점이 있다.

끝으로, 모델의 깊이가 매우 중요하고 이것이 성능에 많은 영향을 준 다는 것을 알 수 있었고, 이 논문 이후에 모델의 깊이에 대해서 다루는 VGG모델을 공부할 것이다.


📚 References

profile
데이터사이언티스트가 되기 위해 [a-zA-Z]까지 정리하는 거나입니다 😊

0개의 댓글