AlexNet 논문리뷰
첫 논문리뷰는 바로 AlexNet 논문이다 [1].
(A. Krizhevsky, I. Sutskever, and G. Hinton, "Imagenet classification with deep convolutional neural networks," in Advances in Neural Information Processing Systems (NIPS), vol. 25, 2012.)
논문 제목은 Imagenet classification with deep convolutional neural networks이다.
~ 목차 ~
0. Abstract
1. Introduction
2. 데이터
2.1 구성
2.2 전처리방법
3. 모델 구조
3.1 ReLU
3.2 멀티 GPU 사용
3.3 Local Response Normalization
3.4 Overlapping Pooling
4. 오버피팅 줄이는 방법
4.1 데이터 증강
4.2 드롭아웃
5. Details of learning
6. Results
6.1 Qualitative Evaluations
7. Discussion
0. Abstract

- ILSVRC-2010의 고해상도 이미지 120만개를 1000개의 클래스로 분류하기 위해서 크고 깊은 CNN을 학습시켰다.
→ 그 결과 top-1 37.5%, top-5 17.0%라는 성능을 냈다. (이전의 sota보다 훨씬 높은 기록임)
- 이 네트워크는 conv layer 5개와 fc layer 3개로 이루어졌고, 마지막에 1000개의 softmax를 통과한다.
(+ conv layer중 몇 개에는 뒤에 max-pooling이 붙어있음)
- 빠른 학습을 위해서 불포화뉴런과 GPU를 사용했다.
↳ 입력값에 따라서 출력값이 계속 변할 수 있음 (e.g. ReLU)
cf. 포화뉴런: 입력값에 따라서 출력값이 크게 변하지 않음 (e.g. sigmoid, tanh)
- 오버피팅을 줄이기 위해서 dropout을 사용했다. (당시에는 신기술이었다고 함)
- 이 모델을 조금씩 바꿔서 ILSVRC-2012에 냈더니 1등을 했다.(top-5 15.3%) (당시에 2등이 26.2%였음)
1. Introduction

- 현재 Object recognition task에서는 ML의 방법론이 사용되고 있다.
- 성능을 향상시키기 위해서는 더 큰 데이터셋을 사용하거나, 더 큰 모델을 사용하거나, 오버피팅을 줄일 수 있다.
- 최근까지는 이미지 데이터셋의 규모가 잘해봤자 몇만장 정도로, 상대적으로 작았다.
- MNIST 같은 간단한 task에서는 데이터가 적어도 되지만, 현실의 복잡한 task에서는 데이터가 훨씬 많이 필요하다.
- 최근에서야 LabelMe, ImageNet과 같은 100만장 단위의 대용량 이미지 데이터셋이나왔다.
- 몇백만장의 이미지에서 몇천개의 물체를 인식하려면, 좋은 학습능력을 가진 모델이 필요하다. 그리고 현실에서 object recognition을 수행하려면 ImageNet에는 없는 데이터에 대한 사전학습도 추가로 필요하다.
- CNN은 이에 적합한 모델이다. 모델의 깊이와 너비를 조절할 수 있고, 이미지의 특성에 대해 잘 파악하고 있다.
통계적 특징(e.g. 이미지 가장자리 경계선)의 불변성. 픽셀들간의 국소적 의존성(e.g. 눈 주위의 픽셀들이 서로 밀접한 관련이 있을 것이라고 추측)
- 그래서 CNN은 적은 연결과 파라미터를 가지고 있어서 학습시키기 쉽고, 성능도 조금밖에 차이가 나지 않는다.
2. 데이터

2.1 구성
- ILSVRC-2010에서 사용된 ImageNet 데이터셋을 사용했다.
- 클래스 1개당 이미지 약 1,000장, 총 1000개 클래스 로 이루어져 있다.
- train 데이터는 약 120만장, valid 데이터는 약 5만장, test 데이터는 약 15만장이다.
2.2 전처리 방법
① 이미지 크기 256x256으로 통일
- 이유: 입력으로 일정한 크기의 이미지를 넣어야 하기 때문이다.
- 방법: 짧은 변의 길이가 256이 되게끔 크기조정 한 다음, 256x256 크기로 중앙 부분을 잘랐다.
② 픽셀값 평균을 0으로 설정
- 이유: 가중치 업데이트를 안정화시키기 위해서이다. (e.g. 입력값이 주로 양수면 가중치 폭발 가능성↑)
- 방법: 각 픽셀에서 전체 픽셀의 평균값을 빼줬다.
3. 모델 구조
- 전체적인 구조는 아래 그림과 같다.


