[논문 리뷰] ImageNet Classification with Deep Convolutional Neural Networks

권유진·2022년 6월 19일
0

논문 리뷰

목록 보기
2/17
post-custom-banner

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)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=ax,yi(k+αΣj=max(0,in/2)min(N1,i+n/2(ax,yj)2)βb_{x,y}^i = \cfrac{a_{x,y}^i}{(k + \alpha \Sigma_{j=max(0,i-n/2)}^{min(N-1, i+n/2} (a_{x,y}^j)^2)^\beta}
      ax,yia_{x,y}^i: (x,y) 위치에서 kernel ii를 적용한 다음 ReLU를 지나 계산된 뉴런
      bx,yib_{x,y}^i: 정규화된 활성화 함수
    • 동일한 위치에 있는 n개의 인접한 kernel map에 걸쳐 합이 실행
    • N은 계층의 총 kernel 수
    • 실제 뉴런에서 발견되는 유형에서 영감을 받은 일종의 측면 억제를 구현하여 다른 kernel을 사용해 뉴런 출력 간에 큰 활동에 대한 경쟁 만듦
    • kk, nn, α\alpha, β\beta는 하이퍼 파라미터다.
      • k=2k=2, n=5n=5, α=1e4\alpha=1e-4, β=0.75\beta=0.75로 설정
      • ReLU 직후에 정규화 진행
  • 현재는 Batch Normalization 등 다른 기법으로 인해 거의 사용하지 않음
  • Conv, Pooling Layer에서 특정 값이 주변 값보다 클 때 주변 픽셀에 영향을 미치게 되는데, 이러한 부분을 방지하기 위해 인접한 채널에서 같은 위치에 있는 픽셀 n개를 통해 정규화하는 방법

Overlapping Pooling

  • Pooling Layer는 CNN에서 같은 kernel에서의 인접한 뉴런 그룹의 결과를 요약한다.
  • 기존에는 겹치게 pooling을 진행하지 않았지만, stride 크기를 kernel 크기보다 작게 설정하여 겹치게 pooling 진행
    • s=2s=2, z=3z=3

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]TI_{xy} = [I_{xy}^R, I_{xy}^G, I_{xy}^B]^T\\ I_{xy} = [I_{xy}^R, I_{xy}^G, I_{xy}^B]^T + [p_1 + p_2 + p_3][\alpha_1 \lambda_1+\alpha_2 \lambda_2+\alpha_3 \lambda_3]^T
  • pip_iλi\lambda_i는 RGB pixel 값의 3*3 공분산 행렬의 ii번째 고유벡터와 고유값이다.
  • αi\alpha_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.9vi0.0005ηwiη<Lwwi>Diwi+1=wi+vi+1v_{i+1} = 0.9v_i - 0.0005 \eta w_i - \eta <\cfrac{\partial L}{\partial w}|_{w_i}>_{D_i}\\ w_{i+1} = w_i + v_{i+1}
  • vv는 모멘텀 변수, η\eta는 학습률, <Lwwi>Di<\cfrac{\partial L}{\partial w}|_{w_i}>_{D_i}는 경사이다.
  • 평균이 0이고 표준편차가 0.01인 정규분포로부터 가중치는 초기화된다.
  • 두 번째, 네 번째, 다섯 번째 convolution layer와 FC layer에서 편향을 상수 1로 초기화하고 나머지는 0으로 초기화
  • 모든 계층에 동일한 학습률을 사용하고 학습을 통해 조정된다.
    • 검증 오류율이 줄어들지 않으면 학습률을 10으로 나눠준다.
    • 초기에는 0.01로 초기화되고 3번까지 감소시킨다.
  • 90번 학습하였다.

Results

  • 기존 오류율보다 대폭 감소하였다.
profile
데이터사이언스를 공부하는 권유진입니다.
post-custom-banner

0개의 댓글