본문 바로가기
Reading

[DL] AlexNet : ImageNet Classification with Deep Convolutional Neural Networks

by tbr 2024. 1. 10.

‘ImageNet Classification with Deep Convolutional Neural Networks’


Abstract

성과

  • ImageNet의 120만 개의 높은 해상도 이미지를 분류하기 위한 대회에서 AlexNet은 뛰어난 성과를 보임.
  • LSVRC-2010 :  top-1 error rate 37.5%, top-5 error rate 17.0%,
  • LSVRC-2012 :   top-1 error rate(validation set) 36.7%, top-5 error rate 15.3%

구조 요약

  • AlexNet은 총 8개의 레이어로 구성되어 있다
  • 5 convolutional layer (with max-pooling layer)+ 3 fully-connected layers + final 1000-way softmax 

* nonsaturated neurons 이란?
어떤 입력 x가 양의 무한대로 증가할 때, 함수의 값이 무한대로 가는 것이며, non-saturating nonlinearity fuction의 대표적인 예가 ReLU이다.
 
* softmax란?
활성화 함수(activation function) 중 하나인 소프트 맥스 함수는 다중 클래스 분류 모델을 만들 때 사용된다.
출력층에서 fc layer? 와 함께 사용되며, 결과를 확률 값으로서 해석할 수 있게 변환해준다.
높은 확률을 가지는 class로 분류하여 나타낸다. 즉 결과값을 정규화하는 것으로 생각할 수 있다.
 
*활성 함수가 뭔데?
모델의 복잡도를 높히는 것
https://nittaku.tistory.com/267
 
본 논문에서 이루고자 했던 것
1. to make training faster
  1) non saturated neurons
  2) 2 GPU 
2.  to reduce overfitting in fc layers
  1) dropout



1. Introduction

한계 제시

  • 과거의 수만 장 정도로 적은 양의 dataset으로는 실제 사물 이미지를 인식하고 분류하기에는 한계가 있고, 더 큰 규모의 dataset을 가지고, 더 강력한 모델과 기술로 오버피팅을 예방해야 함.

 

ImageNet의 등장

  • 22,000개의 카테고리에 1500만장이 넘는 고해상도 labeled image dataset의 등장
    - 오버피팅을 줄이기 위한 / realistic 한 setting을 위한 대안으로 huge 데이터가 필요한데 imageNet 등장
     

커진 dataset을 감당하고 더 많은 데이터를 학습시키기 위해,

large learning capacity를 가지는 모델이 필요

CNN model을 사용한 이유

  • CNN은 depth나 breadth을 바꾸면서 조절이 가능하고, 이미지를 정확히 인식하는 데에 성능이 우수함. 또한, 일반적인 feedforward network와 다르게 더 적은 connection과 파라미터를 갖기 때문에 학습이 쉬움.
  • CNN은 큰 규모의 고해상도 이미지를 적용하기에는 굉장히 비싸지만, lucky하게 현 GPU는 큰 CNN을 학습시키기에 충분히 강력함. + recent datasets (ImageNet) contain enough labeled examples to train such models without 'overfitting'

 
본 논문에서 기여한 5가지
1. large CNN 중 하나를 학습하여 대회에서 뛰어난 성과를 낸 점
2. highly optimized GPU을 활용하여 2D convolution의 implementation과 CNN을 학습하는 방식을 공개한 점
3. training 시간을 단축할 새롭고 unusual한 구조를 사용한 점
4. 큰 크기로 인한 overfitting 문제를 다양한 방법으로 예방한 점
5. 5개의 convolution layer와 3개의 fully-connected layer 중 하나라도 없으면 성능이 확연히 떨어지는 점

즉, 모든 레이어가 중요한 역할을 수행하고 있음. depth is important
 
* 논문에 제시된 GPU를 사용하기 때문에, 8개의 layer로 구성되어 있으며, GPU 발전에 따라 성능이 향상될 여지가 충분함.



2. The Dataset


ImageNet 이란?
22,000가지의 카테고리로 나뉘며, 1500만장 이상의 고해상도 이미지 dataset

ILSVRC 대회에서는 ImageNet 카테고리 중 1000가지를 사용하였고,

120만장의 training 데이터, 5만 장의 validation 데이터, 15만장의 testing 데이터로 구성됨.
 
Error Rate

ImageNet에서는 일반적으로 두 가지 종류의 Error Rate를 사용

  1. top-1 error: top-1 class가 실제 class와 같다면 top-1 error는 0%
  2. top-5 error: top-5 class 중 실제 class와 같은 게 있다면, top-5 error는 0% 

