AI/Paper Review

[AlexNet] ImageNet Classification with Deep CNN, 2012

HaneeOh 2023. 3. 25. 22:23

AlexNet은 2012년에 이미지 분류 대회에서 우승을 하며 현대 CNN의 기초가 된 논문이다. 

 

 

LeNet

사실 CNN은 AlexNet에서 처음 사용된 것이 아니다. 1998년에 발표된 LeNet이라는 논문에서 CNN의 기반을 구성했다. Pooling, Padding, Activation, Fully Connected Layer로 이어지는 일련의 과정을 활용했으며, MSE Loss를 손실함수로 사용했다.

MNIST Dataset을 기준으로 99.05%의 정확도를 달성했지만, 그게 한계였다. 얼굴이나 객체 인식과 같은 복잡한 패턴의 영상을 처리할 수 없었고 기존의 알고리즘이 더 주목을 받았다. 이후 CNN은 역사의 뒤안길로 사라지는 듯 보였다.

 

 

 

AlexNet

그러다 AlexNet이 등장하게 된다. LeNet의 구조를 거의 계승하되, 이미지의 input size를 키웠으며 activation function으로 ReLU를 활용하였다. 또 모델의 파라미터 수가 커지면서 발생할 수 있는 overfitting을 해결하기 위해 dropout을 적용하였는데, 이는 batch normalization 과 같은 방법론이 등장할 수 있는 계기가 되었다고 한다.

논문 전문은 여기서 확인할 수 있다.

https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

 

Dataset

ImageNet 데이터셋은 대략적으로 22,000개의 카테고리가 있는 1500만개의 고해상도 이미지이다. 매년 개최되는 ILSVRC라고 하는 이미지 인식 대회에서는 1000개의 카테고리 별로 1000개의 이미지 데이터를 제공하고 있다. AlexNet에 활용된 데이터셋은 다음과 같다.

  • 120만 개의 training data, 5만 개의 validation data, 15만 개의 test data

ImageNet의 이미지들은 다양한 크기의 사진들이 담겨 있었는데, AlexNet은 모델에 고정된 크기의 사진을 입력하기 위해 다음의 전처리를 거쳤다.

  • 이미지의 가로 세로 중 짧은 쪽의 길이가 256이 되도록 줄인다. (resize)
  • 이미지의 중앙을 크롭하여 256x256 정사각형이 되도록 한다. (crop)
  • 각 RGB의 평균값으로 각 RGB 픽셀을 빼준다 (subtracting the mean activity)

 

 

Architecture

1. ReLU

sigmoid, tanh, ReLU

일반적으로 활성화함수로 하이퍼볼릭 탄젠트나 시그모이드 함수를 사용하였다. 하지만 이런 saturating 비선형 함수보다는 non-saturating한 ReLU가 훨씬 학습 속도가 빠르다고 한다. saturating이란 양의 무한대와 음의 무한대로 갈수록 gradient가 0에 가까워지는 현상을 말한다. 위의 사진에서 확인할 수 있듯, sigmoid나 tanh는 무한대로 갈수록 기울기가 0에 가까워지는 반면 ReLU는 1로 유지되는 것을 확인할 수 있다.

 

 

[Figure 1]ImageNet Classification with Deep Convolutional Neural Networks

Figure 1을 보면 CIFAR-10 데이터셋에 트레이닝 에러가 25%까지 줄어드는 데 ReLU가 tanh에 비해 6배의 시간이 단축되는 것을 확인할 수 있다.

이전에도 $|tanh(x)|$와 같은 non-saturating 활성화 함수가 사용된 논문이 있으며 overfitting 방지에 효과를 보였다고 한다. 하지만 AlexNet에서 필요로 했던 것은 빠른 학습 속도였고 실제로 효과를 보였다.

 

2. Multiple GPUs

하나의 GTX 580 GPU에는 3기가의 메모리만 있는데, 이 때문에 네트워크의 최대 사이즈를 제한할 수 밖에 없다. 1.2백만 개의 트레이닝 셋은 하나의 GPU에 학습시키기에 너무 크기 때문이다.

그래서 AlexNet에서는 두 개의 GPU를 병렬화하여 사용했는데(corss-GPU parallelization), CPU를 거치지 않고 GPU끼리 읽고 쓰는 것이 가능하다고 한다. 다만 전체 네트워크에서 2개의 GPU를 사용하지는 않았고 특정 레이어에서 커널을 절반으로 나누어 연산을 처리하게 하였다.

 

3. Local Response Normalization(LRN)

ReLU는 non-saturating 활성화 함수로, normalization 없이도 input이 양수라면 학습이 잘 되도록 해준다. 하지만 저자는 local normalization이 generalization에 도움을 준다는 것을 발견했다. 

  • $a^i_{x,y}$: (x, y)에 존재하는 픽셀에 대해 $i$번째 커널을 적용하여 얻은 결과에 ReLU를 씌운 값
  • N: 레이어에 존재하는 전체 커널의 수
  • n: 인접하다고 판단할 범위 값(하이퍼 파라미터)

당시에는 ReLU의 결과값이 너무 커져서 주변 뉴런에 영향을 주는 것을 방지하기 위해 이러한 normalization 기법이 필요했다고 한다. 하지만 현재는 batch normalization과 같은 다양한 기법의 등장으로 잘 사용하지 않는다고 하니, 깊게 이해할 필요는 없을 것 같다.

