본문 바로가기
Deep Learning/Convolutional Neural Networks

AlexNet, 2012

by YJJo 2023. 2. 10.

1. AlexNet 개요

AlexNet은 Krizhevsky, Alex et al., 2012에서 제안된 CNN 구조로 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)의 2012년 대회에서 top 5 test error rate 15.4%로 2위 error rate 26.2%와 큰 차이를 만들며 1위를 차지했습니다.  AlexNet은 단순히 2012년 대회에서 우승했을 뿐 아니라, CNN을 보편화하는 큰 역할을 했습니다.

AlexNet이 좋은 성과를 내고, 보편화하는 데 중요한 몇 가지 기여가 있는데, 구조적인 특징과 과적합(Overfitting)을 줄이기 위한 노력입니다. 구조적인 관점에서는 ReLU(Rectified Linear Unit)사용, Local Response Normalization(LRN)의 적용이 있고, Overfitting을 줄이기 위한 노력으로는 dropout과 data augmentation을 사용했다는 점입니다. LRN은 현재 잘 사용되지 않고, 대부분 batch normalization을 적용하고 있지만 CNN 구조 중간에 normalization을 적용한 시초가 되었다는 점에서 중요하고, 나머지 기법들은 현재에도 자주 사용되고 있습니다.

먼저 AlexNet의 구조를 살펴보고, CNN에 기여한 위 네가지 기법을 자세히 다루는 순서로 아래 내용을 이어가겠습니다.

2. AlextNet 구조

Figure 1: AlexNet (논문 발췌)

시작하기 앞서 figure 1은 논문에 있는 그림인데 좌측에 존재하는 image의 input이 224가 아니고 227이라고 합니다. 잘못된 표기이고 이후 227로 정정했다고 합니다. 논문에서는 2개의 GPU 병렬처리를 한 그림을 위와 같이 표현 했는데, 상세하게 나타내면 아래 그림 figure 2와 같습니다. 

Figure 2: AlexNet

1) Input

227x227x3 이미지를 입력받습니다.

2) Conv. 1: Convolution Layer

2개의 GPU에 각각 11x11x3 filter, 96개, 4 stride로 convolution합니다. 따라서 55x55x96의 output을 얻습니다. Activation function으로는 ReLU를 사용합니다. (참고로 output을 계산하는 방법은 $ceiling\left[\left(\text{input size}-\text{filter size}-1\right)/(\text{stride})\right]$입니다.)

55x55x96의 output에 3x3 filter, stride: 2로 overlapping max pooling을 적용하여 27x27x96의 output을 얻습니다.

2개의 GPU에서 실행되서 실질적으로는  27x27x(96+96)의 output을 얻습니다. 총 192개의 feature map의 동일한 자리에 normalization을 적용하며, local response normalization라고 합니다. (자세한 설명은 아래에서 진행하겠습니다.)

3) Conv. 2: Convolution Layer

다시 2개의 GPU에 27x27x96을 input으로 feeding합니다. 그리고 두 번째 Convolution으로 5x5x48 filter, 128개, stride:1, zero-padding:2을 진행하여 27x27x96의 output을 얻습니다. (zero-padding은 input의 주변에 0으로 채우는 방법을 의미하며, zero-padding 2는 0을 두 겹으로 쌓는다는 의미가 됩니다.) Activation function으로는 ReLU를 적용합니다.

마찬가지로 27x27x96의 output에 3x3 filter, stride:2로 overlapping max pooling을 적용하여 13x13x96의 ouptut을 얻고 각 GPU에서 실행된 결과를 모아, 13x13x(96+96)의 output에 local response normalization (LRN)을 적용합니다.

4) Conv. 3: Convolution Layer

Conv. 1, 2에서는 각 GPU에서 독립적으로 진행했다면, Conv. 3에서는 그 결과를 한 번 합쳐서 convolution을 진행합니다. 그래서 384개의 3x3x256, stride: 1, zero-padding: 1을 적용하여 13x13x384의 output을 얻습니다. 마찬가지로 ReLU로 활성화하고, 각 GPU에 다시 할당합니다. 때문에 각 GPU에는 13x13x192의 input을 feeding하게됩니다.

Conv. 1, 2와 다르게 LRN을 적용하지 않습니다.

5) Conv. 4: Convolution Layer

3x3x192 filter, 192개, stride:1, zero-padding:1을 진행하여 13x13x192의 output을 얻습니다. Activation function으로는 ReLU를 적용합니다.

6) Conv. 5: Convolution Layer

이어서 3x3 filter, stride: 2로 overlapping max pooling을 적용하고 6x6x128의 output을 얻습니다.

7) FC 1: Fully Connected Layer

2개의 GPU에 각각 올라와 있는 6x6x128의 output을 합쳐서 flattening해주면 6x6x128x2(GPU 2개) = 9,216의 1차원 벡터로 만들어 feeding하고 4,096개의 노드에 full connection합니다. 그리고 ReLU로 활성화 합니다.

