1. Introduction
초기에는 MNIST,CIFAR-10 같은 소규모 이미지 데이터셋(수만 장)만 있었기 때문에, 단순한 이미지 분류 작업에는 충분했습니다. 하지만 실제 사진 속 사물들은 다양성도 많고 복잡도가 높았습니다.
이러한 현실적 문제를 해결하기 위해 더 많은 데이터셋과 복잡한 구조를 가진 모델이 필요했습니다.
ImageNet이라는 2만 2천이 넘는 카테코리에 대해 1500만장이 넘은 labeled 데이터셋이 등장하게 됩니다.
본 논문은 CNN을 소개하고 있는데, CNN은 이미지 데이터의 특성을 잘 반영하도록 설계된 구조입니다.
이미지에서 인접한 픽셀 간의 관계나 위치와 무관한 패턴이 중요하며, CNN은 이러한 특성을 고려해 파라미터 수를 줄이면서도 강력한 표현력을 가질 수 있도록 구성되었고, 학습 속도 또한 빠릅니다.
본 논문에서 AlexNet의 핵심 기여를 소개하고 있는데, 다음과 같습니다.
- 당시 기준으로 가장 큰 규모의 CNN을 훈련시켰습니다.
- ILSVRC 2012 대회에서 우승했으며, top-5 오류율 15.3%를 기록했습니다.
- 5개의 convolution layer 와 3개의 fc layer 를 사용했는데 convolution layer중 어떤 layer를 제거해도 성능이 떨어지지 않았습니다.
2. The Dataset
ImageNet
- AlexNet이 학습한 데이터셋
- 1500만장의 고해상도 이미지와 2만
- 2천개의 카테고리로 구성된 대규모 이미지 데이터셋
- 사람이 직접 label을 부여함
AlexNet은 ImageNet 전체가 아닌, ILSVRC라는 대회용 서브셋을 사용했습니다.
- ILSVRC-10 (데스트 라벨이 공개된 유일한 버전)
- Train: 120만장
- Valid: 5만장
- Test: 15만장
- 클래스 수: 1000개
대회에서 모델의 성능을 Top-1/Top-5 오차율로 평가합니다.
- Top-1: 예측 1순위가 정답이 아닌 비율
- Top-5: 상위 5개 예측 중 정답이 포함되지 않은 비율
이미지 전처리 방식
ImageNet의 원본이미지는 해상도가 제각각 이였는데, AlexNet은 압력 크기가 고정된 이미지를 필요로 했기 때문에 아래와 같은 전처리를 적용했다고 합니다.
- 짧은 변을 기준으로 256픽셀로 리사이즈
- 중앙에서 256*256 크기의 정사각형 잘라내기
- 각 픽셀에서 전체 훈련 세트의 평균값을 빼기
- 그 외 전처리 하지 않음
논문의 3번의 내용이 잘 와닿지 않아 열심히 서칭을 해봤습니다.
딥러닝 모델이 이미지를 숫자로 이해를 하는데, 어떤 픽셀 값이 [220,220,170](R,G,B) 이라면 산만하고 해석하기 어려운 상태라고 합니다.
그래서 전체 데이터의 R의 평균 , G의 평균, B의 평균을 각각 픽셀에서 빼보는 겁니다.
만약 RGB의 평균이 각각 215,220,160이라면 위에의 제시했던 픽셀 값이 [5,0,10]이 되어 RGB가 0주변으로 정리 되어 학습이 훨씬 수월해진다고 합니다.
코드로도 구현해 봤습니다.
# (1) 이미지 한 장 (RGB 값 0~255)
image = np.array([[[135, 130, 120], [140, 120, 110]],
[[125, 135, 115], [130, 125, 105]]], dtype=np.float32)
# (2) 훈련 전체의 RGB 평균값
mean = np.array([123, 117, 104]) # 예시: [R 평균, G 평균, B 평균]
# (3) 평균 빼기 (정규화)
image_centered = image - mean # shape 자동 맞춰짐
3. The Architecture
AlexNet은 총 8개의 레이어로 구성되어있고, 아래의 3.1~3.4절의 내용으로 구조의 중요하다고 생각한 기술 요소들을 설명 하겠습니다.
3.1 ReLU Nonlinearity
딥러닝에서는 뉴런은 입력값과 가중치를 곱해서 더한후, 그 결과에 비선형 함수를 적용하게 됩니다.
이 비선형 함수에 왜 출력값을 대입하냐면, 복잡한 패턴을 학습할 수 있는 표현력이 생기기 때문입니다.
기존에는 tanh나 sigmoid 같은 비선형 함수가 사용되었습니다.
하지만 이 함수들은 출력값이 일정한 범위에 갇히는 포화 현상 때문에, 기울기가 사라지고 학습 속도가 느려지는 문제가 있었습니다.
예를 들어 sigmoid 함수의 경우


