AlexNet은 2012년 이미지 분류 대회에서 우승을 차지한 모델입니다.
(해당 모델을 제안한 Alex Krizhevsky의 이름에서 따온 것)
CNN을 사용한 딥러닝 구조에서 어떻게 많은 120만 개의 고해상도 이미지를 그 당시 기술로 처리를 하였고, 파라미터 수가 많은데 과적합 문제를 어떻게 해결했는지 알아볼 수 있는 논문입니다.
3. Architecture
3.1 ~ 3.4는 중요도 평가에 따라 정렬되어, 가장 중요한 것부터 설명합니다.
3.1 ReLU Nonlinearity
일반적으로, 뉴런의 출력은 tanh나 sigmoid 활성화 함수를 거치곤 합니다.
하지만, 이런 saturating nonlinearities를 사용하는 것보다 non-saturating nonlinearities 인 ReLU를 사용하는 것이 학습 속도 측면에서 훨씬 빠르다고 주장합니다. 여기서 saturating은 양의 무한대 또는 음의 무한대로 갈수록 그 기울기가 0으로 수렴하는 것을 말합니다.
위
위 그림을 통해 ReLU(실선)가 tanh(점선)보다 6배 빠르게 학습 오류율 25%에 도달한다는 것을 보여준다.
물론 이런 새로운 활성화 함수로 고려한 것은 AlexNet이 처음이 아닙니다. 기존에도 f(x) = |tanh(x)| 와같은 식이 고안되었으며 오버피팅을 방지하며 잘 작동한다는 논문이 있습니다. 그러나 AlexNet에서는 오버피팅 방지가 아니라 빠른 학습을 요구하기 때문에 ReLU 함수를 사용했습니다.
3.2 Training on Multiple GPUs
저자가 학습에 사용한 GTX 580 GPU 메모리는 3GB에 불과하기 때문에 120만 개의 이미지를 가진 신경망을 학습시키에는 벅찼습니다. 당시 GPU도 서로 다른 GPU의 메모리에 직접 읽고 쓰기가 가능했기 때문에 2개의 GPU를 병렬적으로 사용하여문제를 해결했습니다.
즉, 커널(혹은 뉴런)의 절반만큼 각각의 GPU가 담당하게 되는 것입니다.
다만, 특정 layer에서만 GPU가 서로 상호 작용합니다.
예를 들어 layer3에서의 뉴런들은 layer2의 모든 kernal map들로부터 입력을 받지만 layer4의 뉴런들은 layer3에서 자신의 GPU에 존재하는 kernel map을 입력으로 받습니다.
두 개의 GPU를 사용하는 기법으 error rate를 top-1에서는 1.7%, top-5에서는 1.2가량 줄였으며, 속도도 하나만 사용하는 것보다 조금 더 빨랐다고 합니다.
3.3 Local Response Normalization
ReLU를 사용하면 별다른 normalization 없이도 saturating을 방지할 수 있습니다.
그렇지만, ReLU의 결과값이 너무 커져서 주변 뉴런에 영향을 주는 것을 방지하기 위해 normalization 기법이 필요했습니다. (현재는 주로 Batch Normalization 사용)
a^i_x,y : (x,y)에 위치한 픽셀(뉴런)에 i번째 커널(필터)을 적용하고 ReLU를 사용했을 때 나온 값
N : layer 안에 존재하는 전체 커널(필터)의 수
n: 인접하다고 판단할 범위 값
특정 layer에서만 사용되었고, ReLU를 통해 나온 결과값에 적용을 했습니다.
AlexNet에서는 LRN k=2, n=5, α =1e-04 , β = 0.75 값을 대입하여 top-1의 error rate은 1.4%, top-5의 error-rate은 1.2%만큼 줄었다고 합니다.
3.4 Overlapping Pooling
일반적으로 CNN에서 Pooling은 필터가 겹치지 않고 적용을 했습니다. 하지만 Alexnet에서는 필터가 겹치도록 설계한 후 연산을 수행했습니다. stride =2, kernel(filter) = 3x3 으로 설정하였고, 그 결과로 top-1 error rate와 top-5 error rate가 각각 0.4%, 0.3% 줄었다고 합니다.
저자들은 이 overlapping pooling이 overfit되기 조금 더 어렵게 만든다고 관찰했다고 합니다
3.5 Overall Architecture
총 8개의 layer로 구성되어 있으며, 그 중 5개가 Convolutional Layer이고 3개가 Fully Connected Layer입니다.
FC Layer의 마지막 부분은 softmax함수를 사용하여 1000개의 output을 출력합니다.
(*1000개의 카테고리로 이루어진 대규모 데이터셋)
2,4,5번째 Convolutional Layer에서 이전 layer에서 같은 GPU에 존재하는 Kernel map에서만 input을 받아들이고
3번째 Convolutional Layer에서는 GPU간의 communication을 통해 이전 layer에서 연산된 2개의 GPU 결과를 모두 받아오도록 만든 것을 확인할 수 있습니다.
Local Response Normalization Convolution layer의 1번째와 2번째 layer에서 사용이 되고, Overlapping Pooling을 진행하는 Max pooling은 Convolution layer의 1번째, 2번째 그리고 마지막인 5번째 layer에서 사용하고 있습니다.
모든 Layer에서 ReLU 활성화함수를 사용합니다.
[Layer 별 정리]
1st layer(Conv)
- input : 227x227x3 (224x224x3 오류)
- filter : 11x11x3. 96개, stride(4), padding(0)
- GPU 1개의 Convolution 연산 결과: 55x55x48
- activation : ReLU + LRN + MaxPooling
- 총 결과(GPU 1개) : 27x27x48
2nd layer(Conv)
- input : 27x27x48
- filter : 5x5x48. 256개, stride(1), padding(2)
- GPU 1개의 Convolution 연산 결과: 27x27x128
- activation : ReLU + LRN + MaxPooling
- 총 결과(GPU 1개) : 13x13x128
3rd layer(Conv)
- input : 13x13x128 x (2개)
- 유일하게 이전 layer에서 모든 kernel map들과 연결됨
- filter : 3x3x256. 384개, stride(1), padding(1)
- GPU 1개의 Convolution 연산 결과: 13x13x192
- activation : ReLU
4th layer(Conv)
- input : 13x13x192
- filter : 3x3x192. 384개, stride(1), padding(1)
- GPU 1개의 Convolution 연산 결과: 13x13x192
- activation : ReLU
5th layer(Conv)
- input : 13x13x192
- filter : 3x3x192. 256개, stride(1), padding(1)
- GPU 1개의 Convolution 연산 결과: 13x13x128
- activation : ReLU
6th layer(FC)
- Neurons : 4096
- activation: ReLU
7th layer(FC)
- Neurons : 4096
- activation : ReLU
8th layer(FC)
- Neurons : 1000
- activation : Softmax
4. Overfitting 관리
4.1 Data Augmentation (데이터 증강)
오버피팅을 줄이기 위한 가장 쉬운 방법은 데이터의 수를 증가시키는 것입니다.
즉, 데이터의 라벨이 변형되지 않은 선에서 데이터를 임의로 추가하여 크게 하는 것입니다.
따라서 저자들은 2개의 데이터 증강 방식을 선택했으며 특히 그 연산량이 적어서 따로 저장공간에 저장할 필요 없이 연산할 때마다 바로바로 처리할 수 있다고 합니다.
첫 번째 변형 방법은 "이동"과 "좌우반전"입니다.
이미지(256x256)를 좌우반전시켜도 이미지의 라벨은 변하지 않기 때문에 좌우반전 후 256x256 크기의 이미지에서 랜덤하게 224x224 크기의 patch를 잘라냈습니다. 이 방법은 상호의존성이 높지만 훈련데이터를 2048배나 증가시켰습니다.
test 시에는 224x224 patch들을 총 5개(좌상단,우상단,좌하단,우하단 꼭지점에 붙인 4개의 patch와 가운데 patch 1개)와 이를 좌우 반전하여 총 10개 patch를 뽑아냅니다. 그리고 각 패치들에 대해서 네트워크의 softmax 결과를 평균화하여
prediction 진행합니다.
두 번째 방법은 "PCA"를 사용하여 RGB 채널의 색상강도를 조절하는 방법입니다. 주성분(PCA)를 진행하고
평균(0), 표준편차(0.1)을 갖는 가우시안 분포에서 랜덤 변수를 추출한 후, 원래의 픽셀 값에 곱해주어 색상의 변형을 주는 방법입니다. 이 방식을 사용하게 되면 원래의 라벨을 해치지 않으면서 색상의 변형을 일으키는 것이 가능합니다.
4.2 Dropout
Dropout 기법은 사용자가 지정한 확률을 근거로 하여 특정 뉴런에 신호를 전달하지 않는 방법을 말하며, 이를 통해 모델의 복잡성을 크게 감소시는 것이 가능합니다.
저자들은 50% 확률로 네트워크에 포함된 뉴런들이 다음 뉴런으로 신호를 전달하지 않도록 설정하였습니다.
AlexNet에서는 처음 두개의 FC Layer에 적용하였고, Dropout 없이는 Overfitting에 시달렸다고 합니다. 그러나 Dropout은 신경망이 수렴하기 위해 필요한 iteration 수를 약 2배 증가시킵니다.
5. 학습 세부 사항
저자는 배치 사이즈를 127로, 모멘텀을 0.9로, weight decay는 0.0005로 조정했습니다.
적은 양의 weight decay는 모델의 훈련 오류를 감소시킵니다.
*weight decay: 학습된 모델의 복잡도를 줄이기 위해 가중치가 너무 큰 값을 가지지 않도록 손실함수에 가중치가 커질 때에 대한 패널티 항목을 넣어주는 것. 대표적으로 L1, L2 규제.
또한, learning rate은 0.01에서 시작해 validation error가 현재의 learning rate에서 더 이상 감소하지 않을 경우 1/10만큼 감소시켰습니다.
'논문 리뷰 > CV' 카테고리의 다른 글
[X:AI] InceptionV2/3 논문 리뷰 (0) | 2024.03.14 |
---|---|
[X:AI] SPPNet 논문 리뷰 (0) | 2024.03.10 |
[GoogLeNet] 24.01.23 스터디 (논문) (0) | 2024.01.23 |
[VGG] 24.01.23 스터디 (논문) (0) | 2024.01.21 |
[LeNet] 24.01.19 스터디 (논문) (0) | 2024.01.19 |