티스토리 뷰

Computer Vision(CV) 를 공부한다면 CNN은 당연히 공부할 것이고, 가장 기본적인 Network인 AlexNet을 공부하지 않는다는 것은 우리나라 사람이 우리역사를 모르는 것과 같다. 그만큼 AlexNet을 알고가는 것은 매우 중요하다고 볼 수 있다. 그럼 간단하게 알아보자

 

1. Abstract

AlexNet이 발표 전까지도 ImageNet의 1000개 클래스를 갖는 이미지 분류를 위해 large and deep Convolutional Neural Network를 학습시켜왔다고 언급한다. AlexNet은 이전 SOTA모델보다 높은 성능을 보여줬고, 다섯개의 Conv layers와 Max Pooling, 3개의 fully connected layers with final 1000-way softmax로 Network를 제시한다. 더 빠른 학습을위해 효율적인 GPU 학습을 진행했고, overfitting을 줄이기위해 dropout을 도입했다고 한다.

 

2. Introduction

객체탐지를 위한 접근에 머신러닝 방법들이 반드시 사용되고 있고, performance 향상을 위해, 더 많은 데이터셋을 확보할 수도 있고, 더 좋은 모델들로 학습시킬 수 있으며, overfiiting을 막는 좋은 기법들을 도입할 수도 있다. 이때 당시에는 라벨링 데이터가 상대적으로 적었지만, 간단한 탐지 Task들에 대해서는 augmentation 기법들을 활용한다면 충분한 데이터이다. 예를들면, MNIST 인식은 인간과 거의 같은 performance 수준이다. 그러나 현실의 객체들은 고려해야할 요소가 너무 많아 훨씬 더 많은 데이터 셋이 필요하다.

위의 내용을 시작으로 CNN의 발전방향과 GPU를 통한 학습으로 대규모의 데이터셋을 학습시킬 수 있게 되었다는 내용이 주된 내용이다. 제안한 Network는 5개의 conv layers 와 3개의 fc layers를 구성하고 있다고 언급한다.

 

3. Dataset

이미지넷에 있는 22000개의 카테고리를 갖는 15 million 라벨링 고해상도 이미지 데이터를 제공하는데, ILSVRC 대회에서는 그 중 1000개의 카테고리마다 1000개의 이미지를 갖는 데이터를 사용했다. 약 1.2million 학습 이미지와 50000개의 validation 이미지, 150000개의 testing 이미지가 있다. ImageNet은 다양한 resolution을 갖는 이미지들을 제공하지만 논문에서 제안한 Network는 고정된 dimension으로 input을 넣도록 되어있어 데이터 전처리 후 모델을 학습시켜야 한다.

 

4. Architecture

ReLU로 Nonlinearity를 갖는 Activation function을 사용했으며, 그 당시 GPU는 3GB여서 Multiple GPU를 사용해 허용되는 범위내에서 학습을 진행해야 했기에 위의 사진처럼 2개로 쪼개어 학습을 진행했다. 지금은 Batch Norm을 많이 사용하지만 이때 당시에는 Local Response Normalization(LRN) 기법을 적용했다. Lateral inhibition을 적용했는데, ReLU를 사용하기 때문에 conv / pooling 시 매우 높은 하나의 픽셀값이 주변의 픽셀에 영향을 미치기 때문에, 이를 방지하기 위해 다른 Activation Map의 같은 위치에 있는 픽셀끼리 정규화를 해주는 것이다. 이를 통해 하지 않은 것보다 더 좋은 성능을 보여줬다. Max Pooling을 적용하여 size를 줄이면서 불필요한 픽셀을 없애주어 학습에 방해되는 요소들을 없애는 역할을 한다. 논문에서는 stride = 2, filter size = 3 의 Max pooling을 적용했는데 filter size = 2 일때보다 좀 더 좋은 성능을 보여줘 선택했다고 언급한다.

 

5. Overfitting

Overfitting을 줄이기위해 Data Augmentation과 Dropout을 적용했다. Data Augmentation은 부족한 데이터를 증강시키는 목적으로 사용되어 실제에 있을 법한 이미지들을 만들어주는 효과가 있다. Dropout의 경우 랜덤한 확률로 Node를 0으로 만들어 매번 랜덤하게 Node를 선택해 0으로 만드므로 Bagging 효과와 비슷한 효과를 내어 Overfitting을 줄여주는 효과가 있다. 자세한 것은 따로 게시글을 작성하도록 하겠다.

 

6. Train

SGD를 사용했으며 momentum과 weight decay를 적용하여 학습을 진행했다.

 

이정도만 리뷰해도 AlexNet은 충분히 이해했다고 볼 수 있다. 수식적으로 좀 더 딥하게 보고 싶은 경우 논문을 다시 읽어보는 것을 추천한다.

 

논문 : https://arxiv.org/abs/1404.5997v2

 

One weird trick for parallelizing convolutional neural networks

I present a new way to parallelize the training of convolutional neural networks across multiple GPUs. The method scales significantly better than all alternatives when applied to modern convolutional neural networks.

arxiv.org