- 총 8개의 레이어로 구성되어 있다. (conv layer 5개, fc layer 3개)
- 마지막 fc layer의 출력은 1,000개의 softmax를 통과하면서 이미지를 1,000가지 중 하나로 분류하게 된다.
- 위치
- ReLU: 모든 conv layer, 모든 fc layer
- GPU소통: 3번째 conv layer
- LRN: 1,2번째 conv layer
- Max-polling: 1,2,5번째 conv layer
- 각 레이어의 필터 크기, 입력 채널, 필터 수, 파라미터 수는 아래의 표로 정리했다.

- 아래에서는 모델에 사용된 새로운 요소들을 중요도 순서대로 설명하고 있다.
3.1 ReLU

- ReLU는 단순하게 생겼기 때문에 비교적 계산속도가 빠르다. (f(x)=max(0,x))
- tanh보다 6배 빠르게 25% 에러에 도달한다.
- 큰 모델에 대용량 데이터로 학습시킬 때 엄청나게 중요한 역할을 한다.
3.2 멀티 GPU 사용

- 학습시킬 때 GTX580 2대를 사용했다.
- CPU를 거치지 않고 GPU끼리 직접 상호작용 할 수 있다.
+ 특정 레이어(AlexNet에서는 3번째 레이어)에서만 상호작용한다.

3.3 Local Response Normalization

- ReLU는 non-saturating한 함수이기 때문에 정규화가 필수는 아니지만,
LRN을 적용했더니 일반화에 도움이 되긴 했다.
- LRN은 특정 뉴런이 강하게 활성화될 때 양옆에 있는 뉴런들이 이를 억제하는 방식으로 작동한다.
↳양옆에 있는 총 n개의 뉴런들의 활성화 제곱값(ajx,y2)이 뉴런을 정규화함
3.4 Overlapping Pooling

- 원래는 풀링을 겹치지 않도록 하는데, 여기서는 살짝 겹치도록 풀링을 했다.
- 조금이나마 오버피팅을 방지할 수 있다.
4. 오버피팅 줄이는 방법
- 1,000개의 클래스가 10bit만큼의 정보를 제공하지만(∵210=1024), 이는 6000만개의 파라미터를
오버피팅없이 학습하기에는 터무니없이 부족한 양이다. 그래서 오버피팅을 줄이기 위한 2가지 방법을 사용했다.
4.1 데이터 증강

- 가장 빠르게 오버피팅을 줄이는 법은 인위적으로 데이터를 증강하는것이다. 여기서는 2가지 방법을 사용했다.
① 이미지 부분크롭 + 좌우반전
- 본문에서는 256x256 이미지에서 224x224크기로 크롭을 해서 2048배를 증강한다고 한다.
- Q1: 계산해보니 이러면 {(256 - 224 + 1)^2} * 2 = 2,178배로 증강이 되는걸?!
- 2048배 증강되려면 225x225크기로 크롭해야 될 듯 한데 뭐지.. (일단 넘어가자)
- 그리고 test에서는 총 10개(∵2*(꼭짓점4+중앙1))의 패치를 만들어서 이들의 예측을 평균낸다.
② RGB강도 바꾸기
- 방법: PCA 적용
↳RGB값의 주성분(principal component)를 찾아서 이미지 생상을 더 자연스럽고 의미있게 바꾸는 방법
- 효과: 현실에서 같은 물체라도 조건(e.g. 조명, 환경, 시간대)에 따라서 다르게 보이는 색을 반영할 수 있다.
** 학습할 때마다 매번 다른 색상변화가 적용됨 (∵다양한 색상변화에 대응하기 위해)
- 둘 다 로컬에 저장하지 않고 바로 사용할 수 있어서 computationally free하다!
* 방법: 데이터셋 불러와서 DataLoader에 올린 뒤 train함수 안에 for문으로 증강하고 학습 한꺼번에 넣어주면 됨
4.2 드롭아웃

