본문 바로가기

Deep Learning Fundamental

ImageNet Classification with Deep ConvolutionalNeural Networks

먼저 해당 포스팅은 NIPS 2012 논문 ImageNet Classification with Deep ConvolutionalNeural Networks를 참고하여 작성하였음을 밝힙니다. 이번 포스팅에서는 논문에서 제안하는 AlexNet과 흥미로웠던 내용들을 위주로 간략하게 살펴보도록 하겠습니다. 


1. The Dataset

그림 1. ImageNet dataset

AlexNet은 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)의 2012년 대회에서 Top 5 test error 기준으로 15.4%를 기록하여 1위를 차지했습니다. 위 대회에서 사용된 ImageNet 데이터 셋은 컴퓨터 비젼 분야에서 자주 사용되는 대표적인 데이터셋이라고 할 수 있습니다. ImageNet 데이터 셋은 그림 1.과 같이 22,000개의 다양한 클래스를 가지는 1400만 장의 이미지로 구성됩니다. ILSVRC에는 약 120만 개의 학습 이미지, 5만 개의 검증 이미지, 15만 개의 테스트 이미지가 사용되었습니다. 


2. Reducing Overfitting

수백만개의 이미지를 학습하기 위해서는 large learning capacity를 가지는 모델이 필요할 것입니다. 이러한 모델이 가지는 주요한 문제는 overfitting입니다. 이를 해결하기 위해 논문에서는 아래와 같이 몇 가지 방법을 제안합니다.

 

2.1 ReLU Nonlinearlity

그림 2. training error rate on CIFAR-10 with ReLU (solid line), tanh (dashed line) 

활성화 함수로 ReLU 함수가 사용되었습니다. ReLU는 rectified linear unit의 약자입니다. ReLU를 사용하며 학습하게 되면 그림 2.와 같이 Tanh을 사용하는 것보다 6배나 빠르게 training error를 포화시킬 수 있었다고 합니다. 자세한 내용은 Rectified Linear Units Improve Restricted Boltzmann Machines 논문을 포스팅 하며 살펴보도록 하겠습니다. AlexNet가 발표된 이후로는 활성화함수로 ReLU 함수를 사용하게 되었다고 합니다.

 

2.2 Overlapping Pooling

AlexNet에는 overlapping pooling이 사용됩니다. Overlapping pooling은 기존의 pooling과 다르게 stride가 kernel size 보다 더 작은 값을 가집니다. 이로 인하여 kernel이 feature map에 중첩되어 연산됩니다. 논문에서는 stride는 2로 kernel size는 3으로 설정하였습니다. 이렇게 overlapping pooling을 사용하여 학습하였을 때 overfitting에 강건하며, top-1, top-5 error가 각각 0.4%, 0.3% 감소하였다고 합니다.

 

2.3 Dropout

Over fitting을 방지하기 위해서 규제 기술의 일종인 dropout을 사용하였 습니다. 이를 통해 학습 과정에서 FC layer의 뉴런 중 일부를 생략하면서 학습을 진행합니다. 이 과정에서 그 뉴런의 값들은 0으로 바뀌고, 그 뉴런들은 forward pass와 back propagation에 영향을 미치지 않게 됩니다. 이를 통해서 뉴런들의 co-adaptation을 줄이게 되어 robust한 feature를 학습하게 됩니다.

 

2.4 Data augmentation

Over fitting을 막기 위한 가장 쉽고 일반적인 방법은 데이터를 변환하여 인위적으로 데이터의 양을 늘리는 것입니다. AlexNet은 224 x 224 크기의 이미지를 입력으로 받습니다. 이에 따라 256 x 256 크기의 ImageNet 데이터 셋 이미지의 중심으로부터 상하좌우로 움직이며 해당 크기로 crop하고, horizontal하게 flip하는 방식으로 augmentation하여 사용하여 데이터의 양을 5배로 늘렸다고 합니다.


3. AlexNet Architecture

그림 3. An illustration of the architecture of AlexNet

AlexNet은 5개의 convolutional layer와 3개의 FC layer로 구성됩니다. 그림 3.와 같이 GPU의 병렬처리를 통해 채널을 나누어 연산하도록 하여여 연산량을 줄이고 속도를 빠르게 만든 것이 특징입니다. 학습 과정에서 2, 4, 5 번째 layer는 동일한 GPU 내부에 위치한 이전의 convolution layer의 출력만을 받아 연산하고, 나머지 layer는 다른 GPU의 layer와 connection을 가지게 됩니다. GPU 병렬처리를 수행하며 각 GPU에서는 독립적인 layer가 존재하며 학습을 진행시키고, 특정 layer에서는 GPU 간의 conncection을 준다는 점이 새롭게 다가왔습니다.

 

그림 4. The top 48 kernels were learned on GPU 1 while the bottoms were learned on GPU 2

그림 4.는 각각의 GPU에서 학습한 첫 번째 convolution layer의 출력 feature map을 나타낸 것입니다. GPU 1의 kernel은 색에 구애받지 않는 반면에 GPU 2의 커널은 색에 따라 다른 결과를 나타냅니다. 이 현상은 매 학습 과정마다 발생하였고, 학습 환경도 동일하며 가중치 초기화와도 관련이 없는 것으로 확인되었습니다. 이 점 또한 흥미롭게 다가왔습니다.

 

논문에서는 이에 대한 자세한 구현 방법이 명시되어 있지 않아 Git Hub를 참조하였습니다. 하지만 코드에서는 torch 라이브러리의 DataParallel 함수를 통하여 미니 배치를 한번 더 분할하여 GPU에 각각 연산을 할당하는 정도로만 구현되어 있어 그 방법이 논문과는 상이하였습니다.

 


이렇게 ImageNet Classification with Deep ConvolutionalNeural Networks 논문을 살펴보았습니다. 질문이나 지적사항은 댓글로 남겨주시면 감사하겠습니다.