[논문번역] ImageNet Classification with Deep Convolutional Neural Networks(2012)

My_oyster_house·2024년 10월 20일

Abstract

우리는 1.2 million 고해상도 이미지를 1,000개의 서로 다른 클래스에 분류하기 위해 대규모의 Deep Convolutional Neural Network (CNN)를 훈련시켰습니다. 테스트 데이터에서 우리는 top-1 error rate 37.5%와 top-5 error rate 17.0%를 달성했으며, 이는 이전 state-of-the-art 모델보다 상당히 개선된 결과입니다. 이 neural network는 6천만 파라미터와 65만 뉴런으로 구성되어 있으며, 5개의 convolutional layers로 이루어집니다. 일부는 max-pooling layers로 이어지고, 3개의 fully-connected layers와 마지막으로 1,000-way softmax 함수로 구성됩니다. 훈련 속도를 높이기 위해 우리는 non-saturating neurons를 사용하고, 매우 효율적인 GPU implementation을 사용했습니다. fully-connected layers에서 overfitting을 방지하기 위해 ‘dropout’이라는 최근 개발된 regularization method를 사용했습니다. 또한 이 모델의 변형을 ILSVRC-2012 대회에 출품하여, top-5 test error rate 15.3%로 우승하였고, 이는 두 번째로 높은 모델의 26.2%와 비교해 상당한 개선을 보여줍니다.

1. Introduction

현재의 object recognition 접근 방식은 주로 machine learning methods를 사용합니다. 성능을 향상시키기 위해서는 더 큰 데이터셋을 수집하고, 더 강력한 모델을 학습하며, 과적합을 방지하는 더 나은 기법을 사용할 수 있습니다. 최근까지 labeled datasets의 규모는 상대적으로 작았으며, 대략 수만 개의 이미지 정도에 불과했습니다 (e.g., NORB, Caltech-101/256, CIFAR-10/100). 단순한 인식 작업은 이 정도 크기의 데이터셋으로도 충분히 해결될 수 있으며, 특히 label-preserving transformations을 사용하면 더 향상됩니다. 예를 들어, 현재 MNIST digit-recognition task는 human performance에 근접하는 성과를 보이고 있습니다 (<0.3%).

그러나 현실에서의 객체는 상당히 다양한 변동성을 보이기 때문에, 이를 인식하려면 대규모의 학습 데이터셋이 필요합니다. 사실, 작은 이미지 데이터셋의 한계는 오랫동안 잘 알려져 있었지만, 최근에서야 수백만 개의 이미지로 구성된 대규모 labeled datasets이 가능해졌습니다. 새로운 대규모 데이터셋에는 LabelMe, ImageNet 등이 포함되며, 각각 수십만 개에서 수백만 개의 이미지로 구성되어 있습니다.

수백만 개의 객체로부터 학습하기 위해서는 더 큰 neural networks와 모델이 필요합니다. 그러나 객체 인식 작업의 복잡성으로 인해 ImageNet과 같은 대규모 데이터셋이 요구되며, 우리의 모델도 이러한 대규모 데이터셋을 효과적으로 처리할 수 있도록 설계되었습니다.

CNN이 매력적인 특성을 가지고 있고, 로컬 아키텍처가 상대적으로 효율적임에도 불구하고, 고해상도 이미지에 대규모로 적용하는 것은 여전히 매우 비용이 많이 들었습니다. 다행히도, 현재의 GPU는 매우 최적화된 2D convolution (2차원 합성곱) 구현을 제공하여, 크고 복잡한 CNN을 훈련하는 데 필요한 성능을 크게 개선했습니다. 그리고 ImageNet과 같은 최근 데이터셋은 이 모델들이 과적합 없이 훈련될 수 있을 만큼 충분한 라벨이 지정된 예제를 포함하고 있습니다.

이 논문에서의 주요 기여는 다음과 같습니다. 우리는 ILSVRC-2010 및 ILSVRC-2012 대회에서 사용된 ImageNet의 하위 집합에서 현재까지 가장 큰 규모의 CNN을 훈련시켰으며, 이 데이터셋에서 지금까지 보고된 가장 우수한 결과를 달성했습니다.

우리는 매우 최적화된 2D convolution과 모든 관련 작업을 GPU에서 효율적으로 구현했으며, 이를 공개적으로 제공하고 있습니다. 우리의 신경망은 성능을 향상시키고 훈련 시간을 단축하는 여러 새로운 기능들을 포함하고 있으며, 이는 3장에서 자세히 설명됩니다. 우리의 네트워크의 크기는 1.2 million 라벨이 지정된 학습 예제를 사용하면서 과적합 문제를 피하기 위해 몇 가지 효과적인 기법을 사용했습니다. 이에 대한 세부 사항은 4장에서 다룹니다.

우리의 최종 네트워크는 5개의 convolutional layers와 3개의 fully-connected layers로 이루어져 있으며, 이 깊이는 중요한 요소임이 밝혀졌습니다. 우리는 convolutional layer 하나를 제거하는 것만으로도 성능이 크게 저하된다는 것을 확인했습니다.

결국 네트워크의 크기는 주로 현재 GPU에서 사용할 수 있는 메모리와 우리가 허용할 수 있는 학습 시간에 의해 제한됩니다. 우리의 네트워크는 두 개의 GTX 580 3GB GPU에서 훈련되었으며, 학습에 약 5~6일이 걸렸습니다. 모든 실험에서, 더 빠른 GPU와 더 큰 데이터셋이 이용 가능해지면 우리의 결과가 더 개선될 수 있음을 시사합니다.

2. The Dataset

ImageNet은 약 15 million 이상의 라벨이 지정된 고해상도 이미지로 구성된 데이터셋으로, 약 22,000개의 카테고리에 해당합니다. 이미지는 웹에서 수집되어 Amazon Mechanical Turk의 크라우드소싱 도구를 통해 사람에 의해 라벨링되었습니다. ILSVRC는 ImageNet Large-Scale Visual Recognition Challenge의 약자입니다. ILSVRC는 매년 개최되는 Pascal Visual Object Challenge의 일환으로 2010년부터 시작되었습니다.

