논문리뷰/vision

[논문 리뷰] ImageNet Classification with Deep ConvolutionalNeural Networks(AlexNet)

100050 2024. 3. 11. 14:28

 원래 LeNet을 하려다가 50페이지나 되는 거 보고 도망쳤습니다. 나중에 시간 되면 해보는 걸로 해보죠.

 논문은 여기 있습니다. AlexNet은 ImageNet LSVRC-2010 contest에서 우승한 model입니다. ReLU와 dropout 등 여러 기술을 도입해서 만든 최초의 모델입니다. 이게 나온 지 14년 밖에 안 된다는 게 놀랍네요. introduction부터 봅시다.


1 Introduction 

 현재 객체 탐지를 위한 접근 방식은 머신러닝 방식을 필수적으로 사용한다. 개선을 위해서 더 큰 데이터셋와 더 강력한 모델을 학습하고, 과적합을 방지하기 위한 더 나은 기술을 사용해야 한다. 간단한 객체 탐지 과제의 경우에는 적은 datasets으로도 충분히 가능했지만 현실에서는 더욱 다양한 물체가 존재한다. 그래서 전까지는 그러한 큰 데이터셋이 없었지만 22000개가 넘는 category에 1500만 개의 label이 붙은 고해상도 이미지로 구성된 ImageNet이 나왔다.

 

 cnn은 성능은 조금 나빠질 수 있지만 기존 feedforward neural networks에 비해 훨씬 가볍고 빠릅니다. 그럼에도 고해상도 이미지를 가지는 ImageNet은 여전히 많은 비용이 필요하지만 우리는 고도로 최적화된 2D convolution과 현재의 GPU는 이 문제를 해결할 정도로 강력하다.   

 

 모델의 성능을 향상시키고 훈련 시간을 줄인 기법을 section 3에서 소개하고, 과적합을 방지한 방법을 section 4에서 소개한다. 모델은 5개의 convolutional layers, 3개의 fully-connected layers로 구성되어 있다.

 

 훈련에 제한이 있었다. 더 좋은 성능의 GPU를 사용할 수 있으면 더 많은 데이터셋을 훈련할 수 있을 것이다.

2 The Dataset

 ImageNet에서 나온 데이터셋을 사용했고, section 6에서 결과를 다룰 것이다.

 

 ImageNet의 데이터셋은 다양한 크기의 고해상도 이미지이고, 저자는 이 것을 256*256 사이즈로 down-sampling하였다. 그리고 이미지의 각 픽셀의  평균을 각각 뺀 것을 제외하고는 전처리를 하지 않았다. 

3 The Architecture

 모델 구조는 그림 2에 요약되어 있다. 이 모델은 5개의 convolutional layers와 3개의 fully-connected layers로 구성되어 있다.  3.1~3.4에서 모델의 특이한 특징을 설명한다. 중요도를 기준으로 정렬되어 있고 3.1이 가장 중요한 특징이다.

3.1 ReLU Nonlinearity

 본래 활성화 함수 sigmoid나 tanh를 사용하지만 이러한 함수들은 포화 함수여서 기울기 소실 문제가 나타나서 학습속도가 느려진다. 그러나 ReLU 의 경우에는 비포화 함수이기 때문에 학습속도가 빠르다. ReLU는 $max(0, x)$이다.

그림 1
그림 1 ReLU(실선)와 tanh(점선) 학습속도 차이

 

여기서 처음보는 개념들이 조금 나왔으니 설명하겠다. 먼저 그래프부터 보자.

그림 2

 

$sigmoid(x) = (1+e^{x})^{-1}$이고 $tanh(x)$는 기존 $tan(x)$를 옆으로 눕힌 것이다. 이 둘을 미분했을 때를 보자.

그림 3

 

 그러면 모든 미분값이 0보다는 크고 1보다는 작게 된다. 문제는 역전파를 쓰게 되면 미분의 연쇄법칙에 의하여 나온 값이 점점 0에 수렴하게 된다. (연쇄법칙은 미적분학에서 배운다.) 그리하여 학습이 느려지게 되는 것이고 이 것을 기울기 소실이라고 한다. 

 또한 포화함수란 입력값이 변해도 함수값이 변화하지 않는 상태라고 한다. 위에서 본 것처럼 포화함수는 기울기 소실이 되기가 쉽다. 그에 반해 ReLU는 비포화 함수이니 이러한 문제점이 없어 더 빠르게 학습이 진행된다.

