ML/CV

[논문리뷰]AlexNet- Imagenet classification with deep convolutional neural networks.

then-go 2023. 8. 2. 23:21


Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems. 2012.

CNN이 발전해 온 과정중 그 첫번쨰, AlexNet에 대한 논문이다.

1. Introduction

먼저, 기존의 문제점에 대한 지적을 하고 있다.

“Simple한 Object에 대한 recognition은 작은 size의 dataset으로도 잘 이루어진다.(특히 label-preserving transformation와 함께 이루어진경우).
하지만, 현실의 Object들은 상당한 변동성을 가지고 있기 때문에, 더 큰 size의 dataset에 대해서 학습할 필요가 있다.

논문 원문 Untitled.png
label-preserving transformation이란? Untitled.png

이러한 문제점을 해결하기 위해 새로운 모델이 제시되었고 그 새로운 모델에 대한 설명을 하고 있다.

“CNN은 (16,11,13,18,15,22,26)과 같은 모델들로 구성되어 있다.
기존의 standard feedforward neural network(기존 DNN방식의 fully connection) 와 비교하여 보았을때, CNN은 훨씬 더 적은 connection과 parameter를 가지고 있어 train 시키기 편했음에도 성능은 거의 차이가 나지 않았다.(CNN이 sparse connection구조를 가짐)”

논문원문 Untitled.png

“또한, large scale에 대해서 계산하기는 expensive했으나, GPU을 사용해서 large CNN을 학습시킬 수 있었고, ImageNet과 같은 큰 labeled exmples는 심각한 overfitting을 감소시키기에 충분한 양이 있었다.

논문원문 Untitled.png

그리고 논문에서 제시할 5가지 정도의 방향성에 대해서 언급하고 있다.

  1. 엄청 큰 모델인 CNN(AlexNet)을 학습시켰다.
  2. 2D convolution 연산(filter)시 GPU사용
  3. performance을 증가시키고 training time을 감소시킬 새로운 기술들 사용 →section3에서 언급
  4. overfitting을 방지할 기술들을 사용 → section4에서 언급
  5. AlexNet은 5개의 convolution layer와 3개의 fully-connected layer로 이루어져 있다.
논문원문 Untitled.png

추가적으로 GPU에 대한 언급

  1. CNN의 크기가 제한(CNN의 layer는 총 8)된 것은 현재의 GPU 성능때문(GTX 580 3GB GPU)
  2. 더 빠른 GPU와 많은 데이터 셋을 사용한다면 성능향상 가능.
논문 원문 Untitled.png

2. The dataset

ImageNet에서 제공해주는 data는 22,000개의 범주(categories)를 가지는 15million개의 이미지들.

ILSVRC 1,000개의 범주에 대해 사용하기 때문에 1,000개의 범주에 대해서 학습시킴.

데이터 전처리는 다음과 같은 방법으로 진행함.

  1. 데이터는 다양한 resolution(해상도=이미지의 넓이x높이)를 가지고 있으나 model은 고정된 dimension을 원한다. 따라서, 256x256크기의 사진으로 down-sample해야함. 직사각형의 경우 길이가 짧은 쪽으로 256으로 고정시키고, 중앙부분을 256x256크기로 crop하였음.
  2. 이미지 data들을 normalization하는 방법으로 다음과 같은 방법 사용 normalized 학습 이미지 = (학습이미지 픽셀) - (전체 학습이미지 픽셀 평균)

3. The Architecture

8개의 learned layer과 5개의 convolutional , 그리고 3개의 fully connected layer로 이루어져 있음.

Untitled.png

이 구조에서 가장 중요한 순서대로 설명하겠음.

3-1 ReLU Nonlinearity

RELU는 activation function의 한 종류로, 원래는 tanh 혹은 f(x) = (1 + e^−x)^−1 같은 식을 사용했었음.(sigmoid function)

Activation function을 사용하는 이유

원래 뉴런은 여러 경로를 통해 들어온 전기 신호의 합이 일정치 이상이 되면 다음 뉴런으로 신호를 전달하게 됨. 앞서 급한 “일정치 이상이 되는 기준”이 activation function이 되는 것임. 일정값 이상이 되면 1을 출력하여 다음 뉴런에 값을 전해주고, 일정 값 이하가 되면 0을 출력하여 값 전달을 안함.

일단은 linear한 값을 non-linear한 값으로 변경해 준다는 것에서 의미가 있음. 자세한 설명은 아래에서.

bookmark

bookmark

sigmoid function은 치명적인 문제점을 가지고 있었는데 이는 backpropagation때 발생함. sigmoid function의 함수는 아래와 같음.

Untitled.png

보다 싶이, 미분값이 0과 멀어질 수록 0에 수렴한다는 것이 문제임. 이렇게 되면 backpropagation으로 학습할 때 미분값인 0에 가까운 값으로 곱해져 버려 가중치 업데이트를 못하는 상황이 발생함 (이를 Vanishing gradient 문제라고 부름)