* ImageNet 대회에서는 top-5 error 5%이하가 되면 분류를 잘 했다고 볼 수 있음
 

Down-sampled Image

ImageNet은 여러 해상도의 이미지들로 구성되어 있지만, CNN model은 일정한 차원의 입력을 필요로 함.

 

어떻게 이미지를 자르는가?

1) 이미지의 가로, 세로 중 짧은 쪽을 256 pixel로 scaling
2) 나머지는 이미지의 중심 기준 256*256 으로 cut

 
*일반화 성능을 향상시키기 위해, 각 픽셀에서 mean activity를 빼서 각 픽셀을 centerize함.

이외 다른 전처리 과정은 없음.

 



3 The Architecture


Network 구성

 

5 convolutional layers + 3 fully-connected layers = 8 learned layers

 

 

 

 

 

Network architecture에 사용된 여러 방법들을 중요도 순으로 소개하고 있다.

 



3.1 ReLU Nonlinearity (Rectified Linear Unit)

ReLU를 사용한 4 conv neural network는 tanh 함수를 사용한 네트워크보다 6배 빠르게 0.25 training error rate에 도달

ReLU(Solid) -  tanh(Dash)

  • Dash Line : f(x) = tanh or sigmoid  = 일반적인 뉴런의 출력 함수
    • 하지만 해당 activation function(활성 함수)는 gradient descent 방법으로 학습 시, saturated되어 학습 속도를 저하시킴.
  • Solid Line : f(x) = max(0,x) = 본 논문에서 제시한 대안  
    • ReLU function : 어떤 x가 0보다 크면 x 출력, 0보다 작으면 0 출력
  • 위 그래프를 보면, 같은 Training error rate에 대하여 ReLU(Solid) 를 사용했을 때, 더 적은 Epochs 값을 가진다는 것을 알 수 있으며, saturated 속도가 개선된다는 것을 확인할 수 있다. 

 

  • 타 논문에서 nonlinearity로 f(x) = |tanh(x)|를 채택
    • 이는 overfitting을 방지하기 위함이며, 본 논문에서 ReLU를 사용하는 이유는 overfitting보다 performance, 즉 수렴 속도를 가속하여 학습 속도 저하를 방지하는 측면을 고려했기 때문임. ( Fasting learning -> high performance)

 



3.2 Training on Multiple GPUs

 

GPU 메모리 크기의 한계

GTX 580 GPU는 3GB 메모리를 가지기 때문에, 120만장의 training 이미지를 학습하기에 어려움.

+ 학습하는 네트워크의 최대 크기를 제한함.


-> 하나의 network를 두 개의 GPU에 나누어 할당하여 학습한다.

 


cross-GPU parallelization

  • 커널을 반으로 나누어 각각의 GPU에 할당
  • 두 개의 GPU 간의 communication은 특정 레이어들에서만 발생하도록 함.
    • layer 3 에서는 layer 2의 모든 커널 맵을 받아올 수 있지만, layer 4는 같은 GPU에 할당된 입력만을 받을 수 있게 함.

(부장님의 허락을 받지 않고 팀원끼리 커뮤니케이션 가능하다는 의미....)

  • 어떤 레이어에서 어떤 패턴으로 입력을 주고 받고 연결되는지를 결정하는 것이 관건 - 어렵지만 하면 좋아진다
  • 결과적으로 보면, columnar CNN 이랑 유사한데 열이 독립적이지 않다는게 AlexNet 시스템의 특징

Multiple GPUs 활용에 따른 성과

  • 하나의 GPU를 활용하는 경우보다 top-1 & top-5 error rates 를 1.7%, 1.2% 줄였으며, 학습 시간 또한 조금 단축

 



3.3 Local Response Normalization

요즘은 Local Response Normalization보다 Batch normalization을 더 많이 쓴다고 함.


Input normalization이 필요하지 않은 ReLU
ReLU는 saturating을 방지하기 위한 인풋 정규화가 필요하지 않다는 장점을 가짐

 

그래도 일반화에 도움이 되는 Local Normalization

  • ReLU 함수에 양수의 입력 값이 들어왔을 때, 그대로 출력하게 됨
  • 상대적으로 큰 양수 값이 출력되면, 그로 인한 강한 자극이 주변의 작은 자극의 세기를 줄이기 된다.
  • implement the 'lateral inhibition' = 측면 억제

측면 억제란?

신경 생리학 용어로, 한 영역에 있는 신경 세포가 상호간 연결되어 있을 때, 중간 신경세포를 통해 이웃 신경 세포를 억제하려는 경향이다.

