[논문 리뷰] ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks
Abstract
- ImageNet 120만 이미지 데이터를 1000개의 class로 분류하는 문제를 위해 크고 깊은 CNN을 학습했다.
- 평가 데이터에서 이전 SOTA보다 상당히 성능이 좋아졌다.
- 5개의 convolutional layer와 5개의 max pooling layer, 3개의 FC layer, 1개의 softmax로 구성된다.
- 6000만개의 파라미터와 65만개의 뉴런을 보유한다.
- 빠르게 학습하기 위해, 포화되지 않는 뉴런을 사용하고 매우 효율적인 GPU를 합성곱 연산에 사용했다.
- FC layer에서 과적합을 줄이기 위해 dropout을 사용했다.
Introduction
- 객체 탐지에서 기계 학습 방법이 필수적이고, 성능 향상을 위해 더 큰 데이터셋을 모으고 더욱 강력한 모델을 학습시키고 과적합 방지를 위한 기술을 사용한다.
- 하지만 최근 데이터셋들은 실제 객체들을 탐지하기에 매우 작지만 많은 데이터를 수집하려는 노력이 있다.
- 100만개의 이미지로부터 1000개의 객체를 학습하기 위해서는 모델의 용량이 커야한다.
- 하지만, 객체 탐지 task의 엄청난 복잡도는 ImageNet과 같은 커다란 데이터셋에는 해당되지 않는다.
- 그렇기 때문에 우리가 갖지 않은 모든 데이터를 보충할 사전 지식을 갖고있는 모델이 필요하다.
- CNN의 용량은 깊이와 폭으로 결정되고 이미지를 통해 강하고 정확한 가정을 내린다.
- FeedForward 신경망과 비교해서, CNN은 연결과 파라미터의 수가 훨씬 적고 학습하기도 쉽다.
- CNN의 매력적인 특성과 그들의 지역적 구조의 상대적인 효율성에도 불구하고, 고해상도 이미지에 적용하는 것은 엄청난 비용이 들어간다.
- 하지만 GPU는 커다란 CNN을 학습하기에 충분히 강력하고 ImageNet과 같은 데이터는 과적합 없이 모델을 학습시키기에 충분하다.
- 해당 신경망은 당시 GPU의 가능한 메모리 양에 맞게 설계되었다.
- GTX 580 3GB GPU 2개로 5~6일을 학습했다.
The Dataset
- ImageNet은 약 22,000개의 범주를 포함하는 1500만개 이상의 고해상도 이미지 데이터셋이다.
- ILSVRC는 ImageNet의 대략 1000개의 카테고리 별 1000개 이미지를 사용한다.
- 대략 120만개의 training image와 5만개의 검증 이미지, 15만개의 평가 이미지가 존재한다.
- ImageNet은 다양한 해상도를 지원하는데, 우리는 일정한 input 차원이 필요하여 256*256 해상도로 고정시켰다.
- 직사각형 image가 주어지면, 길이를 256으로 줄인 후 남은 중간 부분 256만큼을 잘랐다.
- 따로 전처리하지 않고 raw RGB 값을 사용했다.
Architecture
- 8개의 학습 계층을 포함한다.
- 5개의 Convolutional 계층과 3개의 FC 계층
ReLU Nonlinearity
- 일반적으로 sigmoid나 tanh을 활성화함수로 사용하지만 경사하강법의 학습 시간 관점에서 이 포화된 비선형성은 포화되지 않는 비선형성(ReLU)보다 훨씬 학습 속도가 느리다.
- Rectified Linear Units 사용
- tanh나 sigmoid보다 훨씬 빠르다.
- 기존 활성화 함수를 대체하고자 하는 시도는 이전부터 있었다.
- f(x)=∣tanh(x)∣는 overfitting을 감소하는데 주 목적이 있어 학습을 가속화 하는 것에는 효과가 적었다.
- 학습이 빠르면 커다란 dataset에 유리하기 때문에 빠를수록 좋다.
Training on Multiple GPUs
- 학습에서 사용한 GTX 58 GPU는 3GB의 메모리만을 갖고 신경망의 학습하는 최대 크기를 제한한다.
- 120만개의 학습 예시를 충분히 학습하는 것은 신경망이 GPU로 학습하기에 너무 용량이 컸다.
- 그렇기 때문에 2개의 GPU를 사용하였다.
- 교차 GPU 병렬화를 통해 다른 메모리가 직접 데이터를 읽고 쓸 수 있다.
- 각 GPU에 신경망의 kernel 또는 neuron을 절반씩 입력한다.
- 같은 GPU에 있는 뉴런끼리만 정보를 주고 받을 수 있다.
- 최종적인 구조는 우리의 column이 독립적이지 않은 것을 제외하고 columnar CNN과 비슷하다.
Local Response Normalization(LRN)
- ReLU는 포화를 방지하기 위해 input을 normalization할 필요가 없다.
- 양수인 input이 ReLU를 통과하면 해당 뉴런에서 학습이 일어나기 때문이다.
- 하지만 local normalization은 일반화에 도움이 된다는 것을 발견했다.
bx,yi=(k+αΣj=max(0,i−n/2)min(N−1,i+n/2(ax,yj)2)βax,yi
ax,yi: (x,y) 위치에서 kernel i를 적용한 다음 ReLU를 지나 계산된 뉴런
bx,yi: 정규화된 활성화 함수
- 동일한 위치에 있는 n개의 인접한 kernel map에 걸쳐 합이 실행
- N은 계층의 총 kernel 수
- 실제 뉴런에서 발견되는 유형에서 영감을 받은 일종의 측면 억제를 구현하여 다른 kernel을 사용해 뉴런 출력 간에 큰 활동에 대한 경쟁 만듦
- k, n, α, β는 하이퍼 파라미터다.
- k=2, n=5, α=1e−4, β=0.75로 설정
- ReLU 직후에 정규화 진행
- 현재는 Batch Normalization 등 다른 기법으로 인해 거의 사용하지 않음
- Conv, Pooling Layer에서 특정 값이 주변 값보다 클 때 주변 픽셀에 영향을 미치게 되는데, 이러한 부분을 방지하기 위해 인접한 채널에서 같은 위치에 있는 픽셀 n개를 통해 정규화하는 방법
Overlapping Pooling
- Pooling Layer는 CNN에서 같은 kernel에서의 인접한 뉴런 그룹의 결과를 요약한다.
- 기존에는 겹치게 pooling을 진행하지 않았지만, stride 크기를 kernel 크기보다 작게 설정하여 겹치게 pooling 진행
Overall Architecture
- 가중치가 존재하는 layer 8개 존재
- 5개의 convolutional layer, 3개의 FC layer 존재
- 마지막에는 1000개의 softmax 계층 존재
- multinomial logistic regression objective를 최대화 한다.
- 학습 사례의 예측 분포에서 올바른 라벨의 로그우도의 평균을 최대화하는 것과 동일
- 첫번째 convolutional layer는 224*224*3 input을 11*11*3, stride=4, 96 kernel map을 통과시킵니다.
- stride size는 kernel map에서 인접한 neuron의 receptive field 중앙 사이의 거리다.
- normalization, pooling 진행
- 두번째 convolutional layer는 5*5*48 256 kernel을 사용한다.
- normalization, pooling 진행
- 3,4,5번째 convolutional layer 사이에는 normalization과 pooling을 거치지 않는다.
- 3번째: 3*3*256 384 kernel
- 4번째: 3*3*192 384 kernel
- 5번째: 3*3*192 256 kernel
- normalization, pooling 진행
- Fully Connected Layer는 4096 neuron 보유
Reducing Overfitting
Data Augmentation
- 오버피팅을 줄이는 가장 흔한 방법
- label을 유지하며 변형함으로써 인공적으로 dataset의 크기를 증가 시키는 방법
- 매우 간단한 변형만 수행하기 때문에 변형본을 따로 저장을 하지 않는다.
- GPU가 학습 할 동안, CPU가 데이터를 변형시키므로 계산자원은 필요하지 않다.
- Image Translations and Horizontal Reflection
- 무작위로 256*256 이미지에서 224*224 만큼을 추출한 후 수평으로 뒤집는다.
- Altering the intensities of the RBG channels
- training set을 통해 RGB 픽셀 값에 PCA를 실행했다.
- 각 training image에 찾은 주성분의 배수를 추가한다.
- 평균이 0이고 표준편차가 0.1인 정규분포에서 나온 무작위 변수와 고유값을 곱한 값에 비례한다.Ixy=[IxyR,IxyG,IxyB]TIxy=[IxyR,IxyG,IxyB]T+[p1+p2+p3][α1λ1+α2λ2+α3λ3]T
- pi와 λi는 RGB pixel 값의 3*3 공분산 행렬의 i번째 고유벡터와 고유값이다.
- αi는 무작위 변수인데, 그 이미지가 학습을 다시 진행할 때 까지 한번 추출하여 모든 pixel에 대해 사용하고 다시 학습할 때가 되면 다시 추출한다.
- 이 기법으로 중요한 특징들을 찾아내고 오류율을 1% 이상 줄인다.
Dropout
- 서로 다른 모델의 예측 여러 개를 조합하는 것은 test error을 줄이는 매우 성공적인 방법이지만 학습하는데 며칠이 걸리는 커다란 신경망에는 매우 비용이 많이든다.
- dropout은 학습 동안 두 개의 요인에 대해서만 비용이 드는 효율적인 모델의 조합 방법이다.
- 각 은닉층의 neuron을 0.5 확률로 0으로 설정하는 방법이다.
- 해당 뉴런들은 순전파와 역전파에 기여하지 않는다.
- 이는 매번 다른 구조의 신경망을 학습하지만 가중치는 공유한다.
- 특정 다른 뉴런의 존재에 뉴런이 의존할 수 없기 때문에 뉴런의 공동 적응을 감소시킨다.
- 그렇기 때문에 더욱 강건한 feature가 생성된다.
- 평가 시에는 예측 분포를 맞춰주기 위해 모든 뉴런을 사용하고 결과에 0.5를 곱한다.
- 첫 FC Layer에만 드롭아웃 적용
Details of Learning
- batch size 128, 모멘텀 0.9, 가중치 감소 0.0005로 SGD를 사용하여 모델을 학습했다.
vi+1=0.9vi−0.0005ηwi−η<∂w∂L∣wi>Diwi+1=wi+vi+1
- v는 모멘텀 변수, η는 학습률, <∂w∂L∣wi>Di는 경사이다.
- 평균이 0이고 표준편차가 0.01인 정규분포로부터 가중치는 초기화된다.
- 두 번째, 네 번째, 다섯 번째 convolution layer와 FC layer에서 편향을 상수 1로 초기화하고 나머지는 0으로 초기화
- 모든 계층에 동일한 학습률을 사용하고 학습을 통해 조정된다.
- 검증 오류율이 줄어들지 않으면 학습률을 10으로 나눠준다.
- 초기에는 0.01로 초기화되고 3번까지 감소시킨다.
- 90번 학습하였다.
Results