AlexNet은 2012년 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge) 에서 우승하였습니다.
Abstract
ImageNet LSVRC-2010 대회에서 High resolution 이미지를 약 1000개의 다른 class로 분류 하기 위해 Deep Convolution neural network를 train 하였으며, test data에서 top-1 and top-5 error rates가 37.5% 및 17.5%를 달성 하였습니다. 이는 이전보다 발전한 상태입니다.
약 6천만개의 parameter와 65만개의 뉴런이 사용 됩니다. 그리고 5개의 convolutional layers를 가지며, 그 중에 일부는 max pooling layer를 가지고 있습니다. 그리고 마지막에는 3개의 fully-connected layer를 가지게 됩니다. 최종 layer 출력은 1000개의 softmax로 구성됩니다. train 속도를 위하여 non-saturation neurons과 효과적인 GPU 구현을 이용 하였습니다. 그리고 Overfitting을 줄이기 위하여 dropout 기법을 이용하여 regularization을 하였습니다.
ILSVRC-2012 Contest에서 model을 변형하여 2등과 큰 차이로 우승 하였습니다.
Datasets
train에 사용된 데이터 셋은 imageNet 입니다.
imageNet 딥러닝의 대모이신 Fei Fei li 교수님이 만드신 걸로, 1500만개의 high resolution 이미지를 가지고 있으며 약 22000개의 category를 가지는 대규모 데이터 셋 입니다.
ILSVRC는 Imagenet 의 일부를 이용하는데, 카테고리가 약 1000개에 약 1000개의 이미지가 있는 것을 이용합니다.
imageNet는 총 120만개의 train, 50000개의 valid, 150000개의 test image가 있습니다
imageNet은 이미지 크기가 다양 하므로 이미지 크기를 256*256으로 고정 하였습니다.
왜냐하면 나중에 Fully-connected layer로 입력시 크기가 고정 되어야 하기 때문입니다.
resize는 width height중에 짧은 곳을 256으로 변환, 그리고 center부분을 256 으로 cropped 하였습니다.
그리고 각 image의 pixel에서 traning set의 mean을 빼주었습니다.
그 외에는 데이터 pre-process를 하지 않았습니다.
Architecture
Network architecture의 요약은 논문의 Figure 2에 있습니다.
차근차근 하나하나 자기들이 설정한 기법에 대해서 설명합니다.
ReLU Nonlinearity
보통 평범한 방법으로 각 neuron 의 output은 tanh, sigmoid방식이 있습니다.
하지만 뭐. cs231n을 들은 사람은 알겠지만, 이 두개 방식은 sigmoid는 mean이 0이 아닌것, tanh는 이를 해결 하였지만
두개다 가지고 있는 고질적인 문제는 Saturated Neurons kill gradient 같은 문제가 있습니다.
그래서 Rectified Linear unit을 사용 합니다.
이는 Deep convolutional neural netwrok에서 tanh units보다 빠르게 작동합니다.
상식적으로 생각을 해봐도 max(0,x)보다 tanh가 더 계산량이 많다고 생각을 할 수 있을거같긴 하다.
CIFAR-10 Dataset에서 검증한 결과로 CIFAR-10은 10개의 카테고리 50000장의 Train, 10000장의 Test image가 있는 것 입니다. 그래프에서 보면 점선은 tanh이고, 실선은 ReLU입니다.
Epoch가 진행 될 수록 시간차이가 심해지는 것을 알 수 있습니다.
25% training error 까지 약 눈대중으로 보기에는 6~7epoch와 37epoch정도 같으니 약 6배정도 차이가 나는 것을 알 수 있습니다.
Training on Multiple GPUs
2012년 당시 GPU는 GTX580이였다.
Memory 용량이 3GB 파멸적인것을 알 수 있습니다.
Network를 train 시키기에는 부족한 양이라 여기서는 두개의 GPU를 이용하여 Training 하였습니다.
위에 그림을 보면 중간에 두개로 나눠지는 이유가 그러한 이유입니다.
Host를 거치지 않고 두개가 서로의 메모리에 접근이 가능하고, 두개의 GPU는 특정 Layer에서만 교환합니다.
Local Response Normalization
Relu가 gradient Saturation을 막는데 많이 도움이 됩니다.
하지만 이 방식의 normalization도 크게 도움이 되는데, Relu에나 나온 결과들을 같은 Spatial 위치의 인접한 Kernel map n개를 모아서 정규화 합니다. 요새는 안쓰는 방법이므로 심도 있게 알고 싶다면 검색하는 것을 추천드립니다.
현재는 Batch normalization을 사용합니다.
Overlapping Pooling
정통적인 방식은 겹치게 안했습니다.
Alexnet은 pooling size = 3, stride =2 즉 CNN에서 서로 Overlapping된는 max pooling을 수행 하였고, overfitting을
방지하는데 도움이 된다고 하였습니다. 실제로 top-1 top-5에서 error rate가 0.4, 0.3감소 한다고 하며, 다음과 같이 train중에 overlapping pooling이 존재하면 overfit이 어렵다고 합니다.