Bag of Tricks for Image Classification with Convolutional Neural Networks (CVPR 2019) Paper Review
1. Bag of Tricks for Image Classification
with Convolutional Neural Networks (CVPR 2019)
Tong He, Zhi Zhang, Hang Zhang, Zhongyue Zhang, Junyuan Xie, Mu Li
Amazon Web Services
Review by Hyunwoong (github.com/gusdnd852)
1
2. 2
Abstract
1) Background :
최근까지 연구되어왔던 여러가지 기법(Tricks) (e.g. Data Augmentation, Optimization Methods 등)의
발전으로 Image Classification 성능이 상당히 개선되었음.
2) Problem Definition :
그러나 대부분 기법들은 구현 세부사항으로 간단히 언급되거나 소스코드에서만 확인할 수 있음.
때문에 우리가 이러한 기법들을 언제 어떻게 사용하면 얼마나 좋은 지 정확히 알기 어려움.
3) Objective of Paper :
여러 논문에서 소개되었던 기법들을 검토하고 적용해보는 연구를 통해 해당 기법들이 최종 모델 정확도에 미치는 영향을
경험적으로 측정하여 평가하는 것이 이 논문의 목표.
3. 3
Presentation Outline
1) Bag of Tricks for Image Classification with Convolutional Neural Networks에서 소개되는 Trick들을 순서대로 소개
2) 단순히 “잘 되더라” 식으로 넘어가지 않고 왜 그 Trick이 잘 되는지에 대해 관련된 Paper들의 간단한 Summary를 진행 (Paper in Paper)
3) Bag of Tricks for Image Classification with Convolutional Neural Networks에서는 어떤 방식으로 적용했고, 실험 결과는 어땠는지 설명
5. 5
1. Introduction
◎ 2012년 AlexNet의 등장 이후 Convolutional Neural Network는
Image Classification의 주인공이 되었음. 매년 새로운 CNN 아키텍처들
이 쏟아져 나왔으며, 분류 정확도를 높은 수준으로 향상 시켰음.
◎ 그러나 분류 정확도를 향상 시키는데 공헌한 것은 모델 아키텍처만
이 아님. Loss 함수를 변형하거나, 데이터 전처리방법을 변형하거나,
Optimizer를 변형하는 등 지난 10년간 매우 많은 기법들이 제안되어왔
지만 모델 아키텍처에 비해 많은 주목을 받지 못함.
6. 6
1. Introduction
◎ 이러한 기법들은 대부분 구현 세부사항으로 간단하게 설명되고 넘어가
거나, 아예 소스코드에만 존재하는 Trick들도 매우 많았음. 때문에 이 논문
에서는 그러한 기법들(Bag of Tricks)을 모아서 적용하고 성능을 측정함.
◎ 여러 모델에서 이러한 기법들을 비교하는 것은 어렵기 때문에
ResNet-50 모델을 기준으로 적용해보고 실험해 봄. 그 결과, 여러가지 기
법의 조합만으로 SE-ResNeXt-50 등의 최신 모델 아키텍처를 적용한 것보
다 더 좋은 성능을 보였으며, 동일한 방법을 Inception-V3, MonileNet 등
다른 모델 아키텍처에서도 적용할 수 있음을 확인함.
8. 8
2. Training Procedure (Baseline)
◎ 논문에서 제시하는 Baseline 모델의 Training Procedure는 다음과 같음.
우리가 잘 알고있는 기본적인 미니배치 학습과정을 나타낸 것으로 우측 하
단의 Pytorch 코드와 동일함. (매우 전형적인 뉴럴넷의 학습 구조임)
◎ 학습과정에서 사용되는 파라미터 (epoch 등)은 하이퍼 파라미터로 여러
가지 조합으로 구현될 수도 있음.
9. 9
2. Training Procedure (Preprocessing – Similar with VGG)
◎ Preprocessing for Training
1) 랜덤 샘플링을 통해 이미지를 추출하고 32bit float 타입으로 변환 (Raw Pixel의 범위는 [0,255])
2) 영역 크기는 [8%, 100%] 범위 내에서 화면비를 [3/4, 4/3] 사이 값으로 랜덤 샘플링한 영역을 크롭 후 224 x 224 크기로 리사이즈
3) 50% 확률로 이미지 flip (좌우 회전)
4) hue, saturation, brightness 조절 값을 [0.6, 1.4] 사이의 값을 랜덤으로 뽑아서 적용
5) 정규분포 N(0, 0.1)에서 값을 하나 샘플링 하여 PCA noise 추가
6) RBG 채널에 대해 (123.68 , 116.779 , 103.939)를 뺌 (평균 값 보정)
◎ Preprocessing for Validation
1) 가로 세로 비율을 유지하면서 각 이미지의 짧은 가장자리 크기를 256픽셀로 조정
2) 센터 크롭으로 224 x 224 영역을 잘라내고 Training과 유사한 RGB 채널로 정규화
◎ Other Setting for Training
1) 모든 convolution layer의 파라미터는 Xavier 초기화 사용
2) 모두 NAG가 적용되었고 120 epochs까지 학습
3) 8개의 v100 GPU에서 테스트되었고 batch size는 128로 적용
4) Learning rate는 0.1로 초기화 되어있고 30, 60, 90번째 epoch마다 10으로 나눔
13. 13
3. Efficient Training (Large Batch Training)
3-1-1. Mini Batch Stochastic Gradient Descent
◎ Full Batch Gradient Descent
Full Batch Gradient Descent는 Gradient를 정확하게 계산할 수 있지만 매 Iteration 마다 전체 데이터에 대한 Loss를 계산해야 함
◎ Stochastic Gradient Descent
이를 개선한 방법이 한 번의 Iteration에 하나의 Example만 사용하는 Stochastic Gradient Descent (이하 SGD)
SGD는 매우 빠르지만, 추정 값이 너무 Noisy해진다는 단점이 있음
◎ Mini Batch Stochastic Gradient Descent
이를 개선한 방법이 매 Iteration마다 적당한 Mini Batch (m examples)에 대한 Gradient를 계산하는 Mini Batch SGD
그러나 Batch Size는 Hyperparameter임. Batch Size는 어느 정도로 설정해야 하며, 학습에 어떤 영향을 미칠까?
14. 14
3. Efficient Training (Large Batch Training)
3-1-2. Effect of Batch Size
◎ Large Batch Size를 사용하면 Computation Efficiency 가 좋음 (학습속도 빠름)
- Full Batch Gradient Descent는 전역 최소점을 더욱 효율적으로 찾음
- Mini Batch Stochastic Gradient Descent는 더욱 비효율적인 경로를 거침
◎ Small Batch Size를 사용하면 Generalization이 잘 됨 (Validation 성능 좋음)
- Revisiting Small Batch Training for Deep Neural Networks
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
◎ Large Batch Size를 사용하여 Computation Efficiency를 높이면서 Generalization을 잘 되게 하는 방법은 없을까?
- Accurate, large minibatch SGD: Training Imagenet in 1 Hour
- Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes
15. 15
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- Revisiting Small Batch Training for Deep Neural Networks
◎ m의 Batch Size 을 이용하여 n의 Step만큼 Weight Update를 진행할 때 Update 되는 값은 아래와 같음
◎ 여기에서 batch size를 n배 증가시키면 같은 example에 대해 Update되는 값은 아래와 같음
◎ small batch size (m)의 경우 parameter space 상에서 보다 최신상태의 gradient를 사용할 수 있는데 반해, Large batch(nm)의 경우 오래 전
상태의 gradient를 사용해야함. Deep neural network의 loss function 같은 복잡한 non-convex function일수록 gradient 값은 parameter 상태에
따라 크게 변하게 되므로 large batch size를 사용하면 오래전의 부정확한 weight로 업데이트 할 가능성이 커짐
n step m examples
1 step nm examples
16. 16
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- Revisiting Small Batch Training for Deep Neural Networks
With Batch NormalizationWithout Batch Normalization
17. 17
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
◎ Large batch를 사용할수록 training function의 sharp minima로 수렴할 가능성이 높아지고, 이는 generalization 성능을 저하시킴
Flat한 minima의 경우 작은 변화에 대해 둔감하지만, Sharp한 minima의 경우 작은 변화에 대해서 매우 민감함 → generalization에 불리
18. 18
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
◎ Small batch’s sharpness < Large batch’s sharpness (empirical)
19. 19
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
◎ Small batch alpha = 0, Large batch alpha = 1 (empirical)
20. 20
3. Efficient Training (Large Batch Training)
3-1-3. Benefit of Small Batch Training
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
◎ batch size가 커짐에 따라 sharpness가 증가하고, 그에 따라 accuracy가 줄어듦 (empirical)
21. 21
3. Efficient Training (Large Batch Training)
How to Improve both generalization ability and computation efficiency?
(Computation Efficiency + Generalization Ability 두 마리 토끼 잡기)
22. 22
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
1) Linear Scaling Rule : Batch Size를 증가시킬 때 Learning Rate도 비례해서 증가시키자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ Mini-Batch SGD (m = batch size)
◎ 이 때 특정 스텝에서의 (weight update)를 Random Variable로 보면 기대 값(평균)은 다음과 같음
◎ 이 때 특정 example에 대한 (weight update)의 기대 값(평균)은 다음과 같음
23. 23
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
1) Linear Scaling Rule : Batch Size를 증가시킬 때 Learning Rate도 비례해서 증가시키자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ Cost of Computation의 Unit에 대한 Weight Update 기대 값 을 일정하게 유지하기 위해서는 를 일정하게 유지해야 함
◎ Linear Scaling Rule을 적용함으로써 Batch Size에 상관없이 일정한 weight update의 기대 값을 유지하게 하였음
논문에서는 Batch Size = 256, Learning Rate = 0.1으로 선정 한 후 Batch Size를 b로 키워야 하면, Learning Rate도 0.1 * b/256 으로 키움
Same !
Same !
Same !
24. 24
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
2) Learning Rate Warmup : 초반에는 낮은 Learning Rate를 유지하자 !
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ 학습초반에는 모든 파라미터가 랜덤으로 초기화 된 상태인데, 실제 최종 결과값과는 차이가 큼
◎ 이러한 상태에서 큰 Learning Rate를 사용하게 되면 수치적으로 매우 불안정한 상태에 머물게 됨
◎ 이 때 사용하는 것이 Warm Up 기법으로, 학습이 불안정한 초기에는 매우 낮은 Learning Rate를 설정하는 것.
◎ Weight 값들이 어느정도 안정을 찾게 되면 본래의 높은 Learning Rate를 적용하는 방식
25. 25
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
2) Learning Rate Warmup : 초반에는 낮은 Learning Rate를 유지하자 !
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ Constant Warmup : 일정하게 작은 상수를 초기에 Learning Rate로 지정하고 일정 Epoch이상이 되면 본래의 Learning 적용
◎ Gradual Warmup : 매우 작은 수를 Learning Rate로 지정하고, 일정 Epoch전까지 초기 Learning Rate까지 선형적으로 증가시킴
◎ Detection이나 Segmentation에서는 Constant Warmup도 효과가 있었으나 Classification에서는 Gradual Warmup이 좋음 (empirical)
◎ 논문에서는 Learning Rate를 0으로 시작하여 5 Epoch 동안 초기 Learning Rate인 0.1까지 증가시킴
26. 26
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
3) Zero Gamma : Resnet에서 마지막 Batch Normalization의 gamma를 0으로 초기화 하자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
27. 27
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
3) Zero Gamma : Resnet에서 마지막 Batch Normalization의 gamma를 0으로 초기화 하자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ Residual Block Pseudo Code
def resnet_block(X):
“”” Conv(X) ≡ Normalized Convolution ~ N(0,1)”””
shortcut = X
X = ReLU(γ * Conv(X) + β) <------------- (γ=1, β=0)
X = ReLU(γ * Conv(X) + β) <------------- (γ=1, β=0)
X = γ * Conv(X) + β <-------------------- (γ=0, β=0)
X = shortcut + X (=매우 작은 값) <--------- X = shortcut + 0
return ReLU(X)
◎ γ 가 크게 변하기 전, 학습초반에는 그냥 ReLU Activation을 태우는 것과 비슷함
def resnet_block(X):
return ReLU(X + small term)
28. 28
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
3) Zero Gamma : Resnet에서 마지막 Batch Normalization의 gamma를 0으로 초기화 하자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ 각 Layer의 γ값들이 크게 조정되기 전(학습 초기)까지는 아래와 같이 Network 구조가 단순해지고 학습이 빨라지는 현상이 생기게 됨
29. 29
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
3) Zero Gamma : Resnet에서 마지막 Batch Normalization의 gamma를 0으로 초기화 하자!
from 「Accurate, large minibatch SGD: Training Imagenet in 1 Hour」
◎ Backpropagation of Batch Normalization
30. 30
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
4) No Bias Decay : 오직 Weight만 Regularization 하자 !
from 「Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes」
◎ 오직 Weight에만 Decay를 적용하고, Bias, Batch Norm Gamma, Batch Norm Beta 등은 Decay하지 않음
Loss = Loss + ½ λ (Parameters)2
: L2 Regularization
Parameters = {Weight, Bias, Gamma, Beta}
31. 31
3. Efficient Training (Large Batch Training)
3-1-4. improving both generalization ability and computation efficiency in Large Batch Training
4) No Bias Decay : 오직 Weight만 Regularization 하자 !
from 「Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes」
◎ Bias, Gamma, Beta는 전체 파라미터의 0.02%에 불과한데 이 값들을 Decay시키면 상당한 Underfitting이 일어날 수 있음
Weight은 너무 큰 값을 갖지 못하게 Decay해주고, 나머지 값들은 보존할 필요가 있음 (from Deep Learning Book by Goodfellow and others)
33. 33
3. Efficient Training (Low Precision Training)
3-2. Low Precision Training : 더 낮은 Floating Point 타입을 사용하자 ! (FP32 → FP16)
from 「Mixed Precision Training」
◎ 기존 신경망을 학습할 때 FP32를 사용하였음. 그러나 최신 GPU들이 Lower Precision 계산을 지원하면서 속도면에서 큰 이점을 얻을 수 있게 됨.
NVDIA V100은 FP32에서 14TFLOPS를 제공하지만, FP16에서는 100TFLOPS가 넘는 속도를 보여줌. 논문에서는 16FP를 적용할 경우 최종적으로
2~3배 빠른 학습이 가능하다고 주장함 (TFLOPS = 초당 부동소수점 연산)
34. 34
3. Efficient Training (Low Precision Training)
3-2. Low Precision Training : 더 낮은 Floating Point 타입을 사용하자 ! (FP32 → FP16)
from 「Mixed Precision Training」
◎ Mix Precision Training에서는 Master Weight는 FP32로, Gradient를 계산할 때는 FP16을 사용하였음.
그러나 FP16의 경우 미세한 Gradient 값들이 무시되어 정확도가 다소 감소할 우려가 있음
35. 35
3. Efficient Training (Low Precision Training)
3-2. Low Precision Training : 더 낮은 Floating Point 타입을 사용하자 ! (FP32 → FP16)
from 「Mixed Precision Training」
◎ 때문에 Loss에 일정한 상수를 곱해 Loss Scaling을 진행함. 이로 인해 정확도를 거의 유지하면서 훨씬 빠른 속도로 학습할 수 있었음
(e.g. Loss * 500으로 Scaling, 0.000000555 → 0.000277500, 이로 인해 0.000277이라는 Gradient를 학습에 사용할 수 있게 됨)
Scaling !
36. 36
3. Efficient Training (Low Precision Training)
3-2. Low Precision Training : 더 낮은 Floating Point 타입을 사용하자 ! (FP32 → FP16)
from 「Mixed Precision Training」
◎ 때문에 Loss에 일정한 상수를 곱해 Loss Scaling을 진행함. 이로 인해 정확도를 거의 유지하면서 훨씬 빠른 속도로 학습할 수 있었음
(e.g. Loss * 500으로 Scaling, 0.000000555 → 0.000277500, 이로 인해 0.000277이라는 Gradient를 학습에 사용할 수 있게 됨)
40. 40
4. Model Tweak (Baseline)
◎ Model Tweak : Convolution Layer의 Stride, Padding 등을 변경하는 것과 같은 Minor 모델 변경 작업을 의미
◎ Baseline 모델(ResNet-A)은 Input Stem 영역(7x7 Conv)가 존재하고 이후 4개의 Stage 모듈을 지나 Output 레이어로 구성됨
41. 41
4. Model Tweak (Baseline)
◎ Model Tweak : Convolution Layer의 Stride, Padding 등을 변경하는 것과 같은 Minor 모델 변경 작업을 의미
◎ Stem 영역에서는 이미지의 크기를 4배 줄이고 채널을 64개로 늘림 (7x7 by 2 Conv to 64 channel + 3x3 by 2 Max Pool)
◎ 2~4 Stage 에서는 아래와 같은 Block을 통과하는데, Residual Connection과 Bottle Neck Block 이라고 불리는 Down Sampling 구조를 사용함
(Bottle Neck은 Network In Network , GoogLeNet의 Inception과 비슷한 컨셉의 구조)
43. 43
4. Model Tweak (ResNet Tweaks)
◎ 4-1. ResNet Tweaks : ResNet-B
- Torch 버전으로 처음 등장했으며, 다양한 곳에서 ResNet 구현체로 사용되고 있음 (e.g. TF Official ResNet)
- Down Sampling Block (Bottle Neck)이 변경 되었음
- Baseline(ResNet-A)의 Path A에서는 정보 손실 량이 많은데, Stride가 2인 1x1 Conv를 사용했기 때문
- ResNet-B는 3x3 Conv에서 Stride를 2로 줘서 Width, Height를 줄이고, 1x1 Conv는 정말 Channel Size만 변경하는 용도로 사용
ResNet-A ResNet-B
44. 44
4. Model Tweak (ResNet Tweaks)
◎ 4-1. ResNet Tweaks : ResNet-C
- Inception-V2 에서 5x5 Conv와 3x3 Conv 레이어를 두 번 거치는 것이 동일한 Receptive Field를 가지지만 후자가 Computation이 적기 때문
에 작은 사이즈의 Kernel을 여러 번 사용하는 것이 좋다고 설명한 것에서 영감을 얻어서 ResNet의 7x7 Stem 영역을 수정한 모델
- 이미 SENet, PSPNet, DeepLab-V3, ShuffleNet-V2 등에서 사용 중인 Tweak임
- Stem영역의 7x7 Conv를 여러 개의 3x3 Conv로 분리함. 7x7=49 vs 3x3x3=27으로 훨씬 적은 Computation만으로 기존과 동일하게 출력할 수
있음 (64 Channel + 4배 작은 Input Image)
ResNet-A ResNet-C
5x5=25 vs 3x3x2=18
작은 kernel이 더 좋음
45. 45
4. Model Tweak (ResNet Tweaks)
New Tweak for ResNet that proposed by this paper : ResNet-D
46. 46
◎ 4-1. ResNet Tweaks : ResNet-D
- ResNet-B에서 영감을 얻은 Tweak으로 Path B의 정보 손실 량을 최소화하기 위해 도입함
- Path B의 1x1 Conv가 Stride를 2로 설정하여 정보의 ¾가 유실됨.
- 실험을 통해 앞에 Stride가 2인 2x2 Average Pooling 레이어를 추가하고 1x1 Conv는 Stride를 1로 변경
- 약간의 연산 량만 증가하고 더 좋은 결과가 얻어지는 것이 확인 됨
4. Model Tweak (ResNet Tweaks)
ResNet-B ResNet-D
48. 48
4-2. Experiment Result : Top-1 Accuracy 약 1.0%↑
◎ ResNet-A → ResNet-B : Path A의 Stride 2를 3x3 Conv로 옮김 : 0.5 % 성능 증가
◎ ResNet-B → ResNet-C : Stem 영역의 7x7 Conv를 여러 개의 3x3 Conv로 나눔 : 0.2% 성능 증가
◎ ResNet-A → ResNet-B : Path B의 Stride 2를 2x2 Average Pooling으로 옮김 : 0.3 % 성능 증가
4. Model Tweak (ResNet Tweaks)
49. 49
5. Training Refinements
5-1. Cosine Learning Rate Decay
5-2. Label Smoothing
5-3. Knowledge Distillation
5-4. Mixup Training
51. 51
5. Training Refinements (Cosine Learning Rate Decay = Cosine Annealing)
◎ Learning Rate Decay : mini batch 마다 다른 분포를 가지는데 동일한 learning rate로 경사를 내려가면 최소점에 도달하지 못하고
그 주위를 맴돌게 됨. 경사를 타고 내려가면 내려갈 수록 걸음의 크기를 줄여서 내려가야 최소점에 도달할 수 있음
◎ Learning Rate Decay on Baseline : Step Decay : Baseline은 30, 60, 90번째 epoch에서 learning rate를 떨어뜨림
52. 5-1. Cosine Learning Rate Decay (Cosine Annealing)
from 「SGDR: STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS」
◎ Step Decay vs Cosine Decay (Cosine Annealing)
Cosine Decay는 Step Decay와 다르게 부드럽게 Learning Rate를 감소시키다가 급격하게 Learning Rate를 감소시키고 일정 주기마다 다시 최고점
으로 돌아오는 (Restart) 구조를 갖고 있음.
52
5. Training Refinements (Cosine Learning Rate Decay)
53. 53
5. Training Refinements (Cosine Learning Rate Decay)
5-1. Cosine Learning Rate Decay (Cosine Annealing)
from 「SGDR: STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS」
◎ Cosine Decay (Cosine Annealing)
본 논문에서는 Restart는 사용하지 않고 처음부터 끝까지 천천히 Cosine 그래프를 따라 Learning Rate를 감소시키는 방식을 사용하였고 이를 적용
하여 성능이 증가하였음. Step Decay의 경우 Epoch에 맞춰서 사람이 지정해야 하는데, 어느 정도 Epoch에 어느 정도의 Learning Rate를 가지게
할지 경험적으로 평가하여 적용할 수 밖에 없음. 그에 비해 Cosine Decay는 Epoch에 맞게 적절한 Learning Rate를 지정해주기 때문에 높은
Accuracy를 얻을 수 있음
55. 55
5. Training Refinements (Label Smoothing)
5-2. Label Smoothing
from 「Rethinking the Inception Architecture for Computer Vision」
◎ Softmax Function (z = 주어진 이미지의 Logit)
◎ Loss Function (L=Negative Cross Entropy, k=클래스의 개수)
◎ Optimal Solution은 다른 값들이 충분히 작을 때 = inf가 되는 것인데, 학습을 진행하면 이 방향으로 흘러가서 결국 과적합으로 이어질 가능
성이 있다고 주장. 즉, 출력된 클래스 간의 차이가 커야 정답으로 인정하게 되는 것인데, 이렇게 학습되면 모델이 해당 클래스가 정답일 것이라고
너무 확신하게 설계된다는 문제가 있음
56. 56
5. Training Refinements (Label Smoothing)
5-2. Label Smoothing
from 「Rethinking the Inception Architecture for Computer Vision」
◎ Inception V2를 학습시키기 위해 제안된 Label Smoothing은 True Probability를 아래와 같이 바꾸는 것
◎ Smoothed Label의 Logit을 구하면 다음과 같음. 만약 epsilon이 0이면 정답과 오답 사이의 Logit 무한대로 수렴하고, epsilon을 높이면 정답과
오답 사이의 Logit이 줄어듦. Empirical하게 실험해본 결과 K=1000 (ImageNet), epsilon=0.1 인 경우, Logit간의 Gap이 9.1정도로 수렴하는 것을
확인하였음. 이는 모델을 Generalize 하는 효과를 가지고, 실제로 분류 성능이 향상되었음
58. 58
5. Training Refinements (Knowledge Distillation)
5-3. Knowledge Distillation
from 「Distilling the Knowledge in a Neural Network」
◎ 이미 학습된 기존의 거대한 Teacher Neural Network(ResNet-152)가 가지고 있는 Knowledge를
또 다른 작은 Student Neural Network(ResNet-50)에 효율적으로 전달할 수 있는 Knowledge Distillation 기법을 연구
◎ Softmax는 이러한 Knowledge를 보유하고 있음. 고양이와 비슷하게 생긴 강아지를 보고 고양이일 가능성이 10%는 있다는 Knowledge를 내포
59. 59
5. Training Refinements (Knowledge Distillation)
5-2. Knowledge Distillation
from 「Distilling the Knowledge in a Neural Network」
◎ Loss Function (z=student, r=teacher, T=hyper parameter, T는 출력을 더욱 Soft하게 바꿈)
기존의 정답(p)와 예측(softmax(z))의 Loss 뿐만 아니라, Teacher(ResNet-152의 예측)과 Student(ResNet-50의 예측)의 Loss Term을 추가함
61. 61
5. Training Refinements (Mixup Training)
5-4. Mixup Training
from 「mixup: BEYOND EMPIRICAL RISK MINIMIZATION」
◎ Data Augmentation 기법으로 두 이미지와 Label을 각각 Weighted Linear Interpolation 하여 새로운 이미지 데이터를 만들어 내는 기법
λ ∈ [0, 1]는 Beta 분포에서 랜덤으로 뽑혀져 나온 상수이고 이렇게 만들어진 Image를 Training에 활용함
66. 66
6. Transfer Learning
◎ 지금까지 살펴본 내용들이 Transfer Learning에도 적용가능한지 살펴봄
◎ 특히 Object Detection(VGG19 Backbone) 과 Semantic Segmentation(FCN) 문제에 적용하여 실험
◎ 실험 결과 적용하기 전에 비해 성능이 증가한 것을 확인할 수 있음
◎ Semantic Segmentation의 경우 Label Smoothing, Mixup 등은 오히려 성능을 감소 시켰음
67. 67
Reference
- Revisiting Small Batch Training for Deep Neural Networks
- On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
- Accurate, large minibatch SGD: Training Imagenet in 1 Hour
- Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes
- Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes
- Mixed Precision Training
- Deep Residual Learning for Image Recognition
- Rethinking the inception architecture for computer vision
- SGDR: STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS
- Distilling the Knowledge in a Neural Network
- mixup: BEYOND EMPIRICAL RISK MINIMIZATION