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만 개의 고해상도 이미지를 어떤 기술로 처리를 하였는지, 오버피팅 방지를 위해 어떻게 해결하였는지, 어떤 활성화 함수를 사용하였는지 등 확인해보기를 권장한다.
본 논문의 기여는 다음 다섯 가지로 요약된다.
- ILSVRC-2010 및 ILSVRC-2012 대회에서 사용된 ImageNet의 하위 집합에서 지금까지 가장 높은 점수를 기록했다.
- 2D 합성곱에 최적화된 GPU를 사용하여 Convolutional 신경망 훈련을 공개적으로 제공한다.
- 이 네트워크에는 성능을 개선하고 훈련시간을 줄일 수 있는 새로운 기능이 많이 포함되었다.
- 과적합 방지를 위한 다양한 기술들을 사용하였다.
- 5개의 Convolutional Layers와 3개의 Fully-connected Layers로 구성되었으며, 이 깊이가 매우 중요하다.
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개
*224x224는 오타입니다.
AlexNet 구조를 정리해보면 다음과 같다.
-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 연산을 할 때 겹치는 부분이 발생한다.
-Filter 수: 256개 -Filter size: (48x5x5)
-stride: 1 -padding: 2
-Pooling size: 3x3 -stride:2
-activation: ReLU + MaxPooling + LRN
-Filter 수: 384개 -Filter size: (128x3x3)
-stride: 1 -padding: 1
-activation: ReLU + Addictional trick
Addictional trick
: 유일하게 이전 layer에서 모든 커널 맵들과 연결된다.
즉, '이전에는 따로따로 들어왔더라면, 이제부터는 합쳐서 같이 보내겠다'는 의미이다.
예를 들어, layer3의 입력은 모든 커널의 layer2에서 받지만, layer4이 입력은 같은 GPU에 있는 layer3에서만 입력을 받는다. 이러한 방법은 교차검증에서 문제가 되지만 방대한 양의 계산이 가능하게 된다.
-Filter 수: 256개 -Filter size: (192x3x3)
-stride: 1 -padding: 1
-Pooling size: 3x3 -stride:2
-activation: ReLU + MaxPooling
-Flatten: 9,216
-activation: ReLU
128x6x6 = 4,608
병렬구조이기 때문에 4,608x2 = 9,216이 된다. 9,216으로 Flatten 이후 3개의 Fully Connected 거친 후 Softmax 함수를 활용하여 출력에 적용한다.
- N: 레이어에 존재하는 전체 커널의 수
- n: 인접하다고 판단할 범위 값(하이퍼파라미터)
- aix,y: (x,y)에 존재하는 픽셀에 대해 i번째 커널을 적용하여 얻은 결과에 ReLU를 씌운 값
- 신경생물학에서 원리를 가져온 것으로, '측면억제'현상이 발생한다.
구체적인 예시로 아래 그림에 검은 부분을 집중해서 보이면 회색의 점이 보일 것이다.
이는 강한 자극인 검정색이 약한 자극인 흰색의 인식을 막아 발생하는 '측면억제'현상이 발생한다.
1) Data Augmentation
2) Dropout
- 첫 번째 변형 방법은 '좌우반전'이다.
이미지(256 x 256)를 좌우반전 시켜도 이미지의 라벨은 변하지 않고, 그 이미지를 랜덤으로 잘라서 이미지(227 x 227)를 입력으로 사용하였다.
- 두 번째 변형 방법은 'RGB 채널의 색상강도를 조절'하는 것이다.
-학습 세트 전체에서 RGB 픽셀 값 세트에 대해 주성분분석(PCA)를 수행한다. 해당 고유값에 비례하는 크기와 평균0, 표준편차 1을 갖는 가우시안에서 추출한 무작위 변수를 곱한 후 원래의 픽셀 값에 곱해주어 색상의 변형을 주는 방법이다. 원래의 라벨을 해치지 않으면서 색상의 변형을 일으키는 것이 가능하다.
*dropout 그림(출처: Srivastava, Nitish, et al. ”Dropout: a simple way to prevent neural networks from overfitting”, JMLR 2014)
-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
- 위의 결과는 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 하는 방식
- (왼쪽) 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이 전혀 다르지만 같은 부류라고 판단하는 것을 확인할 수 있다.
본 논문을 통해 주목할만한 점은 다음 다섯 가지로 요약된다.
- Single convolutional layer가 제거되면 네트워크의 성능이 저하된다.
ex) 중간 계층을 제거하면 네트워크의 상위 1위 성능에 대해 약 2%의 손실이 발생- 모델의 깊이는 매우 매우 중요하다.
- 학습 이전에 비지도학습으로 미리 학습 했더라면, 성능을 높이는 데 도움이 됐을 것이다.
- 컴퓨터의 성능이 좋아진다면, 성능을 높이는 데 도움이 됐을 것이다.
- 정적인 이미지에서는 볼 수 없고, 다양한 요소들을 분류할 수 있는 Convolutional Layer를 사용하고자 한다.
첫 논문 리뷰여서 그런지 생각보다 시간이 꽤 걸렸다. 그럼에도 불구하고 CNN에 대해서 공부하는 것은 너무 재밌었다. 머신러닝 기말고사 컴피티션에서 MLP 모델 성능을 높이기 위해 하이퍼파라미터 튜닝과 아키텍처 구성을 했던 경험이 있어서 아주 흥미롭게 읽었던 것 같다.
과적합 방지를 위해 지금도 자주 쓰이는 'Dropout'과 'Augmentation' 개념이 이때부터 나왔다는 사실을 알게 되었고, ReLU 함수도 이 논문을 기점으로 많이 사용한다는 사실도 알게 되었다. 그리고 LRN으로 정규화를 수행하는 것에 대해 인상 깊었다. 특히 '측면억제'현상과 같이 인접한 픽셀에 영향을 줄 수 있기 때문에 나온 아이디어라는 것이 인상 깊었다. 지금으로부터 11년전 발표한 논문임에도 뛰어난 성능을 보인다는 것이 놀라웠고, 딥러닝의 발전속도가 빨라지고 있어서 한편으로는 무서웠다.
궁금한 점은 1,5 Layer 이외에 다른 Layer를 추가하였을 때는 어떤 결과가 나올 것이고, "더 적은 레이어로는 유사한 성능을 낼 수 없을까?"라는 의문점이 있다.
끝으로, 모델의 깊이가 매우 중요하고 이것이 성능에 많은 영향을 준 다는 것을 알 수 있었고, 이 논문 이후에 모델의 깊이에 대해서 다루는 VGG모델을 공부할 것이다.