ImageNet Classification with Deep Convolutional Neural Networks (AlexNet) - 2012

2021. 10. 4. 17:53Artificial Intelligence

 

AlexNet Architecture

 

 

Abstract

AlexNet은 ImageNet LSVRC-2010 Contest (ILSVRC)에서 120만개의 고화질 이미지를 1000개로 분류했고, top1, top5 error rates에서의 상당한 개선을 이루어냈다. AlexNet은 6천만개의 파라미터, 65만개의 뉴런으로 구성되어 있으며 5개의 Conv Layer (그중 몇개의 레이어는 max-pooling Layer를 포함한다), 3개의 FC레이어, 그리고 1000-way Softmax를 통해 분류를 수행하도록 구성되어 있다. (위의 이미지 참고)

 

FC레이어에서의 Overfitting에 따른 에러를 최소화하기 위해 "Dropout"을 사용하였으며 트레이닝 시간을 단축시키기 위해 "non-saturating neuron"(activation function에서의 기울기가 0이 되지 않는) 을 사용하였다. (2012년에 Publish된 논문이라 9년도 더 된 논문이므로 주요 Feature들을 짚고 넘어가는 방식으로 리뷰하려고 한다.)

 

 

The Architecture

ReLU Nonlinearlity

AlexNet은 뉴런의 output을 다음 레이어로 넘기는 활성화 함수(Activation Function)로 ReLU를 적용하였다. 기존(그 당시)에 사용되던 Activation Function은 주로 Sigmoid, tanh등이 있는데, 아래의 그래프에서 볼 수 있듯, 이 두 함수는 뉴런의 output 값이 어느 정도 범위를 넘어가면 gradient(함수의 미분값)가 0에 수렴한다는 문제가 있다. 이 경우 BackPropagation을 통해 Feedback Mechanism을 수행할 때 Propagation이 제대로 되지 않게 된다. 또한 함수가 비교적 복잡해 연산에 많은 리소스가 소모된다는 점이 있다.

 

 

 

ReLU함수는 Sigmoid, tanh보다 학습이 빠르고, 연산 비용이 적고, 구현이 매우 간단하다. 또한 뉴런의 output이 특정 값을 넘어가도 gradient가 소실되는 gradient vanishing problem이 발생하지 않으므로 Backpropagation도 비교적 효율적으로 수행된다고 한다.

 

ReLU Function

 

 

실제로 CIFAR-10 데이터셋을 가지고 tanh(점선) ReLU(실선)두 Activation Function으로 훈련을 한 결과 동일한 Error Rate에 도달하는데 6배 이상 빨랐다고 한다.

 

 

Traning on Multiple GPUs

AlexNet은 network를 2개의 GPU로 나눠서 학습시켰다. 즉 GPU를 병렬처리하도록 하여 연산효율성을 높인 것이다. 예를 들어 96개의 kernel이 있으면 48개를 GPU1에 할당하고 48개를 GPU2에 할당하는 식이다. 이렇게 데이터를 두 개의 GPU로 나누어 학습시키다가 하나의 Layer에서(위 논문에서는 ConvLayer 3)만 GPU를 통합시킨다. (GPU1에서는 색상과 관련 없는 정보, GPU2에서는 색상과 관련있는 정보 나누어서 학습)

 

 

Local Response Normalization(LRN)

실제 뇌 세포의 증상 중 Lateral Inhibition이라는 증상이 있다. 강한 뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상으로, 아래 그림에서 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분에 회색이 조금 보이게 되는 현상이 바로 여기에 기인한다.

 

 

NeuralNetwork의 Featur에서 특정 한 뉴런이 유별나게 강한 값을 가지게 된다면 근처의 값이 약하더라도 Conv연산 결과가 강한 Feature를 나타내게 된다. (여기다가 max-pooling을 사용하면 더 그럴수도 있을 것 같다) 이런 경우 OverFitting의 원인이 되며 AlexNet은 이를 LRN(Local Response Normalization)이라는 기법을 통해 해결하려 했다.(현대의 CNN은 Batch Normalization이라는 방법을 통해 이를 해결한다.)

 

 

 

LRN은 다음과 같은 식으로 작동하며, 어떠한 filter가 있을 때, 그 주위, 혹은 같은 위치에 다른 channel의 filter들을 square-sum해서 한 filter에서만 과도하게 activate하는 것을 막아준다.

 

 

Overlapping Pooling

CNN에서 Pooling의 역할은 Convolution을 통해 얻은 Feature Map의 크기를 줄이기 위함이다. AlexNet에서는 Max Pooling을 사용하였다. Pooling기법중 OverLapping Pooling이라는 기법이 있는데, Stride를 적절하게 설정함으로써 아래 그림과 같이 풀링 커널을 중첩시키면서 진행하는 방식이다. 저자에 따르면 overlapping pooling 이 top-1, top-5 에러율을 줄이는데 좀더 효과가 있다고 한다. 

 

 

 

 

Reducing Overfitting

Data Augmentation

AlexNet은 Overfitting을 막기 위해 훈련시키는 데이터의 양을 늘렸다. 이를 Data Augmentation이라고 하며,  하나의 이미지를 가지고 여러장의 비슷한 이미지를 만들어 내는 기법이다. AlexNet에서는 다음의 방법을 사용하였다.

  • generating image translations & horizontal reflections
  • altering the intensities of the RGB channels in training images
Artificially Enlarge the dataset using label-preserving transformations

 

Dropout

hidden layer의 output을 50%의 확률로 0으로 만들어준다. 훈련시에만 이렇게 임의적으로 입력이 들어올때마다 특정 뉴런들의 output을 0으로 만들어서 다른 아키텍쳐를 훈련시키며, 실제 테스트시에는 모든 뉴런을 활성화시킨다. AlexNet에는 DropOut기법을 훈련시에 적용했으며 ConvLayer가 아닌 FC(Fully-Connected Layer)에만 적용했다고 한다. 

 

 

 

Implementation

[Source Code Base]

 

GitHub - sckimynwa/alexnet

Contribute to sckimynwa/alexnet development by creating an account on GitHub.

github.com

 

 

반응형