ImageNet Classification with Deep Convolutional Neural Networks 논문 학습 정리

이형래·2022년 5월 10일
1

Papars-Vision

목록 보기
1/5

ImageNet Classification with Deep Convolutional Neural Networks

AlexNet으로 유명한 다음의 논문을 읽고 학습하여 정리했습니다.
Papers : 논문 링크

아래의 글에서
Convolutional layer → Conv-layer
Fully-Connected layer → FC-layer
로 작성합니다.

논문의 구현은 다음의 링크에서 확인할 수 있습니다.
github

Abstract

ImageNet NSVRC-2010 대회의 120만개의 고해상도 이미지를 1000개의 서로 다른 클래스로 분류하기 위해 크고 깊은 “Convolution Neural Network”를 학습시켰습니다.

테스트 데이터의 error rates는 각각 top-1: 37.5%, top-5: 17.0%로 이전의 SOTA보다 상당히 나은 결과를 보였습니다.

이 네트워크는 Max-Pooling이 뒤따르는 5개의 Conv-layers와, 3개의 FC-layers를 갖습니다. 또한 마지막 FC-layer에는 1000-way Softmax함수가 있습니다.

훈련을 더 빠르게 하기 위해, Non-saturing Neuron들과 Convolution연산에 효율적인 GPU 구현을 사용하였습니다. FC-layer에서의 Overfitting을 줄이기 위해 Dropout을 사용했습니다.

ILSVRC-2012 대회에서는 이 모델의 다양성을 가지고 2위의 에러율인 26.2%와 비교해 15.3%의 테스트 에러율를 달성했습니다.

1. 소개

이전까지 데이터셋의 크기는 수만장 정도로 상대적으로 매우 적었고, 그래서 간단한 Recognition task는 잘 수행할 수 있었습니다. 그러나 실제 사물은 이러한 데이터와 매우 다르기 때문에 더 큰 규모의 데이터셋이 필요합니다.

이제 수백만개의 레이블 된 데이터셋을 모을 수 있고, 이러한 이미지들로부터 학습하기 위해 큰 학습 능력을 가진 모델이 필요합니다.

기존 비슷한 크기의 Feedforward 네트워크와 비교할 때, CNN은 더 적은 연결과 파라미터를 갖고 있으며, 훈련하기 더 쉽습니다. 또한 현재 GPU는 CNN을 충분히 학습시킬 수 있고, ImageNet 데이터셋은 충분한 레이블된 데이터를 제공합니다.

본 논문에서 소개하는 최종 네트워크는 5개의 Conv-layer, 3개의 FC-layer로 구성되어 있으며, 이 깊이는 중요합니다. 각 Conv-layer는 파라미터를 많이 갖고 있지도 않지만, 그중 어떤 하나의 Conv-layer를 지우면 성능이 낮아집니다.

네트워크 크기는 현재 GPU의 메모리 처리능력과, 기꺼이 기다릴 수 있는 훈련시간에 의해 제한되었습니다. 우리 네트워크는 2개의 GTX 580 3GB GPU로 5~6일 정도의 훈련 시간이 걸렸습니다.

2. 데이터셋

ImageNet은 약 22000개의 카테고리를 갖는 1500만장 이상의 고해상도 데이터셋입니다.

ILSVRC에서는 1000개의 카테고리를 갖는 ImageNet의 부분집합을 사용하며,

약 120만장의 학습 데이터, 5만장의 검증 데이터, 15만장의 테스트 데이터로 이루어져 있습니다.

ImageNet에서는 관례적으로 두개의 error rate을 사용합니다.

  1. top-1 error: 가장 높은 가능성을 보이는 레이블이 정답 레이블이 아닌 테스트 이미지의 비율
  2. top-5 error: 가장 높은 가능성을 보이는 5개의 레이블 중 정답 레이블이 없는 테스트 이미지의 비율

ImageNet은 다양한 해상도의 이미지들로 구성 되어 있습니다. 모델은 일정한 크기의 input을 필요로 하기 때문에, 이미지의 짧은 부분의 길이가 256이 되도록 줄인 후, 중앙의 256x256 패치를 뽑아 모델의 입력으로 사용했습니다. 이후 각 픽셀의 평균을 빼는 작업 외에는 어떠한 전처리도 하지 않았습니다.

3. 아키텍처

5개의 Conv-layer, 3개의 FC-layer를 합친 총 8개의 layer로 구성 되어 있습니다.

네트워크 아키텍처는 위의 Figure2에 요약 되어 있습니다.

아래에 이 네트워크에 사용된 여러 방법들을 중요한 순서로 정렬하여 설명 하겠습니다.

3.1 ReLU Nonlinearity

보통 뉴런은 tanh나 sigmoid를 거친 출력을 내보냅니다. 하지만 이와 같은 output은 gradient descent를 이용한 training에서 saturated 되어 학습 속도를 저하시킵니다. 따라서 이 논문에서는 non-saturating 비선형 함수로 ReLU(Rectified Linear Units)를 사용 했습니다.

f(x)=max(0,x)f(x)=max(0, x)

