Paper
ImageNet Classification with Deep Convolutional Neural Networks(NIPS 2012)
본 논문의 코드 구현은 깃허브에서 확인 가능합니다.
0. Abstract
- ImageNet LSVRC-2010 대회에서 120만 개의 고해상도 이미지를 1000개의 다른 이미지로 분류하기 위해 크고 깊은 convolutional neural network를 훈련시켰다.
- 테스트 데이터에서 이전의 SOTA 모델보다 나은 37.5%, 17.0%의 top-1 error rate와 top-5 error rate를 달성했다.
- 6천만 개의 파라미터들과 650,000개의 뉴런으로 구성된 neural network는 5개의 convolutional layers로 구성되며, 그 중 일부는 max-pooling layer, 3개의 final 1000-way softmax를 가진 fully-connected layers로 구성된다.
- Fully-connected layers에서 과적합을 줄이기 위해 드롭아웃이라는 정규화 방법을 사용하였다.
- ILSVRC-2012 대회에서 모델 변형을 통해 2위 모델의 오차율 26.2%보다 나은 15.3%의 top-5 test error rate를 달성했다.
1. Introduction
object recognition에 대한 현재의 접근 방식은 machine learning을 필수적으로 사용한다. 성능을 향상시키기 위해 우리는 더 큰 데이터셋을 수집하고, 더 강력한 모델을 학습하고, 과적합을 방지하기 위한 더 나은 기술을 사용할 수 있다. 최근까지 레이블이 지정된 이미지 데이터셋은 상대적으로 매우 적었다. 간단한 recognition task에서는 레이블이 보존된 형태로 augmented하는 경우 해결할 수 있지만 현실적인 객체는 상당한 변동성을 보이기 때문에, 객체를 인식하는 방법을 배우려면 훨씬 더 큰 훈련 세트를 사용해야 한다. 최근에야 수백만 개의 이미지로 레이블이 지정된 데이터 세트를 수집하는 것이 가능해졌다. 그 예로는 22,000개 이상의 카테고리에서 1,500만 개 이상의 레이블이 지정된 고해상도 이미지로 구성된 ImageNet
이 포함된다.
수백만 개의 이미지에서 수천 개의 객체를 학습하려면 학습 용량이 큰 모델이 필요하다. 그러나 object recognition의 엄청난 복잡성은 ImageNet만큼 큰 데이터 세트로도 이 문제를 지정할 수 없다는 것을 의미하므로, 우리의 모델은 우리가 가지고 있지 않은 모든 데이터를 보상하기 위해 많은 사전 지식을 가지고 있어야 한다. Convolutional Neural Networks(CNNs)
는 그러한 종류의 모델 중 하나를 구성한다. 이것의 용량은 깊이와 폭을 변경하여 제어할 수 있으며, 이미지의 특성(즉, 통계의 고정성 및 픽셀 의존성의 지역성)에 대해 강력하고 대부분 정확한 가정을 한다. 따라서 유사한 크기의 layers가 있는 feedforward 신경망에 비해 CNN은 훨씬 적은 connections과 파라미터를 가지고 있으므로 훈련하기가 더 쉬운 반면 이론적으로 최상의 성능은 약간 더 나쁠 가능성이 있다.
이 논문의 구체적인 기여는 다음과 같다.
- ILSVRC-2010 및 ILSVRC-2012 대회에서 사용된 ImageNet과 하위 집합에 대해 현재까지 가장 큰 convolutional neural network 중 하나를 훈련시켰고, 이러한 데이터셋에 대해 보고된 최고의 결과를 달성했다.
- 2D convolution에 고도로 최적화된 GPU 구현과 우리가 공개적으로 사용할 수 있는 convolutional neural network 훈련에 내재된 다른 모든 작업을 작성했다.
- 네트워크에는 성능을 향상시키고 훈련 시간을 단축하는 여러 가지 새롭고 특이한 기능이 포함되어 있으며, 이는 섹션 3에 자세히 설명되어 있다.
- 네트워크의 크기는 120만 개의 레이블이 지정된 훈련 사례에서도 overfitting을 일으키는 중요한 문제가 되었고, 이는 섹션 4에 설명된 overfitting을 방지하기 위해 몇 가지 효과적인 기술을 사용했다.
- 최종 네트워크는 5개의 convolutional layer와 3개의 fully-connected layer를 포함하고 있으며, convolutional layer를 제거하면 성능이 저하되는 것을 발견하여 네트워크의 깊이는 중요한 것으로 보인다.
2. The Dataset
ImageNet은 약 22,000개의 category와 1,500만 개 이상의 label이 지정된 고해상도 이미지 데이터 세트이다. 이 이미지들은 웹에서 수집되었고, 아마존의 Mechanical Turk crowd sourcing tool에 의해 레이블이 지정되었다. 2010년부터 Pascal Visual Object Challenge의 일종으로 ILSVRC
(ImageNet Large-Scale Visual Recognition Challenge)라는 대회가 개최되었다. ILSVRC는 각 1,000개의 categories에 약 1,000개의 이미지가 있는 imageNet의 subset을 사용한다. 모두 합치면 총 약 120만 개의 training images, 50,000개의 validation images, 글고 15만 개의 testing images가 있다.
ImageNet은 가변 해상도 이미지로 구성되어 있는 반면, 시스템에는 일정한 입력 차원이 필요하다. 따라서 이미지를 256x256의 고정 해상도로 다운샘플링했다. 직사각형 이미지가 주어졌을 때, 먼저 이미지의 크기를 더 짧게 해서 길이가 256이 되도록 한 다음 결과 이미지에서 중앙 256x256 patch를 잘라냈다. training set에서 각 픽셀에 대한 mean activity를 추출한 것 외에는 다른 방법으로 이미지를 사전 처리하지 않았다. 그래서 픽셀의 중심적인 원시 RGB 값에 대해 네트워크를 훈련시켰다.
3. The Architecture
3.1 ReLU Nonlinearity
입력 x의 함수로써 뉴런의 출력 f를 모델링하는 표준 방법은 f(x)=tanh(x) 또는 f(x) = $(1+e^{-x})^{-1}$이다. gradient descent
의 관점에서 이러한 saturating nonlinearity
는 non-saturating nonlinearity
f(x) = max(0,x)보다 훨씬 느리다. 이러한 non-saturating nonlinearity를 가지는 뉴런을 ReLU(Recrected Linear Units)
라고 한다. ReLU를 사용하는 Deep convolutional neural networks는 tanh units을 사용하는 것보다 몇 배 더 빨리 훈련된다.
3.2 Training on Multiple GPUs
단일 GTX 580 GPU의 메모리는 3GB에 불과하므로 이 GPU에서 훈련할 수 있는 네트워크의 최대 크기가 제한된다. 따라서 본 본문에선 두 개의 GPU에 네트워크를 분산시킨다. 현재 GPU는 호스트 시스템 메모리를 거치지 않고, 서로의 메모리에서 직접 읽고 쓸 수 있기 때문에 cross-GPU parallelization
에 특히 적합하다. 병렬화 체계는 기본적으로 각 GPU에 커널(또는 뉴런)의 절반을 배치하며, GPU가 특정 layer에서만 GPU를 통합한다. 본 논문에선 layer 3의 kernel은 layer 2의 모든 kernel map에서 입력을 받지만 layer 4의 kernel은 다시 동일한 GPU에 있는 layer 3의 kernel map으로부터만 입력을 받는다. 이를 통해 계산량의 허용 가능한 일부가 될 때까지 통신량을 정밀하게 조정할 수 있다. 이러한 방식은 top-1과 top-5 오류율을 각각 1.7%와 1.2% 감소시켰다.
3.3 Local Response Normalization
Sigmoid나 tanh 함수는 입력 data의 속성이 서로 편차가 심하면 saturating되는 현상이 심해져 vanishing gradient
를 유발할 수 있다. 하지만 ReLU는 non-saturating nonlinearity 함수이기 때문에 saturating
를 방지하기 위해 input normalization
이 필요하지 않다는 바람직한 특성을 가지고 있다. 적어도 일부 훈련에서 ReLU에 양의 입력을 생성한다면 해당 뉴런에서 학습이 이루어진다. 하지만 여전히 다음의 local normalization
이 generalization
에 도움이 된다는 것을 발견했다.
ReLU는 함수 값을 받으면 그 값을 그대로 뉴런에 전달하기 때문에 너무 큰 값이 전달되어 주변의 낮은 값이 뉴런에 전달되는 것을 막을 수 있다. 이것을 예방하기 위한 normalization이 Local Response Normalization
이다. 활성화 함수를 적용하기 전에 Normalization을 적용하여 함수의 결과값에 더 좋은 일반화 결과를 도출한다. 하지만 AlexNet 이후 현대의 CNN에선 LRN 대신 batch normalization
방법을 사용한다. 이러한 Local Response Normalization 기법을 통해 top-1 error rate와 top-5 error rate를 각각 1.4%, 1.2% 감소시켰다.
- $a_{x,y}^{i}$ : i번째 kernel의 (x,y) 위치의 출력이 ReLU를 통과한 output
- sum은 n만큼의 인접한 커널에서 이루어짐
- N : Layer에 있는 kernel의 총 개수
- K, n, $\alpha$, $\beta$ : 하이퍼 파라미터 -> K=2, n=5, $\alpha$=0.00001, $\beta$=0.75
3.4 Overlapping Pooling
CNN의 Pooling layers는 동일한 kernel map에 있는 인접한 뉴런의 output을 요약해준다. stride 값인 s와 kernel size인 z의 값이 동일할 경우 local pooling
에 해당하며, s < z일 경우 overlapping pooling
을 얻는다. 전통적으로 pooling layer는 overlapping하지 않지만 본 논문에선 s = 2 그리고 z = 3으로 네트워크 전체에 사용하였다. 이 방식은 동등한 차원의 출력을 생성하는 non-overlapping 방식의 s = 2, z = 2와 비교하여 top-1 error rate와 top-5 error rate를 각각 0.4% 및 0.3% 줄인다. overlapping 방식은 또한 overfit에 조금 더 강하다.
3.5 Overall Architecture
CNN의 전체적인 구조는 다음과 같다. 네트워크에는 8개의 layer가 포함되어 있다. 처음 5개는 convolutional layer
이며 남은 3개는 fully-connected layer
이다. 마지막 fully-connected layer의 출력은 1000-way softmax에 공급되어 1000개의 클래스 레이블에 대한 분포를 생성한다. multinomial logistic regression
의 목표를 최대화하며 이는 예측 분포에서 올바른 label의 log-probability의 training case 전체의 평균을 최대화하는 것과 같다. 2,4,5번째 convolutional layer의 kernel은 동일한 GPU에 있는 이전 layer의 kernel map에만 연결된다. 3번째 convolutional layer의 kernel은 2번째 layer의 모든 kernel map과 연결된다. fully-connected layer의 뉴런은 이전 층의 모든 뉴런과 연결된다. response-normalization layer
는 1번째 및 3번째 convolutional layer를 따른다. 3.4 섹션에서 설명된 max pooling layer는 response-normalization layer와 5번째 convolutional layer를 모두 따른다. ReLU 비선형성은 모든 convolutional 및 fully-connected의 출력에 적용된다.
- Conv layer1 : 224x224x3 입력 이미지를 11x11x3 크기의 stride가 4인 96개 커널로 출력
- Conv layer2 : Conv layer1의 출력을 response-normalize 및 pooling을 거쳐 입력으로 사용하며 크기가 5x5x48인 256개 커널로 필터링
- Conv layer3 : Conv layer2의 출력을 normalize, pooling을 거쳐 입력으로 사용하며 크기가 3x3x256인 384개 커널로 필터링
- Conv layer4,5 : 4번째 layer는 3x3x192 크기의 커널 384개, 5번째 layer는 3x3x192 크기의 커널 256개로 출력
- 3,4,5번째 layer는
intervening pooling
혹은normalization layers
없이 서로 연결
- 3,4,5번째 layer는
- FC layer1 : Conv layer5의 출력을 pooling을 거쳐 4096개로 출력
- FC layer2 : FC layer1의 출력을 4096개로 출력
- FC layer3 : FC layer2의 출력을 1000개로 출력
4. Reducing Overfitting
4.1 Data Augmentation
이미지 데이터의 overfitting을 줄이는 가장 쉽고 일반적은 방법은 label-preserving transformations을 사용하여 데이터셋을 인위적으로 확장하는 것이다. 이러한 Data Augmentation 기법은 GPU가 이전 이미지 배치에서 훈련하는 동안 CPU의 파이썬 코드로 생성되기 때문에 계산적으로 부담이 없다.
Generating image translation and horizontal reflections
첫 번째 data augmentation 기법은 image translations와 horizontal reflections로 구성된다. 먼저, 앞서 생성된 256x256 크기의 이미지에 대해 RandomResizedCrop
및 RandomHorizontalFlip
을 적용시켜 하나의 이미지에서 224x224 크기의 2048장의 이미지를 얻는다. 모델을 테스트하는 경우에는 중앙, 좌측 상단, 좌측 하단, 우측 상단, 우측 하단 이렇게 5개의 위치에서 224x224 크기로 crop한 후 horizontal reflection을 적용해 10개의 이미지를 얻고 각 이미지로부터 얻은 softmax 값의 평균으로 최종 label을 결정한다.
Altering the intensities of the RGB channels in training images
두 번째 기법은 훈련 이미지에서 RGB 채널의 강도를 변경하는 것이다. 먼저, ImageNet training set 전체에 걸쳐 RGB 픽셀 값 세트에 대해 PCA
를 수행한다. 이후 RGB 각 색상에 대한 eigenvalue
를 찾고, 평균 0, 표준 편차 0.1의 가우시안 분포에서 추출한 랜덤 변수를 곱해 RGB 값에 더해준다. 이 방식은 조명의 강도와 색상 변화에 따라 물체의 동일성이 변하지 않는다. 이를 통해 top-1 error를 1% 이상 감소시켰다. 각각의 RGB 이미지 픽셀 $I_{(x,y)} = \begin{bmatrix}I_{xy}^{R}& I_{xy}^{G} & I_{xy}^{B} \ \end{bmatrix}^\top$은 다음과 같다.
$$\begin{bmatrix} P1 & P2 & P3 \ \end{bmatrix}\begin{bmatrix} \alpha_1 \lambda_1 & \alpha_2 \lambda_2 & \alpha_3 \lambda_3 \ \end{bmatrix}^\top$$
- $P_i$와 $\lambda_i$ : 3x3 공분산 행렬의 eigenvector와 eigenvalue
- $\alpha_i$ : 앞서 언급한 랜덤 변수
4.2 Dropout
다양한 모델의 예측을 결합하는 것은 테스트 오류를 줄이는 매우 성공적인 방법이지만 이미 훈련하는 데 며칠이 걸리는 큰 신경망에게는 너무 많은 비용이 든다. 그러나 Dropout
은 0.5의 확률로 은닉층의 뉴런에서 발생하는 출력을 0으로 설정한다. 이런 식으로 'dropped out'된 뉴런들은 forward
및 backpropagation
과정에 참여하지 않는다. 따라서 입력에 제시될 때마다 신경망은 다른 아키텍쳐를 샘플링하지만, 이 모든 아키텍쳐는 가중치를 공유한다. 따라서 뉴런 간의 co-adaption
을 줄이게 되며, 여러 뉴런 간의 조합에서도 확실한 특징만 학습하게 된다. 테스트 시에는 모든 뉴런을 사용하지만 0.5를 곱한 출력을 사용한다. 또한 본 논문에선 2개의 fully-connected layers에서만 dropout을 적용한다. Dropout을 통하여 수렴에 필요한 반복 횟수는 두 배 증가하였으며 overfitting을 피할 수 있다.
5. Details of Learning
본 연구의 모델의 구성은 다음과 같다.
- Batch size : 128
- Momentum 0.9
- Weight decay : 0.0005
- 이 작은 크기의 weight decay는 단순한 regularizer가 아니라 모델의 training error를 줄여준다.
- Optimizer : stochastic gradient descent
- Weight initialization : 평균이 0, 표준 편차가 0.01의 가우시안 분포
- Bias initialization
- 2nd, 4th, 5th Conv layers & FC layers : 1
- ReLU에 양수 입력을 제공하여 학습의 초기 단계를 가속화
- 1st, 3rd Conv layers : 0
- 2nd, 4th, 5th Conv layers & FC layers : 1
- Learning rate : 0.01
- validation error가 상향되지 않으면 10으로 나눔
- 학습 종료 전에 3번의 learning rate 감소
- Epoch : 약 90
- i : iteration index
- v : momentum variable
- $\epsilon$ : learning rate
- $\left< \frac{\partial L}{\partial \omega}\right>$ : i번째 batch에서 $\omega_i$를 사용하여 구한 gradient들의 평균