3.2 Training on Multiple GPUs

 한 개의 GPU에서 학습을 진행하기에는 GPU의 메모리가 너무 적어서 모델의 크기가 제한된다. 그래서 GPU를 병렬화하여 사용하게 되었다. 저자는 특정 커널(뉴런)의 절반으로 나누어 각각의 GPU에 배치하고 학습시켰다. 이러면서 서로를 검증데이터로 사용함으로써 조금의 성능 향상이 있었다. 

3.3 Local Response Normalization

 LRN(local response normalization)은 생물의 측면 억제라는 활동에서 착안된 것으로 모델에서 국소적으로 정규화를 한다. 측면 억제란 강한 자극이 약한 자극을 억제하는 것을 뜻한다.

그림 4 측면 억제 예시(약한 자극인 흰색에 강한 자극인 검은색이 억제를 하여 회색이 보인다)

 이것이 ReLU함수가 무한히 커져 특정 한개의 값만으로 이미지의 class를 정하는 현상을 효과적으로 막아냈다. 자세한 수식은 논문 참고.

3.4 Overlapping Pooling

 그림으로 보여주는게 한 번에 이해할 것 같다. 모델에서는 stride 2, 3*3 maxpooling을 사용했다.

그림 5 overlapping pooling

3.5 Overall Architecture

그림 6 AlexNet 전체 구조

  그림 6를 보면 5개의 convolutional layers와 3개의 fully-connected layers로 구성되어 있다.  마지막에는 softmax를 취한다. 

 

 2, 4, 5번째 커널은 같은 GPU에서만 입력을 받고, 3번째 커널은 모든 입력을 다 받는다. 또한 fully-connected layers도 다 받는다.  LRN layers은 1, 2 번째 층 뒤에서 따라오고, Max-pooling layers(overlapping)는 1, 2, 5번째  뒤에서 따라온다. ReLU는 모든 층에 다 적용했다.

 밑에 표는 모델의 정보를 적어놓았다.

layer size kernel / stride / padding paramter
input 227*227*3 - -
conv1 55*55*96 11*11 / 4 / 0 34944
max-pooling 27*27*96 3*3 / 2 / 0 -
conv2 27*27*256 5*5 / 1 / 2 614656
max-pooling 13*13*256 3*3 / 2 / 0 -
conv3 13*13*384 3*3 / 1 / 1 885120
conv4 13*13*384 3*3 / 1 / 1 1327488
conv5 13*13*256 3*3 / 1 / 1 884992
max-pooling 6*6*256 3*3 / 2 / 0 -
fc1 4096 - 37752832
fc2 4096 - 16781312
fc3 1000 - 4097000

4 Reducing Overfitting

 논문에서는 10bit의 제약을 가했다고 하는데 뭐라는지 모르겠다. 아무튼 그 제약으론 부족해서 3가지 방법을 더 사용했다.

4.1 Data Augmentation

 2가지 증강 방법을 사용했다. 계산을 거의 하지 않고 다른 이미지를 생성 가능했기에 디스크에 저장할 필요는 없었다.

 

 첫번째 방법은 256*256 크기의 이미지에서 랜덤하게 잘라서 224*224 크기의 이미지를 만드는 것이다. 또한 그 이미지에 대해 수평으로 뒤집는 방식 또한 사용했다.

 

 두번째 방법은 이미지의 RGB의 값에 PCA(선형대수에서 배운다.)를 적용해서 밝기나 색상에 따라 물체가 바뀌지 않는다는 것을 학습시켰다. PCA로 주성분을 구한 다음 가우시안 분포(0, 0.1)에서 랜덤한 값을 뽑아 곱한 뒤 이미지의 RGB 값에 더하는 방식으로 증강했다. 이렇게 하여 일반적인 랜덤 변환보다 본래 물체를 좀 더 보존할 수 있게 되었다. 

그림 7