-> 이 함수의 출력 값은 0~1 사이입니다.
문제가 생기는 상황은 어떤 뉴런에 너무 큰 값 또는 작은 값이 들어갔을 때 생깁니다.
출력이 0 또는 1에 딱 달라 붙어버리게 되는데, 이 상황을 '포화(saturation)' 이라고 부릅니다.
딥러닝은 학습할 때 gradient를 사용합니다.
즉, 모델이 얼마나 틀렸는지를 계산해서 가중치를 조금씩 조정하는 방식을 의미합니다.
그런데 위처럼 출력이 0.0000001이나 0.9999999처럼 끝에 붙어버리면
그 함수의 기울기는 거의 0이 되므로, 가중치를 얼마나 바꿔야 하는지 계산이 되지 않게 됩니다.
본 논문에서 제안한 ReLU는 F(x) = max(0,X)

기울기도 항상 1이므로, 큰 입력에도 죽지 않고 학습이 계속되게 됩니다.

또한 본 논문에서 이야기 하듯이, ReLU함수는 더 적은 Epoch의 수로 Training Error를 0.25수준으로 낮춘것을 제시하고 있습니다.
전통적인 함수들을 대체하려고 시도한것은 본 논문의 저자가 처음 시도한것 이 아니긴하지만, Jarrettet al 같은 경우는, overfitting을 방지하는것에 집중했고 저자는 더 적은 시간으로 효율적으로 할 수 있는 방법에 집중했다고 서술하고 있습니다.
3.2 Training on Multiple GPUs
AlexNet이 등장하던 당시, 사용하던 GPU는 GTX 580입니다.
메모리가 고장 3GB였는데, 120만장의 ImageNet 데이터를 학습하는데 필요한 모델 크기가 매우 컸기 때문에 GPU 한대로는 효율이 나오지 않을것 이라고 생각했습니다.
그래서 GPU를 두 개를 사용하게 되는데, 병렬로 학습하도록 설계를 하였습니다.
- 천체 뉴런(커널)을 반으로 나누어, GPU1, GPU2에 각각 배치
- 모든 층에서 두 GPU가 통신하지는 않음
- 특정 층에서만 GPU 간 데이터를 주고 받도록 제한
이렇게 설계함으로써, 연산은 병렬화되면서, 통신 부담은 최소화 시켰습니다.
예를들어, 3번째 층의 커널은 모든 2번째 층 출력을 입력으로 받지만 4번째 층은 같은 GPU에 있는 3번째 층의 출력만 입력으로 받게하여, GPU간의 입력을 제한함으로 성능에도 집중을 했음을 알 수 있습니다.
본 논문에서 GPU 2개를 사용하여 얻은 효과는 Top-1 error , Top-5 error 각각 1.7% , 1.2% 감소가 되었음을 언급하고 있습니다.
3.3 Local Response Normalization
3.1절에 소개했듯이 AlexNet은 ReLU 활성화 함수를 사용했습니다.
ReLU 함수를 통해 기울기 소실 문제 없이 빠른 학습이 가능해졌습니다.
하지만 저자들은 여기에 한가지를 제안하는데, Local Response Normalizaion(국소 반응 정규화) 입니다.
LRN은 CNN의 출력값(특징 맵) 중 서로 인접한 커널들끼리 출력을 경쟁시켜,
일부 뉴런의 출력이 과도하게 커지는 것을 억제하는 방식입니다.
과도하게 커진 뉴런의 출력 값이 학습의 좋은 영향을 끼치지 못할 수 있으므로, 인접한 커널들의 값을 고려하여
한 커널이 이상값이 나오지 않도록 조절하게 되는것입니다.