-> 헤르만 격자를 보자.

Lateral Inhibition : 헤르만 격자

 

 

상수 k,n,α,β은 hyper-parameter 값이며, 본 논문에서는 k=2, n=5, α=0.0001, β=0.75로 설정

 

  • 검은 사각형 안에 흰 선이 지나가고 있음- 흰색 선에 집중하지 않을 때 회색 점이 보이는 것이 측면 억제에 의한 현상
  • 즉 흰색으로 둘러싸인 측면에서 억제를 발생시키기 때문에 흰색이 반감되어 회색으로 보이는 것
  • Jarrett et al의 논문과 비교했을 때, local contrast normalization 측면에서 유사한 점이 있지만, 'brightness norm'에서 mean activity를 substract하지 않기 때문에  본 논문이 더욱 우수하다고 평가

왜 측면억제를 사용하나 ? ReLU 때문

  • a^i_(x,y): i번째 커널의 (x,y) 위치의 출력이 ReLU를 통과한 값
  • 양수의 입력을 그대로 사용하는 ReLU의 경우 conv / pooling 을 했을 때, 상대적으로 매우 높은 픽셀 값이 주변에 영향을 미침. - 다른 활성 맵에 있는 같은 위치의 픽셀끼리 '정규화' 적용
  • 만약 a^i_(x,y) 값이 상대적으로 큰 양수 값이라면, 같은 위치의 다른 커널 맵의 값을 가져와서, β 제곱을 한 뒤 나누어졌을 때, 비교적 영향을 많이 받아 작아질 것
  • 큰 양수 값을 더 많이 줄여 큰 값으로 인한 자극이 주변에 주는 영향을 최소화

 

Local Response Normalization 활용에 따른 성과

  • 정규화를 수행하지 않는 것보다 top-1 & top-5 error rates 를 1.4%, 1.2% 줄임
  • CIFAR-10 dataset에 대해서도 정규화를 수행했을 때 error rate를 2% 줄임


3.4 Overlapping Pooling

  • CNN에서의 pooling layer는 같은 커널 맵에서의 이웃 뉴런들의 summary 제공
  • 보통 pooling layer는 overlap하지 않음
    • pooling layer의 kernel 사이즈 = z
    • pooling layer의 stride 사이즈 = s  
      • s=z 이면, 일반적인 overlap하지 않는 pooling layer
      • s<z 이면 overlapping pooling layer 
    • 본 논문에서는, z=3, s=2로 하여 overlapping pooling layer로 구성하여 overfitting을 방지함

이미지 출처: https://bskyvision.com/421

Overlapping pooling 활용에 따른 성과

  • non-overlapping pooling layer보다 top-1 & top-5 error rates를 0.4%, 0.3% 줄임


3.5 Overall Architecture

 

Network 구성

  • 5 convolutional layers + 3 fully-connected layers = 8 learned layers with weights

Layer Connection

  • 2nd, 4th, 5th conv layer : r같은 GPU 안에서만 연결
  • 3rd conv layer : 2nd layer의 모든 커널 맵과 연결
  • fc layer : 이전 layer의 모든 뉴런과 연결
  • Response-normalization layer : 1st, 2nd conv layer 뒤에 위치
  • Max-pooling layer: 1st, 2nd, 5th conv layer뒤에 위치
  • ReLU: 모든 conv layer와 fc layer 뒤에 위치

 

Layer 별 출력

https://cocosy.tistory.com/45

1. Conv layer1: 227x227x3의 입력 이미지를 11x11x3 크기의 stride가 4인 96개의 커널로 출력합니다.

zero-padding?

 

컨볼루션으로 인해 특성맵(Feature map)의 사이즈가 축소되는 것을 방지하기 위해, 또는 축소되는 정도를 줄이기 위해 영상의 가장자리 부분에 0을 추가하는 것