- Combining the predictions은 훈련시킨 모델들의 결과값들을 합치기 때문에 모델 수만큼의 자원이 들어가는데,
Dropout을 쓰면 기존 자원의 2배만 사용해도 된다.
- 효과: 더 강력한 패턴들을 학습할 수 있다 (∵뉴런 의존성↓)
- 여기서는 dropout 비율을 0.5로 설정했다.
* 학습할 iteration이 2배가 된 건 dropout 비율이 0.5인 것과는 관련이 없음!! 그냥 실험적으로 나온 결과임.
(e.g. 비율이 0.8이라고 해서 iteration이 5배가 되지는 않음)
5. Details of learning

- Train할 때 이미지 120만개를 GTX580 3GB 2대로 90epoch를 돌렸다.
- 나머지 하이퍼파라미터는 다음과 같다.
- Batch size 128, Momentum 0.9, Weight decay 0.0005
- Weight: 평균 0, 표준편차 0.01인 Gaussian분포
- Bias 초기화: 2,4,5 conv layer는 1로, 나머지는 0으로 초기화
- Lr: 0.01부터 10씩 세번 나눠줌
+ bias를 특정 층만 1로 초기화한 이유: 실험적인 결정임
- 0보다 1일 때 활성화가 더 잘 되기 때문에 초기 학습이 가속화 될 수 있음
6. Results

- ILSVRC-2010에서 top-1 37.5%, top-5 17.0% 을 기록했다.
- ILSVRC-2012에서 5CNNs로 top-5 16.4%, 7CNNs*로 top-5 15.3% 을 기록했다.
- Fall 2009 ImageNet 10,184개 클래스 분류에서 1CNN*으로 top-1 67.4%, top-5 40.9% 을 기록했다.
6.1 Qualitative Evaluations

- Fig. 3(Section 5 참고)을 보면 모델이 frequency-selective한 요소와 orientation-selective한 요소,
그리고 colored-blobs를 잘 학습한 것을 알 수 있다.
- Frequency-selective: 이미지에서 다양한 주파수(=픽셀 강도변화의 빈도) 대역의 정보를 추출
↳고주파: 날카로운 경계, 세부정보 / 저주파: 전체적인 형태, 큰 구조
- Orientation-selective: 이미지에서 특정 방향으로 정렬된 패턴(e.g. 엣지, 선) 감지
- Colored-blobs: 이미지 안의 단순한 색상덩어리나 특정 색상패턴
- Fig. 3을 보면 GPU1은 색상과 무관하고, GPU2는 색상에 예민하다는 것을 알 수 있다.
- Fig. 4의 왼쪽 그림은 ILSVRC-2010으로 한 top-5 예측이다.
- Mite 처럼 일부가 잘린 이미지도 잘 예측하고 있다. 그리고 예측된 라벨들을 보면 일리있는 라벨들이 많다.
- Fig. 4의 오른쪽 그림의 1번째 열은 test image이고, 나머지는 이와 비슷한 Euclidean distance를 가지고 있는 train 이미지다.
- L2 norm 값이 비슷하지 않아도, 즉 형태 자체가 비슷하지 않아도 물체의 일반적인 특성을 추출해서 예측을 하고 있음을 알 수 있다.
- Euclidean distance를 계산할 때 계산 효율성을 위해 auto-encoder를 사용해서 벡터들을 짧은 binary code들로 만들 수 있다.
7. Discussion

- 어려운 이미지 데이터셋을 분류할 때 깊고 큰 CNN을 사용하는 것이 효과적이다. 특히 모델의 깊이가 중요함을 강조하고 있다.
- 목적에 맞지 않아서 해보지는 않았지만 unsupervised pre-training을 사용하면 성능이 더 좋아질 것이라고 한다.
아직 인간의 뇌가 이미지를 처리하는 방식에 가까워지려면 한참 멀었다고 하면서, 추후에 비디오 처리에도 AlexNet을 사용해보고 싶다는 말로 논문이 마무리 된다.
참고문헌
[1] A. Krizhevsky, I. Sutskever, and G. Hinton, "Imagenet classification with deep convolutional neural networks," in Advances in Neural Information Processing Systems (NIPS), vol. 25, 2012.
'Paper Review > CNN' 카테고리의 다른 글
[논문리뷰] Deep Residual Learning for Image Recognition (ResNet) (1) | 2024.11.15 |
---|---|
[논문리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition (VGGNet) (1) | 2024.11.13 |