LRN 수식
수식을 보면 복잡하지만, 해당 위치의 출력을 주변 커널들의 출력한 값들의 제곱합으로 나눈 형태입니다.
이렇게 함으로써 일반화 성능을 높일 수 있게 되었습니다.
실제 효과는 Top-1 Error , Top-5 Error 각각 1.4% , 1.2% 가 감소되었고, CIFAR-10 데이터셋도 정규화 없이 했을때는 13% 오류율에서 정규화를 적용하여 11% 오류율을 보였습니다.
3.4 Overlapping Pooling
Pooling(풀링)이란?
CNN에서 합성곱층의 특징 맵을 압축하고 요약하는 역할을 의미합니다.
해당 영역에서 가장 강한 특징을 남겨주는 방식입니다.
풀링을 사용함스로써, 연산량을 줄이고, 위치 변화에 덜 민감해지며, 과적합을 줄이는 효과를 기대할 수 있습니다.
전통적인 풀링은 풀링 영역이 서로 겹치지 않도록 설계했지만
AlexNet은 풀링영역을 겹치도록 설계하고 있습니다.
제가 예전에 블로그에 올린 내용 참고하면 될것 같습니다.
https://blog.naver.com/qkdgywjd01/223643087769
CNN 이해하기 - 이론공부 Day 3
CNN: Convolutional Neural Network CNN의 탄생 배경 4K USD 사진을 만약 인공 신경망으로 처...
blog.naver.com
그래서 겹치는 풀링을 사용함으로써 Top-1 Error ,Top-5 Error 각각 0.4% , 0.3% 감소의 효과를 주었습니다.
3.5 Overall Architecture

