논문 링크
Abstract
- 120만개의 고화질 이미지를 1000개의 클래스로 분류하는 ILSVRC 2010 대회 우승을 차지한 CNN 구조(37.5% top-1 error rate, 17.0% top-5 error rate)
- 6천만 개의 파라미터와 65만개의 뉴런으로 구성되어 있으며, 일부는 max-pooling 레이어가 뒤따라오는 5개의 컨볼루션 레이어와 마지막엔 1000-way softmax를 가지는 세 개의 fully-connected 레이어로 구성되어 있다.
- 훈련을 더 빠르게 하기 위해 non-saturated 비선형함수를 사용했고, 컨볼루션 연산에 매우 효율적인 GPU 구현을 사용했다.
- fully-connected 레이어에서 과적합을 줄이기 위해 “dropout”이라는 정규화 방법을 사용했다.
- ILSVRC-2012 대회에서 top-5 test error rate가 15.3% 나왔으며, 1위를 차지했다.
1. Introduction
background
- object recognition 성능 향상을 위해 우리는 더 큰 데이터셋을 모으거나, 더 강력한 모델을 학습하거나, 오버피팅을 막기 위한 더 나은 테크닉이 필요하다.
- (당시) 기존 데이터셋의 사이즈는 상대적으로 작았고, 그중 MNIST와 같은 데이터셋은 인간 수준의 정확도를 달성했지만, 이는 현실에서 볼 수 있는 변동성을 고려하지는 못한다.
- LabelMe, ImageNet과 같은 방대한 데이터셋이 제공되고, 강력한 GPU가 등장하면서 CNN을 이미지에 사용하는 것이 가능해졌다.
CNN의 사용
- 수백만 장의 이미지로부터 수천 개의 객체를 학습하기 위해서는 거대한 learning capacity를 가진 모델이 필요하지만, object recognition 태스크의 복잡성 문제는 ImageNet과 같은 방대한 데이터셋만으로는 부족하다.
- 추가로 이미 갖고 있는 데이터 뿐만 아니라 갖고 있지 않은 데이터에 대해서도 적용하기 위해서는 모델은 방대한 양의 사전 지식을 갖고 있어야 한다.
- CNN이 이러한 조건을 만족하는 모델 중 하나이다.
- CNN은 깊이와 너비에 변동을 줌으로써 모델의 크기를 조절할 수 있고, 이미지 본질에 대해서 강력하고 거의 맞는 추측을 할 수 있다. (stationary of statistics와 locality of pixel dependencies)
- 비슷한 사이즈의 레이어를 가진 표준 feedforward 신경망과 비교하면 CNN은 이론상 최대 성능은 약간만 떨어지면서도 더 적은 연결과 파라미터를 가지며 훈련시키기 쉽다.
- 최종 네트워크는 5개의 convolutional 레이어와 3개의 fc 레이어를 가지며, 하나의 convolutional 레이어라도 제거하면 성능이 낮아지는 것을 확인했다.
2. The Dataset
- ImageNet: 22,000개의 카테고리에 대한 1500만 장이 넘는 고화질 이미지로 구성된 데이터셋
- ILSVRC는 1000개의 카테고리 별로 대략 1000장씩의 이미지로 구성된 ImageNet의 일부를 사용했고, 총 대략 120만 개의 training 이미지, 5만 개의 validation 이미지, 그리고 15만 개의 testing 이미지로 구성되어 있다.
- ImageNet에서 제공되는 이미지의 크기가 다양한 반면, 시스템은 일정한 input 차원을 요구한다.
- 그래서 먼저 이미지의 짧은 부분을 기준으로, 짧은 부분의 사이즈가 256이 되도록 rescale 해주고, 256x256에 맞게 중앙에서 크롭한다.
- 그 다음 Training set에서 각 픽셀에 전체 픽셀의 평균을 빼주는 것을 제외한 다른 전처리는 하지 않았다.
3. The Architecture
AlexNet의 네트워크 아키텍처의 새로운 또는 흔치 않은 특징을 제일 중요한 것부터 설명했다.
1) ReLU Nonlinearity
- 기존에는 활성화함수로 tanh와 sigmoid가 주로 사용되었다. 하지만 학습 속도 향상을 위해 AlexNet에서는 non-saturating nonlinearity인 ReLU 함수를 사용하였다.
f(x)=max(0,x)
- 아래 그래프는 ReLU가 tanh보다 약 6배 빠르게 수렴한 것을 보여주는 그래프이다.

