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

SimBa's avatar
Feb 08, 2025
[논문 리뷰] ImageNet Classification with Deep Convolutional Neural Networks
  • ILSVRC-2010 : top-1 error rate = 37.5%, top-5 error rate = 17.0%
  • ILSVRC-2012 : top-5 test error rate = 15.3%
  • 600,000,000개의 parameters, 650,000개의 neurons
  • 5개의 convolutional layers, 3개의 fully-connected layers, 1000-way softmax
  • GPU 사용, dropout 사용, non-saturating neurons 사용
 

1. Introduction

  • 기존의 성능 향상 방법
    • 더 많은 dataset 확보
    • more powerful model 학습
    • overfitting을 방지하기 위한 better techniques 사용
  • 지금까지 라벨링 되어 있는 dataset의 크기가 상대적으로 적었음 (수만장 정도) → label-preserving transformations로 data augmentation을 하면 그래도 간단한 인식 작업은 수행할 수 있었음 (ex. MNIST)
  • 하지만, 현실의 objects는 상당히 다르기 때문에, 이들을 인식하기 위해서는 훨씬 더 큰 training dataset이 필요함. → 22,000 카테고리가 넘고, 150,000,000 장이 넘는 라벨링된 dataset인 ImageNet이 등장
 
  • dataset이 커짐 → 용량이 더 커진 모델이 필요함
  • CNN의 용량(capacity) : depth나 breadth를 달리하면서 조절되고, 이미지의 특성(nature)을 추정하는데에 강한 성능을 보임
  • 따라서, 일반적인 feedforward neural networks와 달리, CNN은 훨씬 적인 connections와 parameters를 필요로 함 → 학습시키기 더 쉬움
  • 현재 GPU는 large CNNs들을 학습시키기에 용이했고, ImageNet과 같이 overfitting을 발생시키지 않고 model을 학습시킬정도의 충분한 라벨링된 dataset이 있음.
 
  • 이 논문에서 기여한 바
    • 가장 큰 CNN중 하나를 학습시켜서, ILSVRC-2010와 ILSVRC-2012에서 이전에 없던 성과를 만듦
    • 2D convolution과 CNN 훈련에 내재된 모든 다른 연산을 highly-optimized GPU를 구현한 것을 공개
    • 모델의 성능을 향상하고, 학습시간을 단축하기 위해 여러 새로운 방법을 사용
    • overfitting을 방지하기 위해 몇 가지 효과적인 기술을 사용
    • 5개의 convolutional layer와 3개의 fully-connected layer를 사용했는데, 여기서 하나의 convolutional layer를만이라도제거하면 성능이 떨어짐
 
 

2. The Dataset

  • ImageNet은 약 22,000개의 categories를 가진 1500만장 이상의 고해상도 이미지들의 dataset.
  • ILSVRC에서는 ImageNet의 부분집합인 1000개의 cateogory를 가진 약 120만장의 train images, 50,000개의 validation images, 150,000개의 testing images의 dataset을 사용.
  • top-1 error : “가장 가능성 높은 label ≠ 정답 label”의 비율
  • top-5 error : “가장 가능성 높은 5개의 label ≠ 정답 label”의 비율
  • ImageNet은 여러 해상도의 images들이 있었지만, 모델은 일관적인 input dimension을 필요로 함 → (256,256)으로 down-sampling하여 사용
    • 짧은 변의 길이가 256이 되도록 이미지를 재조정 → 결과 이미지에서 중앙 256×256 patch를 잘라냄
    • 픽셀에서 학습 세트의 평균 활동을 빼는 것 외에는 다른 방법으로 이미지를 전처리 하지 않음 (mean-centered)
    • 픽셀의 centered raw RGB 값을 기반으로 네트워크를 훈련
    • 💡
      [mean-centered]
      • 모든 이미지에서 특정 픽셀 (x,y)의 평균값을 각 픽셀 값에서 뺌 ( (픽셀값) - (평균값) )
      → mean-centered되고, 학습 알고리즘이 더 빠르고 안정적으로 수렴하는데 도움을 줌
      • normalization의 일환으로, 데이터를 평균 0에 가깝게 만들어, 모델이 데이터를 더 잘 이해하도록 도움
 
 

3. The Architecture

notion image
5개의 convolutional layer3개의 fully-connected layer로 구성되어 있음. 3.1 ~ 3.4에서는 이 network에서 사용된 새로운 방법들에 대해서 설명함.
 

3.1 ReLU Nonlinearity

  • 기존의 출력 함수 : tanh , sigmoid
notion image
문제점 : gradient descent
💡
[sigmoid와 gradient descent]
  • sigmoid의 도함수는 다음과 같음.