이 기법으로 top-1과 top-5 에러율을 각각 1.4%, 1.2% 줄일 수 있었다고 한다.

 

4. Overlapping Pooling

이름에서 알 수 있듯이 커널을 겹쳐서(overlap) 풀링에 활용하는 기법이다. 

 

출처: https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637

stride가 kernel size와 같으면(s=z), 위의 일반적인 풀링이 된다.

하지만 stride가 kernel size보다 작으면(s<z), 아래의 overlapping pooling을 활용할 수 있다.

 

저자는 $s=2, z=3$로 연산하였고, $s=2, z=2$일 때보다 top-1과 top-5 에러율을 각각 0.4%, 0.3%만큼 줄일 수 있었다고 한다. 또한 overlapping pooling이 적용된 모델이 아주 약간 과적합이 적게 발생한다는 것을 확인했다.

overlapping pooling이 왜 과적합 예방에 도움이 되는지 알아봤는데, 첫째로는 pooling layer가 spatial dimensionality를 줄이고 smaller하지만 richer한 feature map을 얻을 수 있기 때문이라고 한다. 쉽게 말해 input에서 pooling을 통해 필요 없는 feature는 삭제하면서도 overlapping으로 필요한 feature만 남긴다는 의미 같다. 두번째로는 model을 규제함으로써 translation invariance(입력의 위치가 변해도 출력은 변하지 않는 성질)을 얻을 수 있다는데, 솔직히 이건 잘 이해되지 않는다.

 

5. Overall Architecture

총 8개의 레이어로 이루어져 있으며, 5개의 Convolution Network와 3개의 Fully Connected Network로 구성되어 있다. FC 레이어의 마지막에는 1000개의 클래스로 분류하는 softmax 연산을 거쳐서 최종적으로 1000개의 카테고리를 분류한다.

 

[Figure 2]ImageNet Classification with Deep&nbsp;Convolutional Neural Networks

Figure 2를 보면 일부 네크워크가 두 개로 나눠져 있는 것을 알 수 있다. 하나의 GPU가 그림 위쪽의 네트워크에서 동작하고 다른 네트워크가 그림 아래의 네트워크에서 동작한다.

2, 4, 5번째 레이어는 이전 GPU에서 연산된 결과를 사용하는 반면, 3번째 레이어에서는 GPU 간 communication을 통해 전체 feature map과 연결되어 있는 것을 알 수 있다. (위에 교차된 점선 부분을 보면 알 수 있다.)

 

Reducing Overfitting

AlexNet은 총 6000만 개의 파라미터를 가지고 있다. 큰 파라미터 수에 대해 과적합을 방지하기 위해서 저자는 2개의 기법을 소개한다.

 

1. Data Augmentation

overfitting을 방지하는 가장 쉽고 보편적인 방법은 데이터의 수를 인위적으로 늘리는 방법이다. 이때 label-preserving transformation을 활용했는데, 이는 이미지의 label이 바뀌지 않도록 유지하면서 변형하는 기법이다. 예시로 라벨이 6인 이미지를 잘못 뒤집으면 라벨이 9인 이미지와 겹치게 되어 label-preserving transformation이 아니다.

 

  • 좌우 반전

첫번째 변형 방법은 좌우반전이다. 이미지(256 x. 256)를 좌우반전시켜도 이미지의 라벨은 변하지 않기 때문에 사용할 수 있으며 그 변형된 사진에서 다시 랜덤으로 224 x 224 크기의 패치를 얻어내어 입력으로 활용했다. 이렇게 되면 (256-224=32) x 32 x 2 = 2048 배만큼 데이터를 늘릴 수 있다.

Test 시에는 각 꼭지점과 중앙의 5개 패치(224 x 224) 그리고 좌우반전으로 뽑은 5개의 패치를 이용해 총 10개의 패치를 입력으로 넣었다. 그리고 이 10개의 패치에 대해 나온 결과를 평균 내어 최종 output으로 활용했다고 한다.

 

  • RGB 색상 강도 변형

두번째 변형 방법은 RGB 채널의 색상 강도를 조절하는 방법이다. 주성분 분석(PCA)를 진행하고 평균(0), 표준편차(0.1)를 갖는 가우시안 분포에서 랜덤 변수를 추출한 뒤, eigenvector에 곱해준다.

  • ${p_i}: ith eigenvector$
  • ${\lambda_i}: ith eigenvalue$
  • ${\alpha_i}: random variable$

이렇게 변형된 RGB 값을 원래의 픽셀 값과 더해준다. 이 방식을 사용하면 원래의 라벨을 해치지 않으면서 색상 값만 변형시키는 것이 가능하다.

 

 

 

 

2. Dropout

dropout은 사용자가 정한 확률로 각 레이어의 뉴런을 0으로 만드는 기능이다. 순전파 때 drop out이 진행되며 이때 0으로 바뀐 뉴런은 역전파 때 활용되지 않는다. 다음과 같은 효과가 있다.

  • 모델의 복잡성을 줄여 overfitting을 방지한다.
  • 뉴런의 co-adaptation을 줄여준다. (같은 층의 두 개 이상의 노드의 입력 및 출력 강도가 같아지는 문제)

저자는 FC layer에만 0.5의 확률로 drop out을 진행했다고 한다. test 시에는 모든 뉴런을 사용하지만 output에 0.5를 곱해줬다고 한다.

'AI > Paper Review' 카테고리의 다른 글

geodesic distances 논문 정리  (0) 2023.08.02