ReLU(solid line) vs tanh(dashed line)

위의 Figure를 보면, ReLU를 사용했을 때, 수렴 속도가 더 빠른것을 볼 수 있습니다.
(4개의 Convolutional 네트워크에서 CIFAR-10 데이터셋을 이용하여 25% training error rate를 달성하는데에 약 6배 빠른 모습을 보였습니다.)

다른 논문(Jarreet et al)에서는 tanh(x)|tanh(x)| 함수를 사용하기도 했는데, 이는 overfitting을 예방하기 위해 사용한 것입니다. 본 논문에서는 training을 가속화 하는것을 목적으로 하기 때문에 ReLU를 사용합니다.

3.2 Training on Multiple GPUs

하나의 GTX 580 GPU는 3GB의 메모리만 갖고 있습니다.

따라서 본 논문에서는 하나의 네트워크를 2개의 GPU에 나누어 학습 시켰습니다.

cross-GPU parallelization은 각 GPU에 커널(또는 뉴런)을 반으로 나누어 할당하는데, 이때 특정 layer에서만 두 GPU가 communicate 하도록 하였습니다.

예를 들어, 3번째 layer는 2번째 layer의 모든 kernel map을 input으로 받을 수 있지만, 4번째 layer는 같은 GPU에 있는 3번째 layer의 kernel map만 받아 올 수 있습니다.

3.3 Local Response Normalization

ReLU는 saturating을 예방하기 위해 input을 normalization할 필요가 없다는 특징이 있지만, local Normalization은 여전히 generalization에 도움이 됩니다.

ax,yia^i_{x,y}ii 번째 커널의 (x,y)(x, y) position 출력이 ReLU를 통과한 값 입니다.

sum은 인접한 nn 만큼의 커널에서 이루어지며, 커널맵의 순서는 훈련이 시작 되기 전 임의로 결정됩니다.

이런 종류의 response normalization은 실제 뉴런에서 발견되는 lateral inhibition을 구현한 형태로, 서로 다른 커널을 사용한 출력 간에 경쟁을 만드는 것입니다.

상수 k,n,α,βk, n, \alpha, \beta는 hyper parameter로, 본 논문에서는 각각 k=2,n=5,α=104,β=0.75k=2, n=5, \alpha=10^{-4}, \beta=0.75로 설정 했습니다.

이러한 normalization은 top-1, top-5 error rate를 각각 1.4%, 1.2% 감소 시켰습니다.

3.4 Overlapping Pooling

CNN에서 Pooling layer는 같은 kernel map에서 인접한 뉴런들의 output을 요약합니다. 보통 Pooling 하는 뉴런들은 overlap하지 않습니다. 더 정확하게 얘기하면 Pooling layer의 커널 사이즈를 z, stride를 s라고 할 때, s=z 이면 overlap하지 않는 일반적인 local Pooling layer로 해석할 수 있습니다.

그러나 본 논문에서는 z=3, s=2로 하여 overlapping Pooling을 구성 했습니다.

이 방법으로 top-1, top-5 error rate을 각각 0.4%, 0.3% 감소 시켰습니다.

또한 이러한 Overlapping Pooling이 overfitting이 덜 발생한다는 것을 발견했습니다.

이는 1, 2, 5번째 Convolutional layer에만 적용 하였습니다.

3.5 Overall Architecture

Figure 2 와 위에서 설명한 대로 전체 네트워크는 5개의 Conv-layer, 3개의 FC-layer로 구성 되어 있고, 마지막 FC-layer는 1000개 카테고리를 예측하는 softmax가 적용 되어 있습니다.

2, 4, 5번 Conv-layer는 같은 GPU 앞 layer의 kernel map들만 연결되어 있고, 3번 Conv-layer는 2번 Conv-layer의 모든 kernel map과 연결되어 있습니다.
FC-layer의 모든 뉴런은 앞선 layer의 모든 뉴런과 연결 되어 있습니다.

Response-normalization layer는 1, 2번째 layer 뒤에 위치 합니다.
Max-Pooling layer는 Response-normalization layer뒤, 그리고 5번째 Conv-layer 뒤에 위치합니다.
ReLU는 모든 Convolutional, Fully-Connected layer의 output에 적용됩니다.

각 layer를 하나하나 살펴 보겠습니다.

  1. Convolutional layer - 1
    Input : size - 224x224x3
    Kernel : size - 11x11x3, count - 96, stride - 4
  2. Convolutional layer - 2
    Input : Conv layer-1 의 Response-Normalized & Pooled output
    Kernel : size - 5x5x48, count - 256
  3. Convolutional layer - 3
    Input : Conv layer-2 의 Response-Normalized & Pooled output
    Kernel : size - 3x3x256, count - 384
  4. Convolutional layer - 4
    Input : Conv layer-3 의 output
    Kernel : size - 3x3x192, count - 384
  5. Convolutional layer - 5
    Input : Conv layer-4 의 output
    Kernel : size - 3x3x192, count - 256
  6. Fully-Connected layer - 1
    Input : Conv layer-5 의 Pooled output
    Neurons - 4096
  7. Fully-Connected layer - 2
    Input : FC layer-1의 output
    Neurons - 4096
  8. Fully-Connected layer - 3
    Input : FC layer-2의 output
    Output : 1000-way Softmax