notion image
  • sigmoid의 출력값이 0 또는 1에 가까워질수록, 도함수가 0에 가까워짐 → 따라서, 업데이트 해야하는 가중치( (loss function을 w에 대해 1계 미분) * (sigmoid의 도함수) )가 0이 되어, 가중치 업데이트의 의미가 없어짐 → 학습 거의 멈춤
notion image
  • 따라서, 입력 값이 일정 범위를 넘어서면 출력 값이 포화 상태(즉, 거의 일정한 값으로 수렴)에 도달
→ 가중치 업데이트가 잘 되지 않는 문제 발생
  • 이러한, saturating nonlinearity(포화 비선형 함수)는 non-saturating nonlinearity보다 학습이 훨씬 느림
  • ReLU 함수
notion image
  • 기존의 tanh 함수와 비교
    • 4개의 convolutional layer로 CIFAR-10의 dataset을 가지고 비교
    • 25%의 error에 도달하기 때까지 ReLU가 tanh보다 6배 더 빨랐음
    • notion image
  • 이 연구 이전에 Jarrett et al 이 |tanh(x)| 을 사용하기도 했는데, 이는 overfitting 방지에 중점을 두었었기 때문에, training set에 대해 속도를 높이기 위한 이 연구와는 중점이 다르다.
  • Faster learning은 larger datasets를 훈련해야하는 large model에 어마어마하게 좋은 성능을 보인다.
 

3.2. Training on Multiple GPUs

  • 하나의 GTX 580 GPU는 3GB 메모리밖에 없음 → 훈련될 수 있는 network의 maximum 크기를 제한함
  • 따라서, 두 개의 GPU에 나눠서 학습시킴
  • 현재의 GPU는 GPU간 병렬화(cross-GPU parallelization)에 특화되 어 있음 (why? host machine memory를 거치지 않고 서로의 메모리에서 직접 읽고 쓸 수 있음)
    • 💡
      [cross-GPU parrallelization]
      • 단일 GPU가 아닌 여러 GPU가 데이터와 작업을 공유하여 병렬 처리 효율을 극대화하는 방식
      • GPU는 호스트 머신(CPU)에 연결되어 작동 → GPU가 데이터를 처리하려면 보통 CPU가 데이터를 준비하여 호스트 메모리(RAM)에서 GPU 메모리로 데이터를 전달 (GPU1 → 호스트 메모리(CPU를 통해) → GPU2)
      • 그러나!!!!
      → 현대 GPU는 Peer-to-Peer(P2P) 기술을 통해, GPU1이 GPU2의 메모리에서 직접 데이터를 읽고 쓰는 것이 가능
  • 각 GPU에 kernels(or neurons)를 절반식 배치 + 두 GPU 간의 communication은 특정 layer에서만 발생
    • : layer2의 모든 kernel map을 layer3가 받을 수 있지만, layer3의 모든 kernel map을 layer4가 받을 수는 없음 (GPU가 communication이 “layer2 → layer3”에서는 가능하지만, “layer3 → layer4”에서는 불가능 한 것)
  • multiple GPUs 를 사용하면 좋은 점
    • top-1 에러율을 1.7%, top-5 에러율을 1.2% 줄임
    • 훈련 시간 적어짐
 

3.3 Local Response Normalization

  • ReLU는 saturaing(포화)를 방지하게 위해 input normalization을 할 필요가 없다는 특징이 있음
  • 하지만, 아래와 같은 local normaliztion이 generaliztion에 도움을 줌
notion image
  • response normaliztion
    • 실제 뉴런에서 발견되는 측면 억제(lateral inhibition)에 영감을 받아 구현된 것으로, 서로 다른 커널을 사용해 계산된 뉴런 출력들 간에 높은 활성화 값을 놓고 경쟁을 유도
    • k, n, α, β는 하이퍼파라미터로, 그 값은 validation set를 사용하여 결정됨
    • 여기서는, k=2, n=5, α=10^-4, β=0.75
    • ReLU 비선형성을 적용한 후 특정 레이어에서 수행
    • 💡
      [lateral inhibition]
      • 생물학적 뉴런이 서로 억제하여 특정 뉴런의 활성화가 다른 뉴런에 영향을 미치도록 하는 메커니즘
      • (예) 특정 뉴런이 매우 활성화되면 다른 뉴런의 활성화는 억제
      → 모델이 과도한 활성화나 불균형을 방지하고, 뉴런 간 경쟁을 통해 학습 효율을 높이는 데 도움
      notion image
 