- 오버피팅을 방지하기 위해 f(x)=∣tanh(x)∣와 같은 함수를 사용하는 방법이 제안되기도 했지만, 본 논문에서는 오버피팅 방지가 아닌 학습 속도 향상을 목적으로 했기에 ReLU를 사용하였다.
2) Training on Multiple GPUs
- 학습에 사용된 GTX 580 GPU는 메모리가 3GB로 너무 작기 때문에 2개의 GPU를 같이 사용했다.
- 서로 다른 GPU의 메모리에 직접 읽고 쓰기가 가능했기 때문에 cross-GPU 병렬화 사용에 잘 맞았다.
- 여기서는 커널(또는 뉴런)의 절반씩 각각 GPU가 맡게 하는 병렬화 전략을 사용했다. 그리고 특정 레이어에서만 GPU 간 상호작용을 하게 했다.
- ex. 3번째 레이어의 뉴런들은 2번째 레이어의 모든 뉴런에서 입력을 받는다.
- 연결성의 패턴을 선택하는 것은 cross-validation에 대해 문제가 될 수 있지만, 수용 가능한 만큼의 연산을 조절할 때까지 소통의 양을 정확하게 튜닝할 수 있게끔 했다.
3) Local Response Normalization
- ReLU는 포화를 막기 위해 input normalization을 요구하지 않는다는 성질이 있다.
- 아래의 local normalization scheme이 일반화를 돕는다는 것을 발견했다.
bx,yi=ax,yi/(k+αj=max(0,i−n/2)∑min(N−1,i+n/2)(ax,yj)2)β
- ax,yi: (x, y)에 위치한 뉴런에 i번째 커널을 적용하고 ReLU를 사용했을 때 나온 activation value
- n: 같은 공간적 위치의 “인접한” 커널맵
- N: 레이어 내의 전체 커널 수
- 커널맵의 순서는 훈련 시작 전에 정해준다.
- k,n,α,β : 하이퍼파라미터; k=2, n=5, α=10−4, β=0.75 사용
- 특정 레이어의 ReLU 뒤에 적용
- local contrast normalization scheme과 유사성을 띄지만, mean activity를 빼주지 않기 때문에 “brightness normalization”이라고 보면 된다.
- Response normalization은 top-1 error rate와 top-5 error rate를 각각 1.4%, 1.2% 낮춰주었다.
4) Overlapping Pooling
- 일반적으로 CNN의 pooling은 필터가 겹치지 않고 적용된다.(stride=pool size)
- stride < pool size인 경우 overlapping pooling을 얻을 수 있다.
- 하지만 AlexNet에서는 stride=2, pool size=3으로 설정하여 겹치는 뉴런을 발생시켰다.
- top-1 error rate와 top-5 error rate를 각각 0.4%, 0.3% 낮출 수 있었다.
5) Overall Architecture