이를 해결하기 위해 나온것이 ReLU임.

Untitled.pngUntitled.png

이러한 ReLU를 이용하면 기존의 tanh를 사용했을 때 보다 훨씬 더 학습시간과 에러를 낮출 수 있음.

Untitled.png

3-2 Training on Multiple GPUs

논문 원문 Untitled.png

본 논문은 GPU를 두개로 나누어 사용하고 있음(그 이유에 대해서는 언급x)

두개의 GPU는 전체 conv kernel들을 반으로 나누어서 계산함.(그래서 아래 그림이 두 줄인 것.) 예를들어 90개의 kernel이 있다고 하면 GPU_A가 45개를 맡고, 나머지 GPU가 나머지 45개를 계산하는 식으로 병렬적으로 계산함. 특이한점은 2번째 conv layer에서 3번째 conv layer에서 서로 뒤섞여서(GPUs communicate only in certain layers)계산하게 함. (나머지 부분은 똑같이 나눠서 계산함… 이부분은 왜 이랬는지 모르겠음)

Untitled.png

이렇게 한 경우 한개의 GPU로 학습시켰을 때 보다 대략 1.5%정도 error를 줄일 수 있었음. 또한 경미하게 시간도 감소되었음.

3-3 Local Response Normalization

논문원문 Untitled.png

ReLU는 앞서 언급한 대로 activation function의 saturation(=gradient vanish)를 막기 위해 고안되었음.

하지만, local normalization scheme을 사용한다면 generalization을 도울 수 있음.

Untitled.png

식은 아래와 같이 정리될 수 있음

Untitled.png

식에서 a는 이미지상의 특정 x,y위치에 있는 i번째 conv filter가 적용된 결과값을 의미함.

만약 n=5, i=5라고 설정한 경우, 5번째 conv filter의 결과값(i=5이므로)을 3,4,5,6,7번째(n=5이므로) conv filter의 결과값을 이용해 정규화 하겠다는 것.

이것은 ‘진짜 자연세계의 뉴런’에서 볼 수 있는 생물학적 현상인 lateral inhibition의 개념에서 가져온 것인데, lateral inhibition은 강한 자극이 주변의 약한 자극을 전달하는 것을 막는 효과이다.

lateral inhibition처럼, 5번 confilter의 결과값이 3,4,6,7번째 conv filter값 보다 엄청나게 높다면 3,4,5,7번째 confilter의 정규화 값은 매우 작아질 것이다. 따라서 이를 통해 강한 자극(5번)이 주변의 약한자극(3,4,6,7번 뉴런)의 세기를 죽이는 결과를 얻게 됨.

그 외의 hyperparameter들은 validation dataset들은 validation set을 통해 경험적으로 얻었음.

이를 통해 1.2%정도 오류를 낮출 수 있었음.

3-4 Overlapping Pooling

논문원문 Untitled.png

기존의 방법은 근접한 pooling unit들을 overlap시키지 않았으나, 여기서는 overlap하여 사용함.

error가 0.4%정도 줄어들었으며, 미약하지만 overfit이 더 되지않는 모습을 보임.

Untitled.png

3-5 Overall Architecture

Untitled.png

4. Reducing Overfitting

overfitting을 피하기 위해 두 가지의 방법을 사용하였음. 1)Data Augmentation 2)Dropout

4-1 Data Augmentation

data augmentation은 간단한 작업이기 때문에 GPU가 training을 하는 도중에도 CPU를 통해 진행할 수 있어 computationally free함.

4-1-1 translation and horizontal reflection

논문원문 Untitled.png

horizontal reflection은 horizontal한 위치에서 random하게 crop하여 256x256크기의 이미지를 244x244크기의 이미지로 만드는것.

이걸 하지 않으면 overfitting때문에 훨씬 더 작은 network를 사용해야 함.

Untitled.png

4-1-2 PCA on RGB pixel values

주성분 분석, 영어로는 PCA(Principal Component Analysis)이다. 자세한 내용은 여기를 통해.

무튼 이미지의 covariance matrix를 통해 eigenvector와 eigenvalue를 구하면 다음과 같다. 아래는 적용예시.

Untitled.png

4-2 Drop out

layer에서 0부터 1사이의 확률로 뉴런을 제거하는 방법.

Untitled.png

이 논문에서 dropout은 0.5 rate로 진행. dropout을 통해 overfitting을 피하고, converge하기까지의 iteration을 두배정도 늘릴 수 있었다.

dropout이 적용된 부분은 첫번째 두개의 fully-connected layer임.

Untitled.png

5 Details of learning

정리된 그림으로 요약

Untitled.png

참고 블로그

https://89douner.tistory.com/60