3.4 Overlapping Pooling

  • CNN에서의 pooling layer : 동일한 kernel map에서 이웃한 neurons들을 summarize함.
  • overlapping pooling
    • stride < pooling layer의 kernela size
    • → kernel이 이전 영역과 일부 중복된 상태로 이동
    • Overlapping pooling은 윈도우가 겹치면서 더 많은 정보를 고려하게 만드는 방식
  • 본 연구에서는 kernel size = 3, stride = 2 로 설정하여, overlapping pooling을 사용했을 때, kernel size = stride = 2 일때보다 top-1 error는 0.4%, top-5 error는 0.3% 감소되었다는 결과를 보임
  • overlapping pooling이 모델이 학습하는 동안 overfitting이 덜 발생되도록 함
 

3.5 Overall Architecture

  • 5개의 convolutional layer, 3개의 fully-connected layer
    • last fully-connected layer : 1000개의 class labels를 위한 1000-way distribution
    • network는 multinomial logistic regression(y가 3개 이상이며 nomial일 때 사용하는 로지스틱 회귀분석)의 목표를 극대화함 = 학습 동안 prediction distribution 하에서 정답 labvel의 log-probability의 평균을 극대화
  • 2,4,5번째의 convolution layer의 kernel : 동일한 GPU에만 연결되어 있음 (다른 GPU와의 communication 불가능)
  • 3번째의 convolution layer의 kernel : 2번째 conv layer의 모든 kernel과 연결되어 있음 (다른 GPU와의 communication 가능)
  • 모든 fully-connected layer의 neurons : 이전의 layer의 모든 neurons와 연결
  • Response-normalization layers : 1,3번째 conv layer 뒤에 옴
  • Max-pooling layers : 1,2,5번째 conv layer 뒤에 옴
  • ReLU : 모든 conv layer와 fully-connected layer 뒤에 옴
💡
[각 layer]
  • convolutional layer 1
    • input : (224, 224)
    • kernel : 96개, (11, 11, 3), strided = 4
  • convolutional layer 2
    • input : 1번째 conv layer에서 response-normalized되고 pooled된 결과
    • kernel : 245개, (5, 5, 48)
  • convolutional layer 3
    • input : 2번째 conv ayer에서 response-normalized과 pooled된 결과
    • kernel : 384개, (3, 3, 256)
  • convolutional layer 4
    • input : conv layer 3의 출력
    • kernel : 384개, (3, 3, 192)
  • convolutional layer 5
    • input : conv layer 4의 출력
    • kernel : 256개, (3, 3, 192)
  • fully-connected layer 1
    • input : conv layer 5의 출력에서 pooled괸 결과
    • output : 4096개의 neruons
  • fully-connected layer 2
    • input : fc layer 1 의 출력
    • output : 4096개의 neurons
  • fullt-connected layer 3
    • input : fc layer 2의 출력
    • output : 1000개의 출력 (클래스의 개수 : 1000 → 최종 output = 1000)
 
 

4. Reducing Overfitting

  • 6000만개의 parameters
  • overfitting을 해결하기 위한 두 가지 주요 방법
 

4.1 Data Augmentation

  • overfitting을 줄이기 가장 쉽고 흔히 쓰이는 방법 : label-preserving transformations를 이용해서 dataset을 인위적으로 늘리는 것
  • 본 연구에서 소개할 2가지 data augmentation
    • 둘 다 매우 적은 계산을 가지고 원래의 images로부터 transformed images가 생성되도록 함 → transformed images가 disk에 저장될 필요 X
    • transformed images는 CPU에서 Python 코드에 의해 만들어지고, training은 GPU에서 일어남 → 이 두 data augmentation 방법은 computationally free임. (어쨋든 GPU에 아무런 영향을 미치지 않으니까!)
  • generating image translations & horizontal reflctions
    • generating image translations : 이미지를 수평 또는 수직 방향으로 이동
    • horizontal reflections : 이미지를 수평으로 뒤집어서 대칭적인 형태로 변환
    • train : (256, 256) images에서 랜덤으로 (224, 224) patches → 각각을 horizontal reflections 시킴 → 그 결과들을 학습시킴
    • 효과
      • training dataset을 2048배로 증가 (하나의 이미지에서 2048장의 이미지를 얻을 수 있음)
      • augmentation의 결과물들은 기존의 images와 상호 연관성이 높음
    • test : 4개의 corner patches와 center patch에서 총 5개의 (224, 224) patches들을 추출 → 각각을 hprizontal reflction하여 총 10가지의 이미지를 얻음 → 10개의 이미지를 각각 softmax 적용 → softmax를 적용하여 얻은 predictions 값의 평균으로 최종 label 결정
  • training images에서 RGB channel의 intensity(강도) 바꿈 -
    • RGB 픽셀 값에 PCA를 적용 (PCA : 주성분 분석은 고차원의 데이터를 저차원의 데이터로 환원시키는 기법)
    • 이미지의 주성분에 배수를 더함
      • 더하는 값 : 각 주성분에 해당하는 eigenvalue와 비례하며, 이 크기에는 N(0, 0.1)인 가우시안 분포에서 추출된 임의의 값이 곱해집니다.
      • 각각의 RGB 이미지 픽셀에서 더할 값은 아래 사진과 같음.
      • notion image
      • p_i : (3, 3) RGB 픽셀의 convariance matrix의 i번째 eigenvector
      • lambda_i : (3, 3) RGB 픽셀의 convariance matrix의 eigenvector
      • a_i : N(0, 0.1)에서 추출된 임의의 값 (한 번 추출되고, 이는 모든 픽셀에 대해 해당 image가 학습이 한 번 끝날때까지 재사용 됨)
    • 효과 : natural images의 중요한 특성을 파악할 수 있음 (조명의 강도와 색상에 따라 변하지 않는 특성을 파악할 수 있음)
    • top-1 error을 1% 낮춤
    •  