4. Reducing Overfitting

AlexNet의 파라미터는 6000만 개에 달합니다.
따라서 본 논문에서는 오버피팅을 방지하기 위한 두 방법을 소개 하고 있습니다.

4.1 Data Augmentation

오버피팅을 줄이기 위한 가장 간단한 방법은 레이블을 보존하여 데이터 셋을 인공적으로 확장하는 것입니다.

첫번째 방법으로는 2장에서 만든 256x256 이미지를 224x224 크기로 random 추출 및 horizontal reflection 합니다. 이렇게 하면 하나의 이미지로부터 2048장의 이미지를 얻을 수 있습니다.
모델을 테스트 할 때에는 5개(좌상단, 우상단, 좌하단, 우하단, 중앙)의 224x224 패치를 뽑아 horizontal reflect하여 총 10개의 이미지를 얻고, 각 이미지들의 예측을 평균하여 최종 예측 label을 결정 하게 됩니다.

두번째 방법으로는 training에서 RGB 채널의 강도(intensity)를 변경하는 방법이 있습니다.
본 논문에서는 RGB 픽셀 값 (Ixy=[IxyR,IxyG,IxyB]TI_{xy}=[I_{xy}^R, I_{xy}^G, I_{xy}^B]^T) 에 PCA를 적용 했습니다.

[p1,p2,p3][α1λ1,α2λ2,α3λ3]T\rm[p_1, p_2, p_3]\it[\alpha_1\lambda_1, \alpha_2\lambda_2, \alpha_3\lambda_3]^T

위의 값을 각각 RGB 픽셀에 더해줍니다.

여기서 pi,λip_i, \lambda_i 는 3x3 RGB 픽셀의 covariance matrix의 i번째 eigenvector, eigenvalue 입니다. 또한 αi\alpha_i 는 평균이 0이고, 표준편차가 0.1인 가우시안에서 추출한 랜덤 변수 입니다.

이러한 변화는 자연 이미지의 중요한 특성중 하나인 조명의 강도와 색상의 변화에 따라 물체의 정체성이 변하지 않는다는 성질을 포착할 수 있습니다.

이 방식으로 top-1 error rate을 1% 이상 감소 시켰습니다.

4.2 Dropout

본 논문에서는 Dropout을 사용하여 학습 시간을 크게 단축 하였습니다.

Dropout이란 hidden neuron의 output을 0.5의 확률로 0으로 만드는 것입니다.

이때 0.5의 확률로 output이 0이 된 neuron은 forward pass에 기여하지 않게 되고, 따라서 backprop 과정에도 참여하지 않게 됩니다. 따라서 매번 input에 따라 활성화되는 뉴런이 달라지고, 뉴런 간의 복잡한 co-adaptation을 줄여 줍니다.

테스트 단계에서는 모든 뉴런을 사용하지만 각 출력에 0.5를 곱해줍니다.

이는 dropout 네트워크에 의해 생성된 예측 분포의 기하학적 평균을 취하는 것으로 합리적인 근사치로 여길 수 있습니다.

본 논문에서는 처음 두 FC-layer뒤에 dropout을 적용 하였습니다.

5. 학습 세부사항

이 장에는 학습에 관련한 hyper-parameter, weight 및 bias 초기화 방법들이 소개 되어 있습니다.

  • Optimizer : Stochastic Gradient Descent (SGD)
  • Batch size : 128
  • Momentum : 0.9
  • Weight decay : 0.0005 (작은 weight decay가 모델 학습에 중요함을 발견 하였습니다)
  • Weight initialization : 평균=0, 표준편차=0.01 인 가우시안 분포
  • Bias initialization : 2, 4, 5번 Conv-layer, FC-layer → 1로 초기화 & 1, 3번 Conv-layer → 0으로 초기화.
  • Initial learning rate : 0.01 (학습 동안 총 3번 감소)
  • Epochs : roughly 90

weight는 아래 식에 의해 갱신됩니다.

learning rate는 처음 모든 layer에 같은 값을 사용 했습니다. 이때, validation error rate가 개선되지 않으면 그때의 learning rate을 10으로 나누어 주었습니다.
그 결과 learning rate은 학습 종료까지 총 3번 감소 하였습니다.

120만개의 training set을 사용하여 약 90Epochs 를 반복했고,
두개의 NVIDIA GTX 580 3GB GPU를 이용하여 약 5~6일 정도의 시간이 걸렸습니다.

6. 결과

ILSVRC-2010의 결과는 다음 Table 1에서 확인할 수 있습니다.
top-1, top-5 error rate 각각 37.5%, 17.0%를 달성 했습니다.

다음은 ILSVRC-2012의 결과 입니다.

profile
프론트엔드 개발자 입니다. 최근에는 Flutter를 이용한 크로스 플랫폼 앱 개발에 관심이 많습니다.

0개의 댓글