- 네트워크는 컨볼루션 5개, fc 3개 총 8개의 레이어로 구성되어 있으며, fc 레이어의 마지막 부분은 softmax 함수를 사용하여 각 클래스에 대한 확률값에 해당하는 1000개의 output을 출력한다.
- 2, 4, 5번째 컨볼루션 레이어는 같은 GPU에 있는 이전 레이어의 커널 맵에만 연결된다.
- 3번째 컨볼루션 레이어는 두 번째 레이어의 모든 커널맵과 연결된다.
- fc 레이어의 뉴런은 이전 레이어의 모든 뉴런들과 연결된다.
- Response-normalization 레이어는 첫 번째와 두 번째 컨볼루션 레이어의 뒤를 따른다.
- Max-pooling 레이어는 두 response normalization 레이어의 뒤를 따르고, 다섯 번째 컨볼루션 레이어에도 있다.
- ReLU는 모든 컨볼루션, fc레이어에 적용되었다.
conv1: 224×224×3 input 이미지, 11×11×3 사이즈의 96개의 커널, stride=4, ReLU, LRN과 MaxPooling
conv2: 5×5×48 사이즈의 256개의 커널. ReLU, LRN과 MaxPooling
conv3: 3×3×256 사이즈의 384개의 커널, ReLU
conv4: 3×3×192 사이즈의 384개의 커널, ReLU
conv5: 3×3×192 사이즈의 256개의 커널, ReLU
fc: 4096개의 뉴런, ReLU
last fc: 1000개의 뉴런, Softmax
4. Reducing Overfitting
AlexNet의 6천 만개에 달하는 파라미터를 과적합을 방지하며 학습시킨 두 가지 기법을 소개한다.
1) Data Augmentation
- Data augmentation은 오버피팅을 방지하기 위한 가장 흔한 방법이다.
- GPU에서 이전 배치에 대한 학습을 진행할 때 CPU에서 다음 training set을 준비하기 위해 transform이 진행되며, 효율적이기 때문에 변형된 이미지를 따로 저장할 필요가 없다.
- 두 가지의 data augmentation을 진행한다.
-
이동과 좌우 반전
- 256x256 사이즈의 원본 이미지와 좌우 반전된 이미지로부터 랜덤한 224x224 패치를 추출
- test 시에는 224x224 패치를 총 5개(각 코너+가운데)와 이를 좌우반전하여 총 10개의 패치를 뽑아낸다.
- 각 패치들에 대해서 네트워크의 softmax 결과를 평균하여 prediction을 진행한다.
-
PCA
- RGB 픽셀에 PCA를 적용하여 해당 eigenvalue에 평균=0, 표준편차=0.1을 갖는 가우시안 분포에서 추출한 랜덤 변수를 곱한 뒤 기존 픽셀에 더해준다.
[p1,p2,p3][α1λ1,α2λ2,α3λ3]T
- Pi,λi : RGB 픽셀 값의 3x3 공분산 행렬의 i번째 eigenvector와 eigenvalue
- 각 αi는 랜덤 변수로, 특정 training 이미지의 모든 픽셀에 대해 해당 이미지가 다시 훈련에 사용될 때까지 한 번만 뽑으며, 그 시점에서 다시 뽑힘
- 이 방식은 top-1 error rate를 1% 넘게 감소시켰다.
2) Dropout
- 여러 모델들의 예측값을 결합하는 방식이 test error를 줄이는 데 매우 성공적인 방법이지만, 큰 신경망은 훈련 시간이 오래 걸리기 때문에 사용하기 어려웠다.
- 당시 최신 테크닉이었던 dropout을 적용했는데, 이는 각 뉴런들의 출력 결과를 0.5의 확률로 0으로 만드는 방법이다.
- 이렇게 하면 0이된 뉴런은 순전파, 역전파에서 전혀 기여하지 않는다.
- dropout을 사용하면 뉴런 간의 상호의존성을 줄여주므로 모델이 더 강건해진다.
- test 시에는 모든 뉴런을 사용하지만 각각 0.5씩 곱해준다.
- AlexNet에서는 첫 두 fc 레이어에 dropout을 적용하였다.
- dropout이 없을 때는 overfitting에 시달렸다. 그러나 dropout적용 이후 수렴까지 필요한 iteration 수가 2배정도 증가했다.
5. Details of Learning
- SGD (momentum=0.9, weight_decay=0.0005)
- batch_size=128
- 작은 양의 weight decay가 모델 학습에 중요한 역할을 했으며, 아래 공식에 따라 가중치 업데이트를 진행한다.
vi+1:=0.9⋅vi−0.0005⋅ϵ⋅wi−ϵ⋅⟨∂w∂L∣wi⟩Diwi+1:=wi+vi+1
- i: iteration, v: momentum, ϵ: learning rate
- ∂w∂L : i번째 배치에서 wi를 사용하여 구한 gradient들의 평균
- 초기화 방법으로는 mean=0, std=0.01의 Gaussian 분포를 각 레이어에 적용했으며, 2, 4, 5번째 컨볼루션 레이어와 앞의 두 fc 레이어에는 neuron bias=1로 설정했다.
- bias를 1로 주면 ReLU에 positive input을 주는 효과가 있기 때문에 초기 학습을 더 가속화 시키는 효과가 있다.
- 나머지 레이어들은 bias=0으로 설정했다.
- learning rate는 0.01에서 시작하여 validation error가 감소하지 않는 시점에서 1/10만큼 감소시킨다. 학습이 끝날 시점의 learning rate는 0.00001이었다.
- 훈련은 총 90 epoch 진행했다.
6. Results
Experiment Results