ILSVRC-2010은 우리가 실험을 수행한 주요 데이터셋이며, ILSVRC-2012 대회의 결과는 6장에서 보고됩니다. 우리는 주로 ILSVRC-2010 버전에서 실험을 진행했으며, 이 데이터셋에는 약 1.2 million 개의 학습 이미지, 50,000 개의 validation 이미지, 150,000 개의 테스트 이미지가 포함되어 있습니다.

ImageNet은 가변 해상도 이미지를 포함하지만, 우리의 시스템은 고정된 입력 해상도를 요구하기 때문에, 우리는 이미지를 256 x 256의 고정 해상도로 다운샘플링했습니다. 우리는 이미지의 중심 256 x 256 패치만을 사용했고, 그 외의 전처리는 하지 않았습니다.

3. The Architecture

우리 네트워크의 아키텍처는 그림 2에 요약되어 있습니다. 이 아키텍처는 5개의 convolutional layers와 3개의 fully-connected layers로 이루어져 있습니다. 우리의 네트워크 아키텍처의 핵심 요소에 대해서는 3.1-3.4장에서 설명하며, 이는 중요도에 따라 정렬되어 있습니다.

3.1 ReLU Nonlinearity

뉴런의 출력을 입력 xx의 함수로 모델링하는 일반적인 방법은

f(x)=tanh(x)f(x) = \tanh(x)

또는

f(x)=(1+ex)1f(x) = (1 + e^{-x})^{-1}

와 같이 나타냅니다.

경사 하강법(Gradient Descent)으로 학습할 때, 이러한 포화 비선형 함수 (saturating nonlinearities)

f(x)=max(0,x)f(x) = \max(0, x)

와 같은 비포화 비선형 함수 (non-saturating nonlinearity)보다 학습 속도가 훨씬 느립니다.

Nair와 Hinton 에 따르면, 이러한 비포화 함수는 Rectified Linear Units (ReLUs)로 불립니다. ReLU를 사용하는 심층 합성곱 신경망(Deep Convolutional Networks)은 tanh\tanh 뉴런을 사용하는 네트워크보다 학습 속도가 여러 배 더 빠릅니다. 그림 1에서는 CIFAR-10 데이터셋에서 특정 네트워크가 25%의 훈련 오차를 달성하는 데 필요한 반복 횟수를 보여줍니다. 이 실험은 우리가 만약 전통적인 포화 뉴런 모델을 사용했다면, 이렇게 큰 신경망을 실험하는 것이 불가능했을 것임을 시사합니다.

CNN에서 전통적인 뉴런 모델에 대한 대안을 생각한 것은 우리가 처음은 아닙니다. 예를 들어, Jarrett 등 은 다음과 같은 비선형 함수

f(x)=tanh(x)f(x) = |\tanh(x)|

가 그들의 데이터 전처리 방식(contrast normalization 및 local average pooling)과 함께 사용할 때 특히 좋은 성능을 발휘한다고 주장합니다. 하지만 이 데이터셋에서 우리가 주로 신경 쓴 부분은 과적합 방지 (overfitting prevention)입니다. 우리가 보고한 결과는 ReLU를 사용할 때 훈련 속도가 빨라진다는 점에 초점을 맞추고 있습니다. ReLU는 큰 모델이 대규모 데이터셋에서 훈련될 때 더 나은 성능을 발휘합니다.


용어 설명:

  • 포화 함수(saturating nonlinearity): 함수의 출력이 입력값이 커질수록 일정한 값에 수렴하는 특성을 가진 함수입니다. 예를 들어, tanh\tanh 함수는 입력값이 매우 크거나 작을 때 출력값이 각각 1이나 -1에 가까워집니다. 이런 경우 학습 속도가 느려질 수 있습니다.
  • 비포화 함수(non-saturating nonlinearity): 출력이 특정 값에 수렴하지 않고 계속 변화하는 함수입니다. ReLU는 음수에서는 0, 양수에서는 그대로 출력하는 방식으로, 비포화 함수로 간주됩니다. 이를 사용하면 경사 하강법의 학습 속도가 빨라집니다.
  • 과적합(overfitting): 모델이 학습 데이터에 너무 과도하게 맞춰져서 새로운 데이터에 대한 일반화 성능이 떨어지는 현상입니다. 이를 방지하기 위한 방법이 중요합니다.

그림 1: ReLU (solid line, 실선)를 사용하는 4계층 합성곱 신경망(CNN)은 tanh\tanh 뉴런을 사용하는 네트워크 (dashed line, 점선)보다 CIFAR-10 데이터셋에서 훈련 오차율 25%에 도달하는 시간이 6배 빠릅니다. 각 네트워크의 학습률은 훈련을 빠르게 하기 위해 각각 독립적으로 설정되었습니다. 이 실험에서는 정규화 기법 (regularization)이 사용되지 않았습니다. 네트워크 구조에 따라 성능 차이가 있을 수 있지만, 전반적으로 ReLU를 사용하는 네트워크는 포화 뉴런(tanh\tanh)을 사용하는 네트워크보다 훨씬 빠르게 학습됩니다.

3.2 Training on Multiple GPUs

GTX 580 GPU는 메모리가 3GB밖에 없어서, 이를 사용하여 훈련할 수 있는 신경망의 크기가 제한됩니다. 하지만 120만 개의 학습 예제는 하나의 GPU에 맞추기엔 너무 크기 때문에, 우리는 네트워크를 두 개의 GPU에 나누어 훈련했습니다. 현재의 GPU는 다른 GPU의 메모리에 접근할 수 있고, 이를 통해 호스트 메모리를 거치지 않고도 GPU 간 병렬화를 수행할 수 있습니다. 우리가 사용하는 병렬화 방식은 각 GPU에 커널(또는 뉴런)의 절반씩을 배치하고, 추가적으로 GPU는 특정 레이어에서만 통신하도록 설정했습니다. 예를 들어, 3번째 레이어의 커널은 2번째 레이어의 모든 커널 맵에서 입력을 받아옵니다. 그러나 4번째 레이어의 커널은 3번째 레이어의 같은 GPU에 있는 커널 맵에서만 입력을 받아옵니다. 이러한 통신 패턴을 선택하는 것은 cross-validation (교차 검증)에서는 문제가 되지만, 계산량의 적절한 비율을 맞추는 데는 유리합니다.