4.2 Dropout

 랜덤한 뉴런의 계산을 아예 하지 않도록 하여 사물의 큰 특징으로 분류를 하게 하여 과적합을 방지한다. 모델에서는 학습할 때 1,2 번째 fully-connected layers의 뉴런 50%를 dropout했다고 한다. 테스트 시에는 모든 뉴런을 사용하지만 출력에 0.5를 곱했다.

5 Details of learning

 128개의 batch size로 확률적 경사하강법으로 학습했다. momentum은 0.9, weight decay는 0.0005로 설정했다. $v$는 momentum 변수이고 $\varepsilon$은 학습률이다. 마지막 항은 i번째 batch에서 구한 미분값들의 평균이다.

$v_{i+1}=0.9\cdot v_i-0.0005\cdot \varepsilon \cdot w_i -\varepsilon \cdot {\left\langle {\partial L \over \partial w} \vert_{w_i} \right\rangle}_{D_i}$

$w_{i+1} = w_i + v_{i+1}$

 

 momentum은 쉽게 말해서 가속도로 loss값이 가장 작은 곳으로 빠르게 가기 위해 사용한다. weight decay는 가중치가 너무 커지는 것을 방지하기 위해 사용된다.

 

 초기화는 각각의 층을 가우시안 분포(0, 0.01)로 초기화 하였고 bias는 모든 fully-connected layers와 2, 4, 5번째 convolutional layers를 1로 초기화 하였다. 1로 초기화한 이유는 ReLU를 지날 때 양수가 나오게 하기 위해서 이다. 나머지 층의 bias는 0으로 초기화하였다. 

 

 모든 계층에 동일한 학습률을 적용했고, 수동으로 변경했다. 오류율이 개선되지 않는다고 볼 때 학습률을 10으로 나누었다. 학습률은 처음에 0.01이었고, 3번 감소했다. 대략 90번을 6일동안 2개의 GPU로 학습했다.

 

6 Results

 대회 결과라서 생략하겠습니다.

6.1 Qualitative Evaluations

그림 8

 그림 8은 1 번째 층의 96개의 커널을 시각화한 것이다. 위의 48개는 GPU 1에서 학습한 것이고, 아래의 48개는 GPU 2에서 학습된 것이다. 위의 커널은 색깔과 상관없는 것이 많고, 아래의 커널은 색깔이 다양하게 나타난다. 이 것은 가중치 초기화와는 상관없이 일어난다.

 

 유클리드 거리에 비해 이진코드로 유사성을 계산하면 훨씬 빠르다. 어떻게 하나면 오토인코더를 이용하여 벡터를 이진코드로 변환하도록 학습을 진행하면 된다. 이러면 이미지의 좀 더 의미있는 부분에 대해서 유사성을 계산하게 되는 이점도 있다.

그림 9 오토인코더

 이것이 오토인코더인데 인코딩 부분에서 특징을 추출하고 디코딩 부분에서 추출된 특징을 바탕으로 새로운 결과를 만들어내는 모델이다. 이진코드로 변환하도록 학습을 했다는데 논문에서 어떻게 진행했는지 안나와서 모르겠다. 

 

7 Discussion

 이 결론에 도달하는데 모델의 깊이는 아주 중요하다.

 

 실험을 단순화하기 위해 사전학습 모델은 사용하지 않았다. 결과가 많이 개선되었지만 인간의 시각 시스템과 일치시키기 위해서는 여전히 많은 순서가 남아있다. 궁극적으로 정적인 이미지에서 비디오 해석하는 큰 신경망을 사용하고자 한다.


 다음 번에 AI에서 많이 쓰이는 수학들도 다뤄보겠다.

References

그림 1, 6, 8 https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf ImageNet Classification with Deep Convolutional Neural Networks / Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton / 2012

그림 2, 3 http://taewan.kim/post/tanh_diff/ tanh 미분 정리 / 김태완 / 2017

그림 4 https://brave-greenfrog.tistory.com/48 [딥러닝 | CNN] - AlexNet / kkulzi / 2022

그림 5 https://www.datamaker.io/blog/posts/34  CNN의 주요 모델 - AlexNet / datamaker / -

그림 7 https://aparico.github.io/ What is PCA Color Augmentation? /  Addie Ira Borja Parico / -

그림 9 https://pebpung.github.io/autoencoder/2021/09/11/Auto-Encoder-1.html 1.오토인코더(AutoEncoder) /  pebpung / 2021