- ILSVRC-2010 테스트셋에 대한 결과를 비교한 것이다. AlexNet의 결과가 훨씬 좋은 것을 확인할 수 있다.
- Sparse coding은 6개의 sparse-coding model로부터 나온 예측 결과를 평균낸 방식이며, SIFT+FVs는 Fisher Vectors로부터 훈련된 두 개의 classifier로 예측한 것을 평균내는 방식이다.

- ILSRVC-2012 대회때 AlexNet을 다양하게 적용한 결과이다. 1CNN은 CNN을 한 개 썼을 때, 5 CNNs는 CNN 모델을 다섯 개 썼을 때를 의미한다.
- 1CNN은 하나의 CNN 모델에 추가로 6개의 컨볼루션 레이어를 붙인 모델이며, 7CNNs는 1CNN* 모델을 7개 돌려서 예측값을 평균낸 것이다.
Qualitative Evaluations

- 첫 번째 레이어에서 나온 feature map으로 위 세 줄은 GPU 1에서, 나머지는 GPU 2에서 나온 결과이다. 첫 번째 GPU에서는 컬러가 거의 인코딩 되어있지 않지만, 두 번째 GPU에서는 컬러가 인코딩 되어있는 것을 확인할 수 있다.

- 왼쪽에 8개의 테스트 이미지에 대해 모델이 예측한 top 5 prediction의 그래프가 주어진다. 빨간 막대가 정답에 해당한다.
- 물체가 꼭 중앙에 있지 않아도(=위치에 관계 없이) 분류를 잘 하는 것을 알 수 있다.
- 또한 잘못 분류한 grille과 cherry는 사람이 보기에도 애매한 부분이 있다.
- 오른쪽은 모델의 visual knowledge를 관찰하기 위해 마지막 FC 레이어들의 4096 차원 레이어의 feature activation을 살펴보았다.
- 맨 왼쪽 사진은 test set에서 뽑은 이미지들이고, 나머지는 train set에서 뽑은 이미지들로, test set을 모델에 넣고, 4096 차원 레이어의 feature activation을 기준으로 가장 유사한 것들을 뽑았다.
- 픽셀 단위로는 test set과 train set이 완전 다르지만, 같은 라벨로 분류하는 것을 확인할 수 있다. 즉, 모델이 픽셀 단위가 아닌 더 고차원적인 근거로 분류를 진행한다는 것을 알 수 있다.
7. Discussion
- CNN이 방대한 데이터셋을 분류할 때 지도학습만으로도 뛰어난 성과를 보였으며, 컨볼루션 레이어 중 하나라도 제외하면 성능이 크게 떨어지는 것을 보아 모델의 깊이가 중요하다고 강조한다.
- 또한 학습 이전에 비지도 사전학습을 진행했다면 성능이 더 좋았을 것이라고 말한다. 또한 충분한 컴퓨팅 파워가 있다면 네트워크의 깊이를 더 늘림으로써 성능 향상을 시킬 수 있을 것이라고 한다.
- 궁극적으로 더 크고 깊은 네트워크를 개발하여 이를 비디오 시퀀스에 사용해서 정적인 이미지에서는 볼 수 없는 다양한 요소들을 분류에 사용할 수 있기를 기대한다.