((227-10) / 4 = 54.24, 올림처리하면 55

55*55*96(filter 수)

 

2. Conv layer2: conv layer1의 출력을 response-normalize, pooling을 거치고 5x5x48 크기의 256개의 커널로 출력합니다.

 

3. Conv layer3: conv layer2의 출력을 response-normalize, pooling을 3x3x256 크기의 384개의 커널로 출력합니다.

 

4. Conv layer4: conv layer3의 출력을 3x3x192 크기의 384개의 커널로 출력합니다.

 

5. Conv layer5: conv layer4의 출력을 3x3x192 크기의 256개의 커널로 출력합니다.

 

6. FC layer1: conv layer5의 출력을 pooling을 거치고 4096개로 출력합니다. 

 

7. FC layer2: fc layer1의 출력을 4096개로 출력합니다.

 

8. FC layer3: fc layer2의 출력을 1000개로 출력합니다.

 


4. Reducing Overfitting

 

  •  AlexNet은 6000만 개에 달하는 parameters를 가짐
  • 10비트 제약 조건을 주는데도 불구하고 오버피팅을 방지하기엔 충분하지 않다
    즉, 샘플 당 정보량이 파라미터 수에 비해 적은 것 

Overfitting을 방지하기 위한 두 가지 방법 소개
 


4.1 Data Augmentation


가장 쉬운 방법 : 데이터 수 증가시키기

즉, label-preserving transformations을 이용한 dataset을 인위적으로 크게 하는 것

 

*label-preserving transformations란?
원본 데이터 특성을 보존하면서 조금씩 다른 여러 개를 만들어내는 것

ex) 6/9 flip했을 때도 각각 label 되어 구분 가능 하도록 함.

  • CPU 가 transformed 이미지 만드는 동안 GPU는 만들어놓은 이미지를 training하고 있음
    => GPU는 아주 조금의 계산만 하면 되니까 똑같이 만드는 이미지도 디스크에 저장될 필요 없음
  • Computationally free

 

논문에 제시된 2가지 Augmentation 

 

1) Image translations + horizontal reflection


1. 227*227 pixel의 이미지를 네 군데의 코너와 중앙의 이미지를 crop하여 5개 이미지 추출


2. RandomHoriaontalFlip으로 좌우 반전 시켜서 총 10개 이미지를 추출

 

3. 각각의 이미지로부터 얻은 softmaxx 값의 평균으로 최종 label을 결정하여 총 11개

 

즉, training set의 크기를 2^11(=2048) 만큼 증가시키는 것


 
2) 학습 이미지에서 RGB 채널의 강도를 바꾼 것

  • 본 논문에서는 RGB 픽셀 값에 PCA 적용
    • PCA란?
      식 값을 각각 RGB 이미지 픽셀에 더함
    • p_i와 λ_i는 3x3 RGB 픽셀의 covariance matrix의 i번째 eigenvector(고유벡터)와 eigenvalue(고유값)
    • α_i는 평균이 0이고 표준편차가 0.1인 가우시안에서 추출한 랜덤 변수
    • RGB 각각의 고유값( λ_i )에 랜덤 변수( α_i )를 곱하여 만들어냄
      -> important property of natural images를 capture한 다음에 바꿔낼 수 있다* 
    • 즉 높은 차원의 값을 PCA를 통해 데이터 차원을 낮춘다

PCA

1) N차원의 데이터로부터 Covariance matrix를 생성한다.

2) 생성된 covariance matrix에서 N개의 Eigenvector, Eigenvalue를 찾는다. 

3) 찾은 Eigenvector를 Eigenvalue가 큰 순서대로 정렬한다.

4) 줄이기 원하는 차원 개수만큼의 Eigenvector만 남기고 나머지는 쳐낸다.

5) 남은 Eigenvector를 축으로 하여, 데이터의 차원을 줄인다. 

https://ddongwon.tistory.com/114

 

Data Augmentation 활용에 따른 성과

  • top-1 error rates를 1% 줄임

4.2 Dropout


선택과 집중을 통한 학습 시간 단축

 

Dropout이란?

은닉층(hidden layer)의 neuron에서 발생하는 출력을 0.5의 확률로 0으로 하는 것

  • dropout 되어 0으로 출력된 뉴런은 역전파( back-propagation)에 관여하지 않음
  • 매 입력마다 활성화되는 뉴런이 달라지며, 뉴런 사이에 복잡한 상호 연계성(co-adaptation)을 줄여서 여러 뉴런 사이의 조합에서 확실한 특징만을 학습할 수 있게 함
  • test 단계에서는 모든 뉴런의 출력값을 사용하되, 0.5를 곱하여 사용
  • dropout이 없으면 fc layer의 overfitting이 상당하기에, 1st, 2nd fc layer 뒤에 적용

*back-propagation
출력층에서 입력층으로 거꾸로 이동하면서 가중치를 업데이트함으로써 오차를 줄여나가는 것

 


*dropout doubles the num of iterations required to converge
본 논문에서는 iteration 수렴하기 위해서는 dropout은 iteration 수를 두 배로 늘린다.

  • 절반의 데이터를 버리는 것이 아닌, 데이터가 들어가는 입구를 반으로 만드는 것이기 때문에, 데이터 개수는 바뀌지 않으며 dropout을 두 번 시행하는 것