AlexNet은 총 8개의 학습 가능한 층으로 이루어져 있습니다.
층 종류
|
개수
|
특징
|
합성곱층 (Conv)
|
5개
|
필터를 사용해 특징 추출
|
완전연결층 (FC)
|
3개
|
분류기 역할 수행
|
출력층
|
Softmax (1000-way)
|
1000개 클래스 확률 출력
|
각 층의 구성은
입력
- 크기: 224 × 224 × 3 (RGB)
Conv1
- 필터: 11×11×3, 96개, 스트라이드 4
- 후처리: ReLU → 정규화(LRN) → Max pooling
Conv2
- 필터: 5×5×48, 256개 (GPU 분할로 채널 수 절반)
- 후처리: ReLU → 정규화(LRN) → Max pooling
Conv3
- 필터: 3×3×256, 384개
- 모든 2번 층 출력을 입력받음 (GPU 간 연결 존재)
- 후처리: ReLU
conv4
- 필터: 3×3×192, 384개
- 같은 GPU 내 3번 층 출력만 입력으로 받음
- 후처리: ReLU
Conv5
- 필터: 3×3×192, 256개
- 후처리: ReLU → Max pooling
완전연결층 (Fully-connected layers)
- FC1: 4096개 뉴런
- FC2: 4096개 뉴런
- FC3: 1000개 출력 뉴런 (Softmax 적용)
- 모든 FC 층에도 ReLU가 적용됩니다
4. Reducing Overfitting
Alexnet의 경우 6천만 개의 파라미터를 가지고있는데, 이 많은 파라미터를 과적합 없이 학습시키기엔 부족하다고 드러나서 Data Augmentation과 DropOut을 제안합니다.
4.1 Data Augmentation
본 논문에서는 데이터를 인위적으로 늘리는 방법을 크게 두가지로 제안합니다.
- 무작위 자르기 + 좌우 반전
AlexNet은 훈련 이미지의 크기를 256*256으로 고정한 후,
여기서 무작위 224*224 패치를 잘라내어, 그 패치를 좌우로 반전시켜 사용했스빈다.
- 이 방식으로 데이터셋을 수천배 확장하는 효과를 냈습니다.
- 디스크에 이미지 파일을 새로 저장하지 않고, CPU가 실시간으로 잘라주는 방식을 사용함으로써 메모리 효율도 얻게 되었습니다.
2. 조명과 색상의 변화
AlexNet은 두번째로, 이미지의 색상이나 밝기를 랜덤하게 변화시키는 기법을 사용하여,
조명변화에도 객체는 여전히 동일하게 인식되어야 한다는 조건을 반영하였습니다.
이 기법으로 Top-1 Error가 1% 이상 줄어들었습니다.
제가 데이터를 가지고 이래저래 해봤던 내용입니다. 참고하셔도 좋을것 같습니다.
4.2 Dropout
여러 모델을 결합하는 앙상블 모델은 테스트 정확도가 올라갑니다. 하지만 대형 모델은 하나만 학습하는데도 오래걸리기 때문에 여러개를 훈련시키는건 사실상 불가능합니다.
그래서 저자는 드롭아웃을 제안합니다.
- 학습 중에 임의로 일부 뉴런을 꺼버리는 기법입니다.
- FC 층에 자주 사용됩니다.
예를들어, 뉴런의 절만을 꺼버리면 그 순간은 다른 구조의 서브 네트워크가 학습되어,
다양한 구조를 학습하게 됩니다.
즉, 뉴런들이 특정한 조합에 의존하지 않고, 독립적이고 특징을 학습하게 됩니다.
VGG를 이용하여 이미지 분류 -Day 6
데이터셋: CIFAR-10 평가지표: CE오차 앞선 CIFAR-10 데이터셋은 학습에 오랜시간이 걸리는데,...
blog.naver.com
드롭아웃은 많은 모델에서 사용되고 있습니다.
5. Result
항목
|
내용
|
대회명
|
ILSVRC-2010 / ILSVRC-2012
|
Top-1 오류율 (2010)
|
37.5%
|
Top-5 오류율 (2010)
|
17.0%
|
Top-5 오류율 (2012)
|
15.3% (1위)
|
2위 Top-5 오류율 (2012)
|
26.2%
|
이 표는 AlexNet 모델의 핵심 구조와 대회 성능을 한눈에 보여줍니다.
- Top-1 / Top-5 오류율 항목은 실제 대회에서 평가된 주요 지표로, AlexNet이 경쟁 모델들보다 얼마나 뛰어났는지를 수치로 증명합니다.
전략
|
목적
|
효과
|
ReLU
|
빠른 학습, 기울기 소실 방지
|
학습 수렴 속도 향상
|
LRN
|
국소 정규화, 과적합 억제
|
Top-5 오류율 1.2% 감소
|
Overlapping Pooling
|
정보 손실 최소화
|
일반화 성능 개선
|
Data Augmentation
|
학습 데이터 확장
|
과적합 감소, Top-1 오류율 >1% 감소
|
Dropout
|
앙상블 효과, co-adaptation 억제
|
Top-1 오류율 1% 감소
|
2-GPU 구조
|
메모리 한계 극복
|
학습 가능 구조 확장 + 오차율 감소
|
이 표는 저자가 제안한 방법을 간략히 정리해 보았습니다.
나의 한마디
CNN으로 전에 코딩하면서 모델을 만져본적이 있어 이해할때 빠르게 이해가 된것 같네요. ㅎㅎ