8) FC 2: Fully Connected Layer

4,096의 input 노드를 4,096개의 노드에 full connection하고, ReLU로 활성화 합니다.

9) FC 3: Fully Connected Layer

4,096의 input 노드를 1,000개(예측할 class의 수)의 노드에 full connection하고 softmax를 적용해 각 class에 속할 확률을 얻습니다.

3. Contributions of AlexNet

3.1. The Architecture

ReLU (Rectified Linear Unit)

Figure 3: ReLU (논문 발췌)

AlexNet 이전에는 activation function으로 주로 sigmoid와 tangent hyperbolic function을 사용했습니다. 하지만 두 함수는 saturating되는 구간이 존재하고, 이는 vanishing gradients, exploding gradients 문제를 초래하게 됩니다. AlexNet에서는 이를 방지하기 위하여 최초로 ReLU를 적용하였고, 논문에서는 CIFAR-10에서 25% training error rate에 도달하는 속도가 ReLU가 tanh 보다 6배 빨랐다고 합니다.

Local Response Normalization (LRN)

ReLU를 적용하면 vanishing gradient를 예방할 수 있지만, ReLU의 결과는 $[0, \inf)$ 구간에 존재하기 때문에 간혹 너무 높은 양수를 받게 되면, 주변의 낮은 값이 다음 neuron으로 전달을 방해할 수 있습니다. 이를 일반화 하기 위하여 LRN을 적용합니다. LRN은 feature map에 같은 위치에 존재하는 값을 이용합니다. LRN의 식은 아래와 같습니다. $$b^{i}_{x, y}=\frac{a_{x,y}^{i}}{\left(k+\alpha\sum_{j=max(0, i-n/2)}^{min(N-1, i+n/2)}\left(a_{x,y}^{j}\right)^{2}\right)^{\beta}}$$여기에서 $b^{i}_{x,y}$는 i feature map의 x, y자리의 normalized output, $a_{x,y}^{i}$는 i feature map x, y자리의 input이, $N$는 feature map의 총 개수를, $n$은 $N$개의 feature map중 주변의 몇 개를 normalizing할 지를 의미하며 $\alpha$, $\beta$, $k$,$n$은 hyperparameters입니다. 수식이 좀 복잡해 보이는데, 요약하면, $i$를 기준으로 $n/2$, 즉 반반 적용하는데 feature map의 가장자리인 0, $N$에서는 절삭한다는 의미입니다.

3.2. Reducing overfitting

Dropout

과적합을 피하기 위해 학습의 과정에 random하게 몇 개의 노드를 0으로 바꿔버리는 것을 의미합니다. 그러면 해당 노드들은 forward pass, backward pass 모두 아무런 영향을 미치지 않게 됩니다. 이에 따라 특정 노드의 weight에 학습이 치중되는 것을 방지하여 균형있는 결과를 얻을 수 있게 됩니다.

Data Augmentation

최근의 CNN에서는 필수재가 되어버린 Data Augmentation입니다. AlexNet에서는 두 가지 Data Augmentation을 진행 했습니다.먼저 imagenet의 image이 크기가 상이하기 때문에 256x256x3으로 resize해줍니다. 만들어 줄때는 가로와 세로 중 작은 부분을 256으로 rescale한 뒤 이미지를 center crop합니다. 그 다음 전체 학습 데이터의 pixel의 평균 만큼 빼주어 기본 데이터를 만드는 것을 시작으로 합니다.첫 번째 data augmentation으로 256x256x3으로 얻어진 image에서 random crop하여 데이터를 얻고 horizontal reflection을 해주었습니다. 두 번째는 RGB의 intensities를  PCA(principal component analysis)로 바꾸어 줍니다. PCA는 학습 데이터 전체를 이용하여 진행합니다. 전체 학습 데이터의 RGB에 대한 3x3 covariance matrix에서 $p_{i}$ eigenvector와 $\lambda_{i}$ eigenvalue를 얻고, $\alpha_{i}$를 정규분포 $N(0, 0.1)$에서 random sampling하여, $$[p_{1}, p_{2}, p_{3}][\alpha_{1}\lambda_{1}, \alpha_{2}\lambda_{2},\alpha_{3}\lambda_{3}]^{\top}$$을 각 이미지에 더해줍니다.

이상으로 AlexNet 포스팅을 마치겠습니다 :)

References

'Deep Learning > Convolutional Neural Networks' 카테고리의 다른 글

VGG-16, VGG-19, 2014  (1) 2023.02.20
LeNet-5, 1998  (0) 2023.01.30
CNN 역전파 (Backpropagation for CNN)  (6) 2019.07.02
Convolution Neural Networks (합성곱 신경망)  (42) 2019.06.23

댓글