* 병렬로 연결되어 있는데 문의 개수가 줄어든 것 - 0.5의 확률 즉 문의 개수가 절반이 되었는데, 데이터의 개수는 바뀌지 않았으므로 50명씩 4개문으로 들어갈 거를 100명씩 2개 문으로 들어가는 거나 마찬가지 - 즉 두 배

출처 https://hyen4110.tistory.com/13

 

[딥러닝][기초] 과적합(Overfitting)과 규제(Regularization)

1. 딥러닝 모델에서는 과적합(Overfitting)이 필요하다 - 딥러닝 모델은 일반적으로 최대한 오버피팅을 시킨 후 규제 등을 통해 오버피팅을 해결해나갑니다. 근데 왜 꼭 그렇게 해야만할까요? 처음

hyen4110.tistory.com


5. Details of learning

training에 관련된 hyper-parameters와 weight 및 bias 초기화 방법 소개

  • Optimizer: Stochastic Gradient Descent
  • Batch size: 128
  • Momentum: 0.9
  • Weight decay: 0.0005
  • Weight initialization: Gaussian distribution of μ=0, σ=0.01
  • Bias initialization: 2nd, 4th, 5th conv layers, fc layers -> 1 / 1st, 3rd conv layers -> 0
  • Initial learning rate: 0.01
  • Epochs: roughly 90

 

  • weight decay은 Regulatioin 뿐만 아니라 모델의 training error을 줄이는 데에도 사용
  • 가중치(weight) 업데이트 식
    Initialization
  • weight : 평균 0 표준편차 1 Gaussian distruvution으로 초기화
  • 2nd, 4th, 5th conv + fc layers 모두 Bias를 1로 초기화하여 ReLU에 양수가 들어가게 하여 학습을 가속시킴
  • learning rate는 0.01에서 시작되고, 모든 layer에 대해 공통적으로 적용되나, 현재 learning rate에서 validation error가 개선되지 않는다면 현재 learning rate를 10으로 나눔. 그 결과 학습 종료까지 3번 반복되며 감소

 

  • 120만 이미지를 학습하는데에 90번의 순환을 하게 되고, 5-6일 소요
     

6. Results

 

ILSVRC-2010 결과

ILSVRC-2010 결과


6.1 Qualitative Evaluations

위: GPU1 / 아래: GPU2

두 개의 GPU1/2에 나뉘어 학습된 convolutional 커널을 보여줌

(위)    kernels of GPU1 = color-agnostic 
(아래) kernels of GPU2 = color-specific


모든 시행마다 이러한 specialization(특성화)과정이 일어난다
+ random weight initialization이랑은 독립적이다 별개다 - weight dacay, reduce training error


좌측 표) top-5 preidiction을 computing하고 실제 키워드를 빨강으로 표시하여 나타낸 것
ex) mite의 경우, 중심에서 벗어난 위치( off- center object )에 있음에도 불구하고 맞힘.
ex) 체리 등은 사진의 의도된 포커스가 애매
 
우측 표)

  • 첫번째 열이 test image이고, 우측의 나머지 열인 training 이미지로 만들어낸 feature vec(last hidden layer에 있는)가 테스트 이미지와의 유클리디언 거리가 가장 작음
  • pixel 레벨에서는 training image가 not close in L2* to the query images(test image) in first col. 별로 비슷해 보이지 않는다
  • ex) 코끼리 등 포즈가 다른데, 기하학적으로 잰 유클리디언 separation은 작다 = 그리드 내에 있는 대략적인 위치가 비슷한 것
  • 그런데 유클리드 거리를 이용하고 실제 벡터 데이터를 활용해서 similarity를 computing하는 것은 비효율적이지만, training an auto-encoder로 압축해서 binary code로 만들면 효율적이게 됨.

-> 좀더 나은 image retrieval method 이미지 복원 방법

  • 왼쪽 사진처럼 이미지 라벨에 구애받지 않고 사진과 사진 자체를 비교해서 비슷한지를 확인하는 것

7. Discussion

  • Middle layers를 하나라도 없애면 top-1 performance가 2% 감소한다 = 성과를 이루는 데에 Depth가 정말 중요한 요소
  • 실험을 간단히 하기 위해 unsupervised pre-training 을 하지 않음

한계

  • 네트워크를 크게, 트레이닝 길게 했음에도 불구하고, 인간 시각 시스템의 시공간적 pathway와 일치하기 위해서는 갈 길이 멀다

 

지향점

  • 궁극적으로 아주 크고 deep한 convolutional nets on video sequence에 사용하고 싶음