4.2 Dropout

  • 다른 모델들의 predictions들을 합치는 것은 test error를 성공적으로 줄임 → 하지만, 학습하는데 며칠이 걸리는 big neural networks에서는 너무 비용이 많이 듦
  • 하지만, 학습하는데 2일만 걸리는 model combination의 방법을 제안하겠음 → 그것이 바로 “Dropout
  • Dropout : 0.5의 확률로 hidden neurons의 출력값을 zero(0)으로 설정
    • 0을 출력한 neuron은 forward pass로 넘어가지 않으며, back propagation에도 참여하지 않음
    • 따라서, 매번 input에 따라 다른 architecture이 형성됨.
  • 효과
    • 뉴런이 특정한 다른 뉴런에 의지하지 않음 → neurons의 복잡한 co-adaptions을 줄임 (co-adaption : 특정 뉴런의 가중치나 바이어스가 큰 값을 갖게 되면, 그 특정 뉴런의 영향이 커지면서 다른 뉴런들의 학습 속도가 느려지거나 학습이 제대로 진행되지 못하는 경우)
    • 뉴런의 random한 다양한 부분집합으로 학습됨 → 유용한 더 강력한 특징을 학습하게 됨
  • test 단계에서는 모든 neurons를 사용하지만, 출력값이 0.5를 곱함
  • 본 연구에서는 fc layer 1,2에서 dropout을 사용
 
 

5. Details of learning

  • optimizer : stochastic gradient descent (mini-batch를 사용한 gradient descent)
  • batch size = 128
  • momentum : 0.9
  • weight decay = 0.0005 (weight decay가 작은 것이 모델이 학습할 때 중요)
    • weight update rule
    • notion image
    • i : 반복 횟수
    • v : momentum variable
    • 앱실론 : learning rate
    • < >D_i : i번째 batch에서 w에 대해 미분한 D_i의 평균
  • weight initialization : N(0, 0.1)
  • bias initialization
    • 2, 4, 5 convolutional layer와 fc layer → 1 ( ReLU에 양수 input을 넣어서 학습을 accelerate하기 위함)
    • 1, 3 convolutional layer → 0
  • initial learning rate : 0.01
    • initial learning rate는 모든 layer에 동일
    • 훈련 내내 수동으로 조정 : 휴리스틱은 현재 학습률에 따라 검증 오류율이 개선되지 않을 때 학습률을 10으로 나눔 → 학습 종료까지 3번 감소
  • epoch : roughly 90
  • training set : 120만 images
 
 

6. Results

  • ILSVRC-2010
    • top-1 error : 37.5%
    • top-5 error : 17.0%
  • ILSVRC-2012
    • 마지막 pooling layer 위에 6번째 convolutional layer 추가 → 학습 → fine-tunig
    • error rate = 16.6%
    • 2개의 CNN의 predictions를 평균냄 → error rate = 15.3%

6.1 Qualitative Evaluations

notion image
  • 위와 같이 첫 번째 convolutional layer 에서는 96개의 kernels 중에서 위의 48개는 GPU1(color-agnostic), 아래의 48개는 GPU2(color-specific)에서 학습 시작
notion image
  • mite 그림 : object가 center에 위치하지 않아도 인식할 수 있음
  • leopard 그림 : cat와 유사하지만, cat가 아닌 leopard라고 정확히 인식
notion image
  • 두 이미지가 유클리드 간격이 작은 특징 활성화 벡터를 생성한다면, 신경망의 상위 레벨이 유사하다고 간주
  • 개와 코끼리 그림 : 다양한 포즈로 사진이 제시되어 있음 → 일반적으로 train image에서 첫 번째 열의 쿼리 이미지와 L2에서 가깝지 않음
  • 두 개의 4096차원 실수 값 벡터 사이의 유클리드 거리를 사용하여 유사성을 계산하는 것은 비효율적이지만, auto-encoder를 훈련시켜 이러한 벡터를 짧은 이진 코드로 압축함으로써 효율적으로 만들 수 있음
Share article

심바