결과적으로 만들어진 아키텍처는 Cireşan 등이 사용한 "columnar" CNN과 비슷하지만, 우리의 네트워크는 서로 독립적이지 않습니다(그림 2에서 확인 가능). 이 방식은 하나의 GPU에서 모든 convolutional layer가 학습되는 네트워크와 비교하여, top-1 오류율을 1.7%, top-5 오류율을 1.2% 낮추는 결과를 보여줍니다. 두 개의 GPU를 사용한 네트워크는 하나의 GPU를 사용한 네트워크보다 훈련 시간이 약간 짧습니다.


추가 설명:

  • GTX 580 GPU: 여기서 언급된 GPU는 메모리가 3GB로, 현재 기준으로는 상대적으로 작은 용량을 가진 모델입니다. 그래서 대규모 데이터셋을 처리하기에는 한계가 있어, 여러 GPU를 사용하는 방식을 채택한 것입니다.
  • 병렬화(parallelization): 여기서는 두 개의 GPU가 동시에 서로 다른 부분을 나누어 처리하는 방식으로, 각각의 GPU가 서로 독립적으로 작업할 수 있도록 설계된 구조입니다.
  • cross-validation (교차 검증): 모델의 성능을 평가하기 위해 데이터를 여러 번 나누어 학습과 테스트를 반복하는 기법입니다. 여기서는 GPU 간의 통신 문제로 인해 일부 성능 평가에 제한이 있다는 의미입니다.
  • columnar CNN: 이는 Cireşan 등이 개발한 CNN 구조로, 각 층(layer)들이 독립적으로 학습되는 방식입니다. 반면, 이 논문의 방식에서는 층들이 서로 의존적으로 학습됩니다.

3.3 Local Response Normalization

ReLU는 포화(saturating)를 방지하기 위해 입력을 정규화할 필요가 없다는 장점이 있습니다. 일부 학습 예제가 ReLU에 양의 입력을 제공하기만 하면, 그 뉴런에서 학습이 일어납니다. 하지만 다음과 같은 local normalization 방식이 일반화(generalization)를 돕는다는 것을 발견했습니다. 뉴런 ii의 활동을 커널 ii가 위치 (x,y)(x, y)에서 계산한 값 ax,yia_{x,y}^i로 나타낸다고 할 때, ReLU 비선형성을 적용한 후의 response-normalized 활동 bx,yib_{x,y}^i는 다음과 같은 수식으로 주어집니다:

bx,yi=ax,yi(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)βb_{x,y}^i = \frac{a_{x,y}^i}{\left( k + \alpha \sum_{j=\max(0, i-n/2)}^{\min(N-1, i+n/2)} (a_{x,y}^j)^2 \right)^\beta}

여기서 합(sum)은 같은 공간적 위치에서 "인접한" 커널 맵을 대상으로 하며, NN은 레이어 내의 총 커널 수입니다. 커널 맵의 순서는 임의적이며, 훈련 시작 전에 결정됩니다. 이 response normalization 방식은 실제 뉴런에서 영감을 받아, 서로 다른 커널로 계산된 뉴런 출력 사이에서 큰 활동에 대한 경쟁을 만들어냅니다. 상수 kk, nn, α\alpha, β\beta는 하이퍼파라미터이며, 검증 데이터셋을 사용해 결정됩니다. 우리는 k=2k = 2, n=5n = 5, α=104\alpha = 10^{-4}, β=0.75\beta = 0.75로 설정했습니다. 이 정규화는 ReLU 비선형성 이후 특정 레이어에 적용되었습니다(3.5절에서 추가 설명).

