[논문 리뷰] ImageNet Classification with Deep Convolutional Neural Networks
0. Abstract
ImageNet LSVRC-2010 이미지 분류 대회에 출품한 AlexNet에 대한 논문입니다. AlexNet은 120만 장의 이미지로 이루어진 ImageNet 데이터셋을 1000개 클래스 중 하나로 분류하는 CNN 모델로, 2010년 기준 SoTA보다 뛰어난 37.5%, 17.0%의 top-1, top-5 에러율을 달성했습니다.
모델은 6천만 개의 파라미터, 65만 개의 뉴런, 5개의 컨볼루션 층, 3개의 완전 연결 층, 1000-way 소프트맥스 함수로 구성되어 있습니다. 또한 “dropout” 기법을 통해 과적합을 방지했습니다. (dropout은 아래에서 설명하도록 하겠습니다)
- Top-1 Error & Top-5 Error
Top-1 Error는 모델이 예측한 확률이 가장 높은 클래스와 실제 정답 클래스가 일치하지 않는 비율을 의미합니다. 모델의 정확도를 가장 직관적으로 나타내는 지표로, 일반적으로 모델의 성능을 평가할 때 가장 먼저 참고하는 값입니다.
하지만 ImageNet과 같이 클래스 수가 많고 서로 유사한 클래스가 존재하는 데이터셋에서는 Top-1 Error만으로 모델의 성능을 온전히 평가하기 어려울 수 있습니다. 왜냐하면 모델이 비록 정답은 아니지만 정답과 매우 유사한 클래스를 예측했다 하더라도, Top-1 Error에서는 이를 단순히 오분류로 처리하기 때문입니다.
이런 문제를 보완하기 위해 도입된 것이 바로 Top-5 Error입니다. Top-5 Error는 모델이 예측한 상위 5개의 클래스 중에 실제 정답 클래스가 포함되어 있지 않은 비율을 의미합니다. 예를 들어, 정답 레이블이 X인 이미지에 대해 모델이 A, B, C, D, X 순으로 높은 확률을 부여했다면 X가 가장 높은 확률로 예측되진 않았지만 상위 5개 예측에 포함되어 있으므로 정답으로 간주되는 것입니다.
Top-5 Error는 ImageNet과 같이 유사한 클래스가 많은 데이터셋에서 특히 유용한데, 모델이 세부적인 클래스 구분에는 실패하더라도 대략적인 분류는 성공하고 있음을 보여줄 수 있기 때문입니다.
1. Introduction
이때까지만 해도 Caltech-101/256, CIFAR-10/100 데이터셋처럼 크기가 작은 데이터셋이 많았기 때문에 간단한 인식 태스크는 나름 괜찮은 성과를 거두었습니다. 실제로 MNIST 숫자 인식 태스크에서는 인간 수준의 성능(< 0.3% error)을 나타내기도 했죠.
하지만 주변을 둘러보면 종이, 핸드폰, 시계 등 다양한 물체가 있다는 것을 알 수 있습니다. 이처럼 객체 인식은 높은 복잡성을 요구하기 때문에 ImageNet과 같은 대규모 데이터셋조차도 이 문제를 완벽하게 정의하기에는 충분하지 않습니다. 따라서, 부족한 데이터를 보완하기 위해 사전 지식을 많이 포함하고 있는 모델이 필요합니다.
이러한 문제를 해결할 수 있는 것이 CNN입니다. 기존에 사용하던 FNN(Feedforward Neural Network)보다 더 적은 수의 커넥션과 파라미터가 필요하기 때문에 학습이 쉽다는 장점이 있습니다. (물론 최고 성능은 FNN보다 약간 떨어진다는 단점도 있습니다.)
- 참고
논문에서는 2개의 GTX 580 3GB GPU를 사용해 5-6일 동안 모델을 학습했다고 합니다. 현존하는 가장 좋은 GPU인 RTX 5090 GPU를 사용한다면 약 4시간 만에 모델을 학습할 수 있습니다. - Feedforward Neural Network (FNN)
다층 퍼셉트론의 다른 이름으로, 인공 신경망 모델 중 가장 기본이 되는 모델입니다. 정보가 한 방향(입력 → 출력)으로만 흐르는 네트워크이며, 입력층, 은닉층, 출력층으로 구성되어 있습니다. - CNN이 사전 지식을 갖고 있다?
논문에서는 CNN이 사전 지식(prior knowledge)이 있다고 하고 있습니다. 물론 실제로 선, 도형 같은 특징들을 알고 있는 것은 아닙니다.
CNN은 위 그림과 같이 필터를 사용하는데, 필터가 일정 범위 안 값들의 내적을 구하고 특성 맵을 만드는 방식입니다. 하나의 필터가 이미지 전체를 커버할 수 있기 때문에 공통된 특징을 추출할 수 있으며, 인접한 픽셀은 서로 의존 관계(locality)라는 점을 이용한다는 구조적인 특징 때문에 사전 지식을 갖고 있다고 하는 것입니다.
2. Architecture
2.1 ReLU Nonlinearity
뉴런의 출력을 입력 $x$의 함수로 모델링하는 표준 방식은 $f(x) = \tanh(x)$, 혹은 $f(x) = (1+e^{-x})^{-1}$ (Sigmoid)입니다.
하지만 두 함수 모두 기울기 소실의 문제가 있습니다. 위 그림을 보면 기울기가 0에 가까워지는 것을 확인할 수 있는데, 역전파 과정에서 0 혹은 0에 근접한 매우 작은 값이 전달되면 가중치 조절이 일어나지 않기 때문에 학습이 어려워집니다. 따라서 논문에서는 ReLU 함수($f(x) = max(0,x)$)를 사용했습니다.
- ReLU가 모든 문제를 해결할 수 있을까?
ReLU 함수는 saturation(활성화 함수가 최대/최솟값에 도달해서 입력값에 반응하지 않는 현상)이 발생하지 않으며 기울기 소실 문제가 발생하지 않는다는 장점이 있지만 입력이 0 이하라면 가중치가 0이 되어버리는 문제점이 있습니다. 이는 Dying ReLU Problem이라고 하며, 뉴런이 완전히 죽어버리는 문제가 발생합니다.
2.2. Local Response Normalization
ReLU는 입력이 아무리 커져도 특정 값으로 수렴하지 않기 때문에 입력값을 정규화하지 않아도 saturation이 발생하지 않습니다. 양수값만 주어진다면 해당 뉴런에서 학습이 진행되죠. 하지만 저자들은 정규화를 함으로써 일반화 성능을 더 높일 수 있다는 것을 발견했습니다.
$(x, y)$에서 필터 $i$를 적용한 뉴런의 활성도를 $a^{i}_{x, y}$, 해당 뉴런의 정규화된 활성도는 다음과 같습니다:
$$ b^{i}{x, y}=a^{i}{x, y}/(k+\alpha\sum^{min(N-1, i+n/2)}{j=max(0, i-n/2)}(a^{j}{x,y})^2)^\beta $$
수식을 이해하기 위해선 convolution이 어떻게 이루어지고, feature map이 어떻게 만들어지는지 알아야 합니다. 간단히 말해, 위 그림과 같이 N\times N 커널이 이미지 전체를 돌면서 해당 영역 안의 값들을 내적한 값들이 feature map이 되는 것입니다. 커널이 한 번 이미지를 돌면 하나의 맵이 만들어지기 때문에 결과적으로 커널의 수(채널)만큼 feature map이 만들어집니다.
수식을 보면 다음과 같은 부분이 있는 것을 확인할 수 있습니다.
$$\sum^{min(N-1, i+n/2)}{j=max(0, i-n/2)}(a^{j}{x,y})^2$$
여기서 $N$은 커널의 수(= 채널 수)를 나타내며, $n$은 인접한 feature map의 수를 의미합니다. 이때 채널 수만큼 feature map이 만들어지기 때문에 $n$의 범위는 $1 ≤ n ≤ N$이 됩니다. $n=5$로 설정했기 때문에, $i-2$ ~ $i+2$번 째 뉴런의 활성도를 제곱한 값의 합을 구하게 되는 것이죠.
이제 다시 전체 수식을 보도록 하겠습니다.
$$b^{i}{x, y}=a^{i}{x, y}/(k+\alpha\sum^{min(N-1, i+n/2)}{j=max(0, i-n/2)}(a^{j}{x,y})^2)^\beta$$
여기서 $k$는 bias term으로, 0으로 나눠지는 것을 방지하거나 분모가 매우 작아지는 것을 방지하기 위해 사용되는 하이퍼파라미터 값입니다. 논문에서는 $k=2$로 설정했습니다.
$\alpha$는 스케일링을 위한 하이퍼파라미터로, $(a^{j}_{x,y})^2$의 크기를 조절하기 위해 사용됩니다. 논문에서는 $\alpha=10^{-4}$로 설정했습니다. 마찬가지로 $\beta$는 정규화를 위한 하이퍼마라미터이며, $\beta=0.75$입니다.
이 응답 정규화 방식(response normalization)은 실제 뉴런에서 발견되는 측면 억제(lateral inhibition) 현상에서 영감을 받았다고 합니다. 측면 억제란, 한 영역에 있는 신경 세포가 상호 간 연결되어 있을 때 자신의 축색이나 자신과 이웃 신경세포를 매개하는 중간신경세포(interneuron)를 통해 이웃에 있는 신경 세포를 억제하려는 경향입니다. 쉽게 말해 하나의 뉴런이 활성화될 때, 주변의 뉴런들의 활동을 억제하는 신경 메커니즘을 의미합니다.
이 방식을 사용함으로써 top-1, top-5 에러율을 각각 1.4%, 1.2% 줄일 수 있었고, CIFAR-10 데이터셋에서 테스트 에러율을 13% → 11%로 개선할 수 있었다고 합니다.
2.3. Overlapping Pooling
풀링 층(pooling layer)은 feature map의 크기를 줄이는 역할을 합니다. 위 그림을 보면, 이미지에서 2x2영역의 최댓값을 사용해서 feature map의 크기를 절반으로 줄이고 있는 것을 확인할 수 있습니다.
일반적으로 풀링을 하면 풀링 영역이 겹치지 않습니다. 예를 들어, 위 그림에서 파란색 영역과 초록색 영역이 겹치지 않는 것처럼요. 즉, stride = kernel_size로 설정하게 되는데, 논문에서는 stride = 2, kernel_size = 3으로 설정해 겹치는 풀링 방식(overlapping pooling)을 선택했습니다. 이를 통해 이미지의 더 많은 부분 커버할 수 있고, 특징을 더 많이 추출 및 보존할 수 있습니다.
Overlapping pooling을 사용함으로써 stride = kernel_size = 2인 모델보다 top-1, top-5 에러율을 각각 0.4%, 0.3% 개선할 수 있었으며, 과적합에 조금 더 강건한 결과를 얻을 수 있었습니다.
2.4. Overall Architecture
AlexNet은 5개의 컨볼루션 층과 3개의 완전 연결층이 차례대로 쌓여 있는 구조로 이루어져 있습니다. 마지막 완전 연결 층의 출력은 1000-way 소프트맥스 함수로 연결되어 각 클래스에 대한 확률을 얻을 수 있습니다.
3. Reducing Overfitting
3.1. Data Augmentation
데이터 증강(data augmentation)은 데이터셋이 작은 경우 크기를 늘리거나, 과적합을 줄이는 용도로 사용됩니다. 증강 방식은 이미지 회전, 반전, RGB 값 조정, 자르기 등이 있는데, AlexNet에서는 과적합을 줄이기 위해 두 가지 증강 방식을 사용했습니다.
- 좌우반전
256x256 이미지에서 224x224 크기의 패치(좌우반전 포함)를 무작위로 추출하는 방식입니다. 이렇게 되면 32 x 32 x 2 = 2048배만큼 데이터를 더 늘릴 수 있습니다. 테스팅 할 때에는 각 꼭짓점 부분의 224x224 패치와 중앙의 패치 5개, 그리고 좌우반전을 해서 뽑은 5개를 사용해 총 10개의 패치를 입력으로 넣었습니다. 그리고 10개의 패치에 대해 나온 결과를 평균 내어 최종 출력으로 산출했습니다. - RGB 강도 조절
훈련 이미지의 RGB 채널의 강도를 조절하는 방식입니다. ImageNet 학습 셋의 RGB 픽셀 값 전체에 대해 PCA를 진행하고 평균 0, 표준편차 0.1을 갖는 정규 분포에서 랜덤 변수를 추출한 후, 원래의 픽셀 값에 곱해주어 색상의 변형을 주는 방법입니다. 이 방식을 사용하게 되면 기존 레이블을 유지하면서 색상의 변형을 일으키는 것이 가능합니다. RGB 강도를 조절했을 때, 하지 않았을 때보다 top-1 에러율이 1% 개선되었습니다. - 참고: 주성분 분석 (Principle Component Analysis, PCA)
데이터의 주요 패턴을 캡처하면서 차원을 줄이는 분석 기법입니다. 예를 들어, 남자와 여자에 대한 다양한 특징 정보가 주어졌다고 가정해 봅시다. 이들을 구분하기 위한 정보는 굉장히 많습니다. 하지만 염색체만 확인하면 생물학적으로 남녀를 구분할 수 있기 때문에 실질적으로 우리가 성별을 구분하기 위해서 이 모든 데이터를 활용할 필요가 없습니다.
이러한 핵심 특징을 추출한다는 아이디어에 기반하여 AI 학습 전에 학습 데이터를 전처리하면 효과적인 머신 러닝을 진행할 수 있습니다. 여기서 말하는 전처리는 데이터의 차원을 줄이는 것을 의미하는데, 이를 PCA라고 하는 것입니다.
AlexNet에서는 다양한 조명 환경을 모방하기 위해서 사용했습니다. (사과가 있다고 했을 때, 밝은 햇빛 아래에서 본 색과 어두운 실내 조명에서의 색이 다른 것처럼요.)
3.2. Dropout
여러가지 모델의 예측을 합치는 것은 테스팅 에러를 줄이기 위한 좋은 방법 중 하나입니다. 하지만 학습을 하는 데에만 며칠이 소요되기 때문에 이 예측을 합치는 것도 컴퓨팅 자원이 많이 필요합니다. 이 문제를 해결하기 위한 방법이 “Dropout” 기법입니다.
Dropout은 은닉층의 뉴런의 출력을 확률적으로 0으로 만드는 기법입니다. 쉽게 말해 일부 뉴런을 죽이는 것입니다. Dropout 된 뉴런은 학습에 관여하지 않으며, 확률적으로 dropout이 이루어지기 때문에 입력이 주어질 때마다 서로 다른 아키텍처가 만들어집니다.
이렇게 서로 다른 아키텍처와 가중치가 만들어지지만, 마지막에는 모든 출력의 가중치를 종합해 평균을 내기 때문에 어느 한 특성에 편향되지 않은 모델을 얻을 수 있는 것입니다.
논문에서는 모델의 첫 두 개의 완전 연결 층에서 dropout을 사용하고 있습니다. Dropout을 적용하지 않았을 때 네트워크는 상당한 과적합을 보였으며, 적용했을 때 수렴하는 데 필요한 반복 횟수가 대략 두 배로 증가했지만 과적합 문제를 해결할 수 있었습니다.
- Dropout이 과적합을 방지하는 원리
어떤 특성 $\mathcal{f}$가 출력값에 가장 큰 상관관계가 있다고 가정해 봅시다. Dropout을 적용하지 않고 학습한다면 $\mathcal{f}$에 가장 큰 가중치가 설정되어 나머지 특성에 대해서는 제대로 학습이 이루어지지 않을 것입니다.
하지만 dropout이 적용된다면 $\mathcal{f}$를 제외하고 학습해도 좋은 결과가 나올 수 있습니다. 결과적으로 $\mathcal{f}$에 의해서만 출력값이 결정되는 과적합을 방지하고 다른 특성도 종합적으로 확인할 수 있습니다.
4. Details of Learning
AlexNet은 (미니배치)확률적 경사하강법을 이용해 학습 됐습니다. 추가적으로 배치 크기는 128, momentum은 0.9, weight decay는 0.0005로 설정했습니다. 여기서 눈여겨 봐야 할 점은 weight decay입니다.
Weight decay는 과적합을 방지하기 위한 기법으로, 학습 중 가중치가 너무 큰 값을 가지지 않도록 큰 가중치에 대한 페널티를 부여하는 방식입니다. 다음과 같이 나타낼 수 있습니다.
$$ E(w) = E_0(w) + \frac{1}{2} \lambda \sum w^2 $$
여기서 $E(w)$는 새로운 손실 함수, $E_{0}(w)$는 기존 손실 함수(cross-entropy, MSE, etc.), $\lambda$는 weight decay 계수, $w$는 가중치를 의미합니다. 그리고 $\frac{1}{2}$은 경사 하강 시 미분을 할 때 유용하게 쓰이기 때문에 일반적으로 추가하는 값입니다.
이 논문에서 weight decay는 단순히 규제만 하는 것이 아니라 모델의 훈련 에러를 낮추기도 합니다. 논문에서 사용한 가중치의 업데이트 공식은 다음과 같습니다.
$$ v_{i+1} := 0.9 \cdot v_i - 0.0005 \cdot \epsilon \cdot w_i - \epsilon \cdot \langle\frac{\partial L}{\partial w}|{w_i}\rangle{D_i} $$
$$ w_{i+1} := w_i + v_{i+1} $$
$i$는 반복 횟수, $v$는 momentum, $\epsilon$은 학습률, $\langle\frac{\partial L}{\partial w}|{w_i}\rangle_{D_i}$는 $i$번째 배치에서 $w_i$에서의 기울기의 평균값입니다. 쉽게 말해, 계속해서 momentum을 줄여나가면서 업데이트가 되는 형태입니다.
모든 층의 초기 가중치는 평균 0, 표준편차 0.01을 따르는 정규 분포를 적용했으며, 2, 4, 5번째 컨볼루션 층과 은닉층에 포함된 완전 연결 층에 1의 편향 값을 부여했습니다(다른 층은 0). 이는 ReLU 함수에 양수 입력을 제공하기 때문에 초기 학습 속도를 가속할 수 있습니다.
학습률은 모든 층에서 0.01을 사용했으며, validation error가 개선되지 않을 때마다 10으로 나눴습니다.
5. Results
위 그림은 모델의 첫 컨볼루션 층에서 학습된 11x11x3 필터입니다. 위쪽에 있는 48개의 필터는 주파수(높은 주파수는 명암이 크게 바뀌는 부분을 의미)와 방향성을 나타내는 정보를 담고 있습니다. 그리고 나머지 48개는 색상에 관련된 정보를 담고 있습니다.
왼쪽 그림은 테스트 이미지와 해당 이미지에 대한 상위 5개 예측을 나타낸 것입니다. 첫 번째 그림의 진드기처럼 가장자리에 있는 객체도 정확하게 인식하고 있으며, 대부분 합리적으로 예측을 하고 있습니다. 예를 들어, 표범의 경우, 재규어나 치타와 같이 비슷한 점 무늬를 띄는 종이 상위 예측에 포함되어 있습니다. 또한 자동차 그릴이나 체리처럼 모호한 이미지에서도 합리적으로 예측을 하고 있습니다.
오른쪽 그림은 첫 번째 행의 이미지에 대해서 모델이 가장 근접하다고 생각하는 이미지 6장을 나타낸 것입니다. 픽셀 단위에서 보면 유사하지 않지만 특성 단위에서 유사하기 때문에 그림과 같이 예측한 것으로 추측됩니다.
6. Conclusion
CNN을 사용하면 순수하게 지도 학습만으로도 어려운 객체 분류 태스크에서 뛰어난 성능을 얻을 수 있습니다. 한 가지 참고해야 할 점은, 앞서 봤던 모델의 구조에서 하나의 컨볼루션 층만 빠져도 loss가 2% 증가한다는 것입니다. 따라서 네트워크의 깊이가 결과에 중요한 영향을 미친다는 것을 확인할 수 있습니다.
또한, 모델의 발전 가능성에 대해서 다음과 같이 제시하고 있습니다:
- 더 강력한 컴퓨팅 자원 사용
- 더 깊고 넓은 네트워크 사용
- 사전학습
실험 결과, 더 깊은 네트워크를 사용했을 때 좋은 성능을 보였지만 학습 시간이 매우 길어졌습니다. 따라서 이를 보완할 수 있는 강력한 컴퓨팅 자원을 사용한다면 학습이 더 빨라질 것입니다.