이 방식은 Jarrett 등 [11]이 사용한 local contrast normalization 방식과 유사하지만, 우리의 방식은 '밝기 정규화(brightness normalization)'로 불리는 것이 더 정확할 것입니다. 왜냐하면 우리는 평균 활동(mean activity)을 빼지 않기 때문입니다. 이 response normalization은 top-1 오류율을 1.4%, top-5 오류율을 1.2% 줄였습니다. 우리는 이 방식의 효과를 CIFAR-10 데이터셋에서 검증했으며, 네트워크는 정규화를 적용하지 않았을 때보다 13% 테스트 오류율을 기록했고, 정규화를 적용했을 때는 11% 오류율을 기록했습니다.
(이 네트워크를 공간 제약으로 인해 자세히 설명할 수는 없지만, 여기에서 제공되는 코드와 파라미터 파일에 명확하게 명시되어 있습니다: http://code.google.com/p/cuda-convnet/.)


추가 설명:

  • Local Response Normalization (LRN): LRN은 특정 뉴런의 활성화 값이 주변 뉴런의 값에 따라 정규화되는 방식입니다. 이 방식은 뉴런들이 서로 경쟁하는 것처럼 작동하여, 한 뉴런의 활성화 값이 다른 뉴런에 의해 너무 커지지 않도록 억제합니다.
  • 하이퍼파라미터 (hyper-parameters): 모델의 학습 과정에서 설정하는 값으로, 훈련 데이터에 맞춰 자동으로 조정되지 않고 사람이 직접 설정하는 값입니다. 여기서는 kk, nn, α\alpha, β\beta가 하이퍼파라미터입니다.
  • 정규화(normalization): 뉴런의 출력이 너무 크거나 작아지는 것을 방지하여 학습을 안정적으로 유지하는 과정입니다. 여기서의 정규화는 주로 뉴런의 출력 값을 일정하게 유지하기 위한 방식입니다.

Figure 2
우리 CNN의 아키텍처를 시각적으로 보여주는 그림으로, 두 개의 GPU 사이에서 작업을 어떻게 나누는지 명확하게 구분하고 있습니다. 하나의 GPU는 그림 상단의 레이어들을 처리하고, 다른 하나는 하단의 레이어들을 처리합니다. 두 GPU는 특정 레이어에서만 통신을 주고받습니다. 네트워크의 입력은 150,528 차원이고, 나머지 레이어들에서의 뉴런 수는 각각 253,440–186,624–64,896–64,896–43,264–4096–4096–1000으로 구성됩니다.

3.4 Overlapping Pooling

CNN에서 풀링 레이어는 같은 커널 맵에 있는 이웃한 뉴런들의 출력을 요약하는 역할을 합니다. 일반적으로 인접한 풀링 유닛이 처리하는 영역은 서로 겹치지 않습니다(예: [17, 11, 4]). 조금 더 구체적으로 설명하자면, 풀링 레이어는 풀링 유닛들이 격자 모양으로 배열된 것으로 볼 수 있습니다. 이 풀링 유닛들은 각각 중심으로 하는 z×zz \times z 크기의 영역을 요약하며, 풀링 유닛 간격은 ss 픽셀로 설정됩니다.

만약 s=zs = z로 설정하면, 전통적인 풀링 방식이 됩니다. 즉, 풀링 유닛들이 겹치지 않고 따로따로 정보를 요약합니다. 반면, s<zs < z로 설정하면 겹치는 풀링이 됩니다. 이는 풀링 유닛들이 서로 겹치는 방식으로 정보를 요약하는 것입니다. 우리는 s=2s = 2, z=3z = 3인 겹치는 풀링 방식을 사용했습니다. 이 방식은 겹치지 않는 풀링(s=2s = 2, z=2z = 2)과 비교했을 때, top-1 오류율을 0.4%, top-5 오류율을 0.3% 줄였습니다. 또한 훈련 중에 겹치는 풀링을 사용한 모델이 과적합(데이터에 지나치게 맞춰져 새로운 데이터에 대한 성능이 떨어지는 현상)을 방지하는 데 유리하다는 것도 관찰했습니다.

3.5 Overall Architecture

이제 우리의 CNN 전체 구조를 설명하겠습니다. 그림 2에 나와 있듯이, 이 네트워크는 가중치를 가진 8개의 층(레이어)으로 구성되어 있으며, 처음 5개는 합성곱 레이어(Convolutional Layer)이고 나머지 3개는 완전 연결 레이어(Fully-connected Layer)입니다. 마지막 완전 연결 레이어의 출력은 1,000개의 클래스를 예측하는 소프트맥스(Softmax) 함수로 입력됩니다. 소프트맥스 함수는 1,000개의 클래스 레이블에 대한 확률 분포를 생성합니다. 우리의 네트워크는 다항 로지스틱 회귀(Multinomial Logistic Regression) 목표를 최대화하며, 이는 예측 분포에서 정답 레이블의 로그 확률을 평균적으로 최대화하는 것과 같습니다.

두 번째, 네 번째, 다섯 번째 합성곱 레이어의 커널은 이전 레이어에서 같은 GPU에 있는 커널 맵에만 연결됩니다(그림 2 참고). 세 번째 합성곱 레이어의 커널은 두 번째 레이어의 모든 커널 맵에 연결됩니다. 완전 연결 레이어의 뉴런들은 이전 레이어의 모든 뉴런에 연결됩니다. 응답 정규화(Response Normalization) 레이어는 첫 번째와 두 번째 합성곱 레이어 뒤에 위치하며, 맥스 풀링(Max-pooling) 레이어는 응답 정규화 레이어와 다섯 번째 합성곱 레이어 뒤에 적용됩니다. ReLU 비선형성은 모든 합성곱 레이어와 완전 연결 레이어의 출력에 적용됩니다.

첫 번째 합성곱 레이어는 224 × 224 × 3 크기의 입력 이미지를 96개의 크기 11 × 11 × 3 커널로 필터링하며, 스트라이드는 4 픽셀입니다(이는 커널 맵 내에서 인접 뉴런의 수용 영역 중심 사이의 거리입니다). 두 번째 합성곱 레이어는 첫 번째 합성곱 레이어의 (정규화되고 풀링된) 출력을 입력으로 받아 크기 5 × 5 × 48의 256개 커널로 필터링합니다. 세 번째, 네 번째, 다섯 번째 합성곱 레이어는 풀링이나 정규화 레이어 없이 서로 연결됩니다. 세 번째 합성곱 레이어는 크기 3 × 3 × 256의 384개 커널을 가지고 있으며, 두 번째 합성곱 레이어의 (정규화되고 풀링된) 출력에 연결됩니다. 네 번째 합성곱 레이어는 크기 3 × 3 × 192의 384개 커널을 가지고 있으며, 다섯 번째 합성곱 레이어는 크기 3 × 3 × 192의 256개 커널을 가지고 있습니다. 완전 연결 레이어는 각각 4,096개의 뉴런을 가지고 있습니다.


용어 정리:

  • 커널(Kernel): CNN에서 이미지를 처리하는 작은 필터입니다. 커널은 이미지를 가로세로로 움직이면서 특정 패턴을 감지하거나 특징을 추출합니다.

  • 커널 맵(Kernel Map): 커널이 이미지에 적용되어 나온 결과(출력)입니다. 쉽게 말해, 특정 필터(커널)가 이미지에서 찾아낸 특징의 지도(맵)라고 할 수 있습니다.

  • 풀링(Pooling): 풀링은 CNN에서 사용되는 기법으로, 이미지의 크기를 줄이면서 중요한 정보만 남기기 위한 과정입니다. 풀링은 이미지의 작은 영역에서 대표값을 선택하는 방법으로, 맥스 풀링(Max Pooling)이 그중 가장 많이 사용됩니다. 풀링을 통해 네트워크가 덜 중요한 세부사항은 제거하고, 핵심적인 정보만 남겨서 계산량을 줄이고 모델을 단순화합니다.

  • 풀링 유닛(Pooling Unit): 풀링 유닛은 이미지의 작은 영역에서 대표값을 선택하는 단위입니다. 예를 들어, 여러 픽셀 중에서 가장 큰 값을 선택하는 '맥스 풀링' 방식이 있습니다.

  • 풀링 레이어(Pooling Layer): 풀링 유닛들이 모여서 이루어진 층입니다. 이 층은 이미지의 크기를 줄이면서 중요한 특징만 남기는 역할을 합니다.

  • 겹치는 풀링(Overlapping Pooling): 풀링 유닛들이 서로 겹쳐서 정보를 요약하는 방식입니다. 전통적인 풀링 방식에서는 유닛들이 서로 겹치지 않고 따로따로 요약하지만, 겹치는 풀링에서는 유닛들이 일부 겹치며 더 많은 정보를 고려해 요약합니다. 이를 통해 모델이 더 세밀한 특징을 잡아낼 수 있습니다.

  • Top-1: 모델이 예측한 가장 높은 확률의 첫 번째 결과가 정답인 경우를 의미합니다. 예를 들어, 모델이 고양이 이미지를 보고 첫 번째로 고양이라고 예측했다면, 이는 Top-1에서 맞은 것입니다.

  • Top-5: 모델이 예측한 상위 다섯 가지 결과 중 하나라도 정답이면 성공으로 간주됩니다. 예를 들어, 모델이 고양이 이미지에 대해 1위부터 5위까지의 예측 목록에 '고양이'가 포함되어 있다면, Top-5에서 맞은 것으로 처리됩니다.


4. Reducing Overfitting(과적합 줄이기)

우리의 신경망 아키텍처는 6천만 개의 파라미터를 가지고 있습니다. ILSVRC의 1,000개 클래스는 각 학습 예제가 이미지에서 레이블로의 매핑에 10비트의 제약을 부여하지만, 이는 이렇게 많은 파라미터를 과적합 없이 학습하기에는 충분하지 않습니다. 아래는 우리가 과적합을 줄이기 위해 사용하는 두 가지 주요 방법을 설명합니다.

4.1 Data Augmentation

이미지 데이터에서 과적합을 줄이는 가장 쉽고 흔한 방법은 레이블을 유지하는 변환(label-preserving transformations)을 사용해 데이터셋을 인위적으로 확장하는 것입니다. 우리는 두 가지 형태의 데이터 증강을 사용하며, 이 방식들은 매우 적은 계산만으로 원본 이미지에서 변환된 이미지를 생성할 수 있어, 변환된 이미지를 디스크에 저장할 필요가 없습니다. 우리의 구현에서는 CPU에서 파이썬 코드로 변환 이미지를 생성하는 동안 GPU가 이전 이미지 배치를 훈련하고 있습니다. 따라서 이러한 데이터 증강 방식은 사실상 계산 비용이 거의 들지 않습니다.

첫 번째 데이터 증강 방식은 이미지의 평행 이동(translation)좌우 반전(horizontal reflections)을 생성하는 것입니다. 우리는 256 × 256 이미지에서 랜덤으로 224 × 224 크기의 패치(조각)를 추출하고, 해당 패치의 좌우 반전을 만들어 네트워크를 훈련시킵니다. 이렇게 하면 학습 데이터셋의 크기가 2048배 증가하지만, 그 결과 얻은 학습 예제들은 상호 연관성이 매우 높습니다. 이 방법이 없으면 우리의 네트워크는 상당한 과적합을 겪게 되어, 더 작은 네트워크를 사용해야 했을 것입니다. 테스트 시에는 네트워크가 224 × 224 크기의 다섯 개의 패치(네 모서리 패치와 중앙 패치)를 추출하고, 그들의 좌우 반전도 포함해 총 10개의 패치에 대해 예측을 수행한 뒤, 네트워크의 소프트맥스 레이어에서 나온 예측값을 평균하여 최종 결과를 얻습니다.

두 번째 데이터 증강 방식은 학습 이미지의 RGB 채널의 강도를 변경하는 것입니다. 구체적으로 우리는 ImageNet 학습 세트 전반에 걸쳐 RGB 픽셀 값에 대해 주성분 분석(PCA)을 수행합니다. 각 학습 이미지에 대해 찾아낸 주성분의 배수를 추가합니다. 이때 추가되는 값의 크기는 해당 주성분의 고유값에 비례하며, 이는 평균이 0이고 표준 편차가 0.1인 가우시안 변수에서 무작위로 선택된 값입니다. 따라서 각 RGB 이미지 픽셀 Ixy=[IxyR,IxyG,IxyB]TI_{xy} = [I_{xy}^R, I_{xy}^G, I_{xy}^B]^T에 다음과 같은 값을 추가합니다:

[p1,p2,p3][β1λ1,β2λ2,β3λ3]T[p_1, p_2, p_3] \cdot [\beta_1 \lambda_1, \beta_2 \lambda_2, \beta_3 \lambda_3]^T

여기서 pip_iλi\lambda_i는 각각 RGB 픽셀 값의 3 × 3 공분산 행렬ii번째 고유벡터(eigenvector)고유값(eigenvalue)이며, βi\beta_i는 앞서 언급한 가우시안 랜덤 변수입니다. 각 βi\beta_i는 특정 학습 이미지의 모든 픽셀에 대해 한 번만 선택되며, 그 이미지가 다시 학습에 사용될 때 다시 선택됩니다. 이 방식은 자연 이미지의 중요한 특성을 대략적으로 포착하는데, 이는 조명 강도와 색상 변화에 대해 물체의 정체성이 변하지 않는 특성입니다. 이 방법은 top-1 오류율을 1% 이상 줄여줍니다.


용어 설명:

  • 과적합(Overfitting): 모델이 학습 데이터에 너무 과도하게 맞추어져, 새로운 데이터에 대해 일반화 성능이 떨어지는 문제입니다.
  • 데이터 증강(Data Augmentation): 학습 데이터셋을 인위적으로 늘려, 다양한 상황에서 모델이 학습할 수 있도록 변형된 이미지를 추가하는 기법입니다.
  • 레이블을 유지하는 변환(Label-preserving transformations): 이미지의 특성은 변형시키되, 그 이미지에 대한 정답(레이블)은 바뀌지 않는 변환입니다. 예를 들어, 이미지의 크기를 변경하거나 회전하더라도, 그 이미지가 '고양이'인 사실은 변하지 않기 때문에 이를 유지하는 방식입니다.
  • 주성분 분석(PCA): 데이터의 차원을 축소하면서 가장 중요한 정보를 보존하는 통계 기법입니다.
  • 고유벡터(Eigenvector)와 고유값(Eigenvalue): 공분산 행렬에서 방향성을 나타내는 벡터(고유벡터)와 그 크기를 나타내는 값(고유값)입니다.
  • 공분산 행렬(Covariance Matrix): 데이터의 각 변수들 사이의 관계를 나타내는 표입니다. 공분산은 두 변수 사이의 변화 방향이 얼마나 비슷한지를 나타내는 값으로, 양의 공분산은 두 변수가 함께 증가하거나 감소하는 관계를, 음의 공분산은 한 변수가 증가할 때 다른 변수가 감소하는 관계를 의미합니다. 여러 변수들 사이의 공분산을 모아서 만든 것이 공분산 행렬입니다. 공분산 행렬을 사용하면 RGB 채널 간의 상관관계를 파악할 수 있습니다.

공분산 행렬 예시:

공분산 행렬은 여러 변수들 사이의 공분산을 정리한 표입니다. 만약 우리가 x1x_1, x2x_2, x3x_3 세 가지 변수를 가지고 있다면, 그 사이의 공분산을 다음과 같은 행렬로 나타낼 수 있습니다:

Cov(X)=(Cov(x1,x1)Cov(x1,x2)Cov(x1,x3)Cov(x2,x1)Cov(x2,x2)Cov(x2,x3)Cov(x3,x1)Cov(x3,x2)Cov(x3,x3))\text{Cov}(X) = \begin{pmatrix} \text{Cov}(x_1, x_1) & \text{Cov}(x_1, x_2) & \text{Cov}(x_1, x_3) \\ \text{Cov}(x_2, x_1) & \text{Cov}(x_2, x_2) & \text{Cov}(x_2, x_3) \\ \text{Cov}(x_3, x_1) & \text{Cov}(x_3, x_2) & \text{Cov}(x_3, x_3) \end{pmatrix}

여기서 Cov(xi,xj)\text{Cov}(x_i, x_j)xix_ixjx_j 변수 사이의 공분산을 의미합니다.

4.2 드롭아웃(Dropout)

여러 모델의 예측을 결합하는 것은 테스트 오류를 줄이는 매우 효과적인 방법입니다 [1, 3]. 그러나 이미 학습에 며칠씩 걸리는 큰 신경망에서는 비용이 너무 많이 듭니다. 하지만 학습 과정에서 약 2배 정도의 비용만 추가로 들면서 모델을 결합하는 매우 효율적인 방법이 있습니다. 최근 도입된 이 기법은 드롭아웃(Dropout)이라고 불리며, 각 은닉층 뉴런의 출력을 확률 0.5로 0으로 설정하는 방식입니다. 이렇게 드롭아웃된 뉴런들은 순전파(forward pass)에 기여하지 않으며, 역전파(backpropagation)에도 참여하지 않습니다. 따라서 매번 입력이 주어질 때마다 신경망은 서로 다른 아키텍처를 샘플링하게 되지만, 이 모든 아키텍처는 동일한 가중치를 공유합니다.

이 기법은 뉴런들이 복잡하게 서로 공적응(co-adaptation)하는 것을 줄입니다. 왜냐하면, 하나의 뉴런은 특정한 다른 뉴런들의 존재에 의존할 수 없기 때문입니다. 따라서 뉴런은 여러 다른 뉴런들의 임의의 조합과 함께 유용한 더 강력한 특징을 학습하도록 강요받습니다. 테스트 시에는 모든 뉴런을 사용하지만, 그 출력에 0.5를 곱합니다. 이는 기하 평균(geometric mean)을 취한 것과 유사한 효과를 내며, 드롭아웃 네트워크의 예측 분포를 결합하는 방식입니다.

우리는 그림 2의 첫 두 개의 완전 연결 레이어에서 드롭아웃을 사용했습니다. 드롭아웃이 없을 때, 우리의 네트워크는 상당한 과적합을 보였습니다. 드롭아웃을 사용하면 수렴하는 데 필요한 반복 횟수가 약 2배 증가합니다.

5. Details of Learning (학습 세부 사항)

우리는 모델을 학습시키기 위해 확률적 경사 하강법(Stochastic Gradient Descent, SGD)을 사용했습니다. 학습 배치 크기는 128개 예제, 모멘텀(momentum)은 0.9, 그리고 가중치 감쇠(weight decay)는 0.0005로 설정했습니다. 우리는 이 작은 가중치 감쇠가 모델이 학습하는 데 중요하다는 것을 발견했습니다. 다시 말해, 여기서 가중치 감쇠는 단순한 정규화 기법이 아니라, 모델의 학습 오류를 줄이는 데 기여했습니다. 가중치 ww의 업데이트 규칙은 다음과 같습니다:

vi+1:=0.9vi0.0005ϵwiϵLwiv_{i+1} := 0.9 \cdot v_i - 0.0005 \cdot \epsilon \cdot w_i - \epsilon \cdot \frac{\partial L}{\partial w_i}
wi+1:=wi+vi+1w_{i+1} := w_i + v_{i+1}

여기서 ii는 반복(iteration) 횟수를 나타내는 인덱스이고, vv는 모멘텀 변수, ϵ\epsilon은 학습률(learning rate), Lwi\frac{\partial L}{\partial w_i}ii번째 배치 DiD_i에서의 목표 함수의 가중치 ww에 대한 평균 기울기입니다.

우리는 각 레이어의 가중치를 평균이 0이고 표준 편차가 0.01인 가우시안 분포에서 초기화했습니다. 두 번째, 네 번째, 다섯 번째 합성곱 레이어와 완전 연결(hidden) 레이어의 뉴런 바이어스는 모두 상수 1로 초기화했습니다. 이 초기화는 학습 초기 단계에서 ReLU에게 양의 입력을 제공하여 학습을 가속화합니다. 나머지 레이어의 뉴런 바이어스는 상수 0으로 초기화했습니다.

모든 레이어에서 동일한 학습률을 사용했고, 학습이 진행되는 동안 이를 수동으로 조정했습니다. 우리가 따랐던 경험적 규칙은 검증 오류율이 현재 학습률에서 더 이상 개선되지 않을 때 학습률을 10배로 나누는 것이었습니다. 학습률은 처음에 0.01로 설정되었고, 학습이 끝날 때까지 세 번 줄였습니다. 우리는 약 1.2백만 개의 이미지로 구성된 학습 세트를 90번 반복 학습했으며, 두 대의 NVIDIA GTX 580 3GB GPU에서 5~6일이 걸렸습니다.


용어 설명:

  • 확률적 경사 하강법(SGD, Stochastic Gradient Descent): 전체 데이터가 아니라 무작위로 선택된 일부 데이터를 사용하여 모델의 가중치를 업데이트하는 방식입니다.
  • 모멘텀(Momentum): 경사 하강법에서 기울기만을 따르지 않고, 이전 가중치 변화량을 참고하여 학습의 속도를 높이는 방법입니다.
  • 가중치 감쇠(Weight Decay): 모델이 너무 복잡해지지 않도록, 가중치가 너무 커지는 것을 방지하는 정규화 기법입니다.
  • ReLU(Rectified Linear Unit): 비선형 활성화 함수로, 음수 입력은 0으로, 양수 입력은 그대로 출력하는 방식입니다. 신경망의 학습을 가속화하는 데 도움을 줍니다.


Figure3:
첫 번째 합성곱 레이어에서 224 × 224 × 3 크기의 입력 이미지로 학습된 크기 11 × 11 × 3의 96개의 convolutional 커널. 위쪽 48개의 커널은 GPU 1에서 학습되었고, 아래쪽 48개의 커널은 GPU 2에서 학습되었습니다. 자세한 내용은 Section 6.1을 참고하세요.4

6. Results

ILSVRC-2010에 대한 우리의 결과는 Table 1에 요약되어 있습니다. 우리의 네트워크는 Top-1과 Top-5 테스트 셋 오류율을 각각 37.5%와 17.0%로 달성했습니다. ILSVRC-2010 대회에서 최고 성능은 47.1%와 28.2%의 오류율을 기록했으며, 이는 서로 다른 특징들에 대해 학습된 6개의 스파스 코딩 모델을 결합한 접근 방식입니다 [2]. 이후 최고 성능은 45.7%와 25.7%의 오류율을 기록했으며, 이는 밀집 샘플링된 특징들로 학습된 두 개의 Fisher Vectors (FV)를 기반으로 한 분류기들을 결합한 접근 방식입니다 [24].

우리는 또한 우리의 모델을 ILSVRC-2012 대회에 제출했으며, 결과는 Table 2에 나와 있습니다. ILSVRC-2012의 테스트 레이블은 공개되지 않았기 때문에, 우리가 시도한 모델들에 대해 테스트 오류율을 보고할 수 없습니다. 이 문단의 나머지 부분에서는 검증 오류율과 테스트 오류율을 상호 교환하여 사용하며, 우리의 경험에 따르면 이 두 값은 0.1% 이상 차이나지 않습니다(Table 2 참조). 이 논문에서 설명된 CNN은 Top-5 오류율 18.2%를 달성했습니다. 다섯 개의 유사한 CNN의 예측을 평균하면 16.4%의 오류율을 얻을 수 있습니다. 하나의 CNN을 학습시켜 ILSVRC-2012 대회에서 16.6%의 오류율을 기록했으며, 이는 추가로 한 층 더 깊은 합성곱 레이어가 추가된 결과입니다.

마지막으로, 우리는 ImageNet Fall 2009 버전 데이터셋에서의 오류율도 보고합니다. 이 데이터셋은 10,184개의 클래스와 8.9백만 개의 이미지로 구성되어 있습니다. 우리는 Top-1과 Top-5 오류율이 67.4%와 40.9%로 나타났으며, 이는 추가 합성곱 레이어가 포함된 결과입니다. 이 데이터셋에서 가장 좋은 결과는 78.1%와 60.9%의 오류율을 기록한 연구입니다 [19].

  • Table1
    ILSVRC-2010 테스트 셋 결과 비교. 이탤릭체로 표시된 값들은 다른 방법들에 의해 달성된 최고 성능을 나타냅니다.

  • Table2
    ILSVRC-2012 검증 및 테스트 셋의 오류율 비교. 이탤릭체로 표시된 값들은 최고 성능을 나타냅니다. 별표(*)는 "ImageNet Fall 2011 전체 데이터셋"에서 사전 학습(pre-trained)된 모델을 나타냅니다.

주석: Section 4.1에서 설명된 대로, 여러 패치(10개)를 사용하여 예측을 평균하는 방식이 성능을 더 좋게 만듭니다. 그러나, 10개의 패치 평균 없이 단일 패치로만 예측했을 때는 성능이 떨어져 Top-1 오류율이 39.0%, Top-5 오류율이 18.3%였음을 말하고 있습니다.

Figure 4:
(Left) ILSVRC-2010 테스트 이미지 8개와 모델이 가장 가능성이 높다고 판단한 5개의 레이블을 보여줍니다. 각 이미지 아래에 올바른 레이블이 작성되어 있으며, 해당 레이블이 Top-5에 속하는 경우 빨간 막대로 표시되어 있습니다.

(Right) ILSVRC-2010 테스트 이미지 5개(첫 번째 열에 표시)와 각 이미지와 유클리드 거리(Euclidean distance)가 가장 가까운 6개의 학습 이미지들을 보여줍니다. 이 이미지들은 마지막 히든 레이어에서 추출된 특징 벡터 사이의 거리를 기준으로 선정된 것입니다.

6.1 Qualitative Evaluations(정성적 평가)

Figure 3은 네트워크의 두 데이터 연결 레이어에서 학습된 합성곱 커널(convolutional kernels)을 보여줍니다. 네트워크는 다양한 주파수 및 방향에 민감한 커널과 색상이 포함된 여러 형태의 커널을 학습했습니다. Section 3.5에서 설명된 제한된 연결성의 결과로, 두 GPU에서 나타나는 특수화(specialization)에 주목하세요. GPU 1에서 학습된 커널은 대부분 색상에 무관심(color-agnostic)한 반면, GPU 2에서 학습된 커널은 대부분 색상에 특화(color-specific)되어 있습니다. 이러한 특수화는 매번 학습 실행 시 나타나며, 특정 초기 가중치 설정에 의존하지 않습니다(단, GPU의 순번은 변경될 수 있음).

Figure 4의 왼쪽 패널에서는 네트워크가 학습한 내용을 정성적으로 평가하여, 8개의 테스트 이미지에 대한 Top-5 예측을 계산한 결과를 보여줍니다. 네트워크는 이미지 중앙에 있지 않은 객체도 인식할 수 있으며, 예를 들어 왼쪽 위에 있는 진드기(mite)를 인식하는 모습이 나타납니다. 대부분의 Top-5 레이블은 타당해 보입니다. 예를 들어, 표범에 대해 다른 종류의 고양이만이 가능성 있는 레이블로 간주됩니다. 경우에 따라 (그릴이나 체리처럼) 사진의 초점이 모호한 경우도 있습니다.

네트워크의 시각적 지식을 분석하는 또 다른 방법은 4096차원 히든 레이어에서 이미지에 의해 유도된 특징 활성화(feature activation)를 살펴보는 것입니다. 만약 두 이미지가 작은 유클리드 거리로 표현된 특징 활성화 벡터를 생성한다면, 우리는 신경망의 상위 레벨이 이들을 유사하다고 판단한다고 말할 수 있습니다. Figure 4는 테스트 세트에서 5개의 이미지와 이들에 가장 유사한 6개의 학습 세트 이미지를 보여줍니다. 주목할 점은, 픽셀 수준에서 보면 첫 번째 열의 쿼리 이미지와 검색된 학습 이미지들이 일반적으로 L2 거리상 가까운 것은 아닙니다. 예를 들어, 검색된 개와 코끼리는 다양한 자세로 나타납니다. 우리는 많은 테스트 이미지에 대한 결과를 부록 자료에 제공합니다.

4096차원 실수 벡터 간의 유클리드 거리를 사용해 유사도를 계산하는 것은 비효율적이지만, 오토인코더(auto-encoder)를 훈련시켜 이 벡터들을 짧은 이진 코드로 압축하면 효율성을 높일 수 있습니다. 이는 오토인코더를 원본 픽셀에 적용하는 방식보다 훨씬 더 나은 이미지 검색 방법을 제공할 것입니다 [14]. 원본 픽셀에 오토인코더를 적용하는 방식은 이미지 레이블을 사용하지 않기 때문에, 의미적으로 유사하지 않더라도 단순히 엣지 패턴이 유사한 이미지를 검색하는 경향이 있습니다.


용어 설명:

  • 합성곱 커널(Convolutional Kernel): CNN에서 이미지의 특징을 추출하는 필터입니다. 이미지의 작은 부분을 처리하여 경계, 색상, 방향 등의 패턴을 학습합니다.
  • 4096차원 히든 레이어(4096-dimensional Hidden Layer): 네트워크의 마지막 숨겨진 레이어로, 고차원적 특징들을 표현하며, 각 이미지의 중요한 정보를 요약합니다.
  • 유클리드 거리(Euclidean Distance): 두 벡터 간의 직선 거리를 나타내는 수학적 거리 개념으로, CNN에서 이미지 간 유사도를 측정할 때 사용됩니다.
  • 오토인코더(Auto-Encoder): 입력 데이터를 압축하고 복원하는 방식으로 학습하는 신경망 구조로, 데이터의 중요한 특징만을 추출하는 데 사용됩니다.

7. Discussion

우리의 결과는 큰 규모의 깊은 합성곱 신경망이 순전히 지도 학습(supervised learning)만으로도 매우 어려운 데이터셋에서 기록적인 성과를 달성할 수 있음을 보여줍니다. 특히, 네트워크의 성능은 하나의 합성곱 레이어를 제거할 때 저하된다는 점이 주목할 만합니다. 예를 들어, 중간에 있는 어느 레이어를 제거해도 네트워크의 Top-1 성능이 약 2% 감소하는 결과가 나타났습니다. 이로 인해 네트워크의 깊이(depth)가 우리가 달성한 결과에서 중요한 역할을 한다는 것을 알 수 있습니다.

실험을 단순화하기 위해 우리는 비지도 사전 학습(unsupervised pre-training)을 사용하지 않았습니다. 하지만 충분한 컴퓨팅 파워를 확보하여 네트워크의 크기를 크게 늘리고, 이에 상응하는 라벨링된 데이터를 확보하지 않는 상황에서 특히 비지도 학습이 도움이 될 것이라 예상됩니다. 지금까지는 네트워크의 규모를 더 키우고 학습을 더 오래 진행할수록 성능이 개선되어 왔습니다. 하지만 인간의 시각 시스템에서 infero-temporal 경로와 맞먹는 성능을 이루기까지는 아직 갈 길이 멉니다.

궁극적으로 우리는 매우 크고 깊은 합성곱 신경망을 비디오 시퀀스에 적용하고자 합니다. 비디오의 시간적 구조(temporal structure)는 정적 이미지에서는 부족하거나 덜 명확한 유용한 정보를 제공하기 때문입니다.

References 생략

profile
kwonhs.alice@gmail.com

0개의 댓글