Curaai00's Deep Learning Blog

Temperature Scaling, Calibration: On Calibration of Modern Neural Networks

딥러닝/이미지 인식
temp

딥러닝을 사용한 분류 문제에서는 흔히들 softmax를 사용해 가장 큰 값(probability)이 나온 것을 해당 class라 판단하고 그때의 확률 값을 confidence로 사용한다. confidence가 낮게 나오면, 해당 data에 대해 model이 학습이 더 필요하거나, 잘못 됐다고 해석할 수 있다. 가장 높은 confidence의 class를 predict class로 선정하듯 confidence는 모델을 해석하는데 아주 유용하게 쓰인다.

Annotation

classification neural network $h$는 input $ x \in X$, $K$개의 class를 가진 label $y \in Y = {1, \dots, K}$에 대해 $h(x) = (\hat y, \hat p)$, class prediction $\hat y$ 와 $\hat y$에 해당하는 probability confidence $\hat p$ 를 예측한다. confidence $\hat p$에 대해 설명하자면, model이 100개를 predict하고, confidence가 전부 0.8일 경우 80개가 맞게 분류되었을 것이라고 예상 할 수 있다. 하지만 confidence에 대해 확실한 measure를 원한다.

한정된 sample에서 1을 $M$개의 bin으로 나눈다. $m$번째 bin에는 $I_m = (\frac{m-1}{M}, \frac{m}{M}]$ 에 해당하는 prediction result index가 들어가 있다. 이때 $m$번째 bin의 accuracy와 confidence는 다음과 같다.

  • $m$번째 bin의 $accuracy$는 label과 prediction 같은 경우 / bin의 size이다
  • $m$번째 bin의 $confidence$는 bin의 prediction confidence의 평균이다.

$acc(B_m) = conf(B_m)$인 경우를 well/perpectly calibrated라 한다.

Calibration Error

calibration이 얼마나 잘 되었는지를 ECE(Expected Calibration Error), MCE(Maximum Calibration Error)로 측정한다.

첫번째로 ECE는 accuracy와 confidence의 distribution의 차이를 측정한다. $n$은 총 sample 개수이며, 각 bin의 차이값을 gap라고 부른다.

두번째는 MCE이다. MCE는 bin중에서 가장 큰 gap을 측정한다. gap이 high-risk한 경우에 사용하는 measure이다.

Modern Neural Networks are Mis-Calibrated

deep neural network는 많은 곳에서 사용된다. 옛날에 비해 성능도 많이 상향됐으며, model 또한 deep & wide해졌다. 하지만 model이 커진 만큼 classification error는 감소하였지만, mis-calibrate됐다.


LeNet과 달리 ResNet은 gap이 크다. ResNet의 accuracy, avg confidence line을 봤을 때 우리가 일반적으로 생각하던 confidence 0.5 threshold가 실제로는 안전하지 않을수도 있다. 또한 모델의 mis-calibration에 영향을 주는 요인이 model의 크기에만 있는 것이 아니다. Depth, Width, Batch norm, Weight decay 등 여러 요소가 model의 mis-calibration에 영향을 준다.


training progress에서 test error와 loss를 분석한 그래프이다. epoch 250에서 learning rate가 10배 줄어들며, error와 loss가 함께 줄어들었다. epoch이 300이 넘어서기 시작하면서 NLL이 overfitting을 하기 시작한다. network는 well-modeled probability를 희생하여 classification accuracy를 높이기 위해 학습한다(classification accuracy overfitting).

Temperature Scaling

classification accuracy overfitting, mis-calibration을 해결하기 위해 'temperature scaling'이라는 calibration method를 사용한다. 이를 사용하기 위해선 validation set이 필요하다.

temperature scaling은 모든 class에 대해 single scalar parameter $T$를 logit vector $z_i$에 나눠주는 방법이다.

$\hat q_i$는 calibrated probability이다. $T$가 무한대로 발산할수록 $\hat q_i$는 1/K에 근사한다. T가 0에 근사할 수록 $\hat q_i$은 1에 가까워질 것이다. $T$는 validation set에서 NLL으로 학습한다. 이 방법의 장점은 parameter $T$는 softmax output의 최대값을 바꾸지 않는다. 기존의 model의 accuracy에 영향을 주지 않는다. 그래서 이미 학습되어 있는 model에 사용할 수도 있다.

Experiment


첫번째 그래프는 mis-calibration된 CIFAR-100 Dataset 원래의 ResNet-110 model이다. 2번째는 temperature scaling을 사용한 ResNet이다. 3, 4번째 그래프는 다른 calibration method를 적용한 것으로서 temperature scaling이 가장 좋은 성능을 보여주고 있다.

ResNet: Identity Mappings in Deep Residual Networks

딥러닝/이미지 인식

ResNet Identity Mappings in Deep Residual Networks

ResNet: Identity Mappings in Deep Residual Networks


Residual Unit에서 사용되는 Identity Mapping이 단순히 더하는 연산일 뿐인데 왜 잘 작동하고, 오히려 기존의 것들 보다 더 좋은 성능이 나오는지 알아보려고 합니다.

Residual Function

ResNet은 여러 "Residual Unit"이 쌓여있습니다. 이를 수식으로 표현한다면 F는 residual function, h(x)는 Identity mapping, W는 해당 l번째 layer의 Weight, f는 ReLU function입니다.



그리고 저희는 이러한 Residual Unit의 residual function + identity mapping 방식을 shortcut connection, skip connection라고 부릅니다.

이 shortcut connection의 ReLU는 아무 영향을 미치지 않고, h(x)는 identity function이기 때문에



과 같이 바꿔 쓸수 있습니다. 하지만 이것을 재귀적으로 바꿔쓴다면 (2)와 같이 쓸수 있겠죠



그래서 L번째 unit은 l번째 unit으로 표현할 수 있습니다.(L > l)


Pre-Activation

h(x)인 identity mapping과 f: relu나 batch norm 같은 activation은 기존의 방식에서는 layer(weight)를 거친 후에 적용하였지만, 연구를 하던 도중 다양한 identity mapping을 시도하던 중 post-activation보다 pre-activation이 더 좋은 성능을 나온 다는 것을 알아냈습니다.



Why Identity Mapping

근데 여기서 왜 Identity Mapping이 필요한가 생각할 수 있습니다. Residual Unit은 전파 정보를 직접적으로 전달하는데 집중합니다. h(x)나 f(x)같은 identity mapping이 포워드 패스(forward pass, 네트워크의 input을 end로 전파시키는 것)와 역전파시 한 Unit에서 다른 Unit으로 전달하도록 합니다!

Back Propagation

E(Epsilon)을 loss function으로 나타냈을 때, chain rule에 의한 역전파시 다음과 같은 식을 얻을 수 있습니다. gradient는 두가지 항으로 나눌 수 있습니다. 첫번째 항은 다른 어떤 weight layer의 방해 없이 정보를 직접적으로 전파할 수 있습니다. 두번째 항은 weight layer를 거쳐 전파를 하게 됩니다.

또한 (4)는 mini batch의 모든 sample이 두번째 항을 -1로 만들경우는 거의 없기 때문에 gradient가 0이 돼 취소돼지 않습니다.

Several types of Skip Connection

일반적인 skip connection이 아닌 여러 버전의 skip connection을 시도하였습니다.



여러가지 skip connection 방식을 시도해봤지만 역시 original skip connection이 정확도가 가장 높았습니다.


AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

딥러닝/이미지 인식
AlexNet ImageNet Classification wtih Deep Convolutional Neural Networks

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

2012년에 쓰여진 논문으로서 그때 작은 크기의 Dataset에서는 Deep Neural Network가 좋은 성능을 보였지만, 실제 Real world에 적용하기에는 무리가 있었습니다. 그래서 큰 Dataset(ImageNet, 15m images&22k labels)를 가지고 이를 적용하고자 하였습니다.

Dataset

ImageNet을 만들기위해 Web에서 이미지를 모으고, 사람들이Amazon’s Mechanical Turk crowd-sourcing tool을 이용해 labeling 작업을 하였습니다. 이렇게 만들어진 ImageNet Dataset으로 Real world의 문제를 해결하기 위해서 두가지 대회를 열었습니다. 바로 PASCAL VOCILSVRC입니다.



ReLU

실제 인간의 뇌처럼 신경망을 구성한다면 활성화 함수는 tanh, sigmoid가 되어야 하는데, 왜 ReLU가 성능이 좋을까요? 그 이유는 ReLU가 non-saturation하기 때문입니다. 그래서 이때 non-saturation이 무엇일까요?

saturation

sigmoid, tanh 함수는 어떠한 값이 들어와도 -1~1, 혹은 0~1 사이의 값을 배출합니다. 그렇다면 큰 값이 들어왔을 때도, 저 사이의 값을 내놓아 saturation(포화)됩니다. 하지만 ReLU는 max(0, x)이므로 어떠한 값이 들어와도 제한이 없습니다. 값이 크면 클수록 더큰 gradient를 가지게 됩니다.

그리고 ReLU의 non-saturation이 stochastic gradient descent와 결합되어 더욱더 효율이 증대됩니다. feature가 큰 값을 가지고 큰 gradient를 가지고 있을 경우 관성이 생겨 더욱더 네트워크가 빨리 최적화합니다. 또한 ReLU는 미분하기에도 단순하여, 연산량의 면에서도 충분한 이점을 가지고 있습니다. 


위 그림을 보시면 실선이 ReLU를 사용했을 때이고 점선이 tanh을 사용한 경우입니다.

Local Response Normalization

lateral inhibition이란 것을 아십니까? 실제 뇌 세포의 증상인데, 강한뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상입니다. 그래서 아래 그림을 보시면 검은 네모들 사이에 회색 점?부분? 이 보일텐데 이는 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분(약한 뉴런)에 반응하여 회색이 조금 보이게됩니다.


그래서 이것이 왜 나왔냐하면, Neural Network의 Feature에서 한 세포가 유별나게 강한 값을 가지게 된다면, 근처의 값이 약하더라도 convolution 연산을 한다면 강한 feature를 가지게 되는것입니다. 그렇다면 over-fitting이 잘 일어나게 되겠죠(training dataset에만 feature가 크게 반응하니까)

그래서 어떠한 filter가 있을 때, 그 주위 혹은 같은 위치에 다른 channel의 filter들을 square-sum하여 한 filter에서만 과도하게 activate하는 것을 막습니다.

  • a^i_x,y는 i번째 kernel의 x,y값입니다. 그리고 정규화가 적용되어 b^i_x,y로 바뀌게 되는 것입니다.
  • n은 해당 a의 위치에 spatial position한 kernel들의 개수를 말합니다. N은 총 kernel 개수입니다.
  • k, alpha, beta는 normalization을 위한 하이퍼 파라미터입니다.

저희는 이 normalization을 ReLU후에 적용하였습니다.

Data Augmentation

over-fitting을 막는 가장 단순한 방법은 데이터셋의 크기를 많이 늘이는 것입니다. 그래서 Data Augmentation이란 것을 통해 dataset을 더 크게만드는 방법을 제시하였습니다.

  • 256x256으로 만들어진 이미지에서 랜덤으로 224x224로 이미지를 여러장 crop하고, 이미지를 filp(좌우반전)한 상태에서도 crop하여 이미지를 2048배 늘였습니다. 테스트시에는 이미지의 가장자리 4개와 정가운데에서 patch를 만들어 네트워크를 통과시킨후 softmax를 평균냈습니다.
  • 이미지 데이터셋에 PCA 분석을 하여 데이터를 학습하기 쉽도록 변환하였습니다.

Dropout

Dropout이란 hidden layer의 몇몇 뉴런의 값을 0으로 바꿔버립니다. 그래서 neuron이 "dropped out(탈락)"되어 forward pass, back propagation시 아무런 영향을 미치지 않습니다. 이 drop out은 뉴런들 간의 복잡한 상호의존도를 낮춰 over fitting을 막습니다. 테스트 시에는 모든 뉴런을 사용하되 output에 0.5를 곱하여 사용하였습니다.


참조

 Alexnet paper

ResNet: Deep Residual Learning for Image Recognition

딥러닝/이미지 인식
Deep Residual Learning for Image Recognition

ResNet: Deep Residual Learning for Image Recognition

ResNet 논문을 읽고 번역&재정리 한 글입니다. 부족한 점이나 실수가 있다면, 댓글 혹은 이메일(curaai00@gmail.com)로 보내주시면 감사하겠습니다. 

Abstract

요즘 그래픽카드와 딥러닝의 발전으로 네트워크는 더욱 더 깊어지고 커집니다. 그래서 논문은 Residual Learning 프레임워크를 제시하여 네트워크가 더 깊어지고 커져도 학습하기 쉽게 도와줍니다. 그리고 실험 결과를 통해 이 ResNet(Residual Networks)이 optimize하기 쉽고, depth가 증가해도 정확도가 더 높은 모습을 증명합니다.

Introduction

CNN은 지금 현재 이미지 인식 분야에서 선구자적인 역할을 맡고있습니다. CNN과 End-to-End Network가 합쳐며 depth(stacked layers)란 단어가 생기기까지 하였는데, 이를 네트워크를 "아주 깊게" 쌓으면서 기존보다 훨씬 좋은 성능이 나온다는 것을 여러 대회(ImageNet Challenge)를 통해 보여줬습니다. 그래서 "과연 네트워크의 Depth를 늘이는 것만으로도 쉽게 성능을 향상 시킬 수 있을까?"라는 의문이 생기기 시작하였습니다. 하지만 실제로는 Depth가 어느 부분까지 상승하다가 그 이상은 vanishing/exploding gradient라는 문제 때문에 오히려 성능을 더 떨어트리는 원인이 되었습니다. 이 현상을 degradation problem이라고 하는데, depth가 깊은 상태에서 학습을 이미 많이 진행한 경우 weight들의 분포가 균등하지 않고, 역전파시 기울기가 충분하지 않아 학습을 안정적으로 진행할 수 없는 문제가 있습니다. over-fitting 문제라고 착각할 수도 있겠지만 실제로 그것이 원인은 아닙니다.




Deep Residual Learning

Residual Learning

H(x)를 기존의 네트워크라고 할때 (x는 layer의 input입니다) 이 H(x)는 여러 비선형 layer로 이루어져 천천히 복잡한 함수에 근사된다고 가정할 때, F(x) := H(x) - x 로 바꿔 F(x) + x를 H(x)에 근사하도록 하는 것(Residual mapping)이 더 쉽다고 가정합니다. 이를 feed-forward neural network에 적용한 것이 "Shortcut connection"*(Fig.2)입니다. 


Identity mapping by Shortcuts

Residual Learning의 중점은 degradation 문제를 어떻게 해결하느냐 인데, 위(Fig. 2)에 나왔던 것처럼 F(x) + x를 H(x)에 근사하게 합니다. shortcut connection을 Neural Network에 사용하여 역전파(back propagation)할 때, identity mapping(x)를 미분하면 적어도 1이상의 값이 나와 최소한의 기울기를 만들어서 학습이 제대로 일어나지 않는 현상을 최소화했습니다. H(x)와 F(x) + x가 천천히 근사하는 방식은 같더라도 학습의 속도나 안정성으로 보았을 때 Shortcut connection이 훨씬 더 효율적입니다.

기본적인 residual block을 다음 수식과 같이 정의합니다. 이때 σ는 ReLU이고, biases는 표기상 생략되었습니다. 위의 경우에서는 x와 F와 dimension이 동일해야 하는데, 만약 dimension이 바뀔 경우 Linear projection W_s를 적용할 수 있습니다.

여기서 W_s는 x의 dimension을 맞추기 위해서만 사용됩니다.

(2)을 projection shortcut connection이라고 부릅니다. 

Network Architecture


Plain Network

Residual block을 사용하지 않고, 단순히 쌓은 네트워크(Fig. 3, middle)입니다. 이 네트워크는 VGG Net(Fig. 3, left)에서 영감을 받아 만들었습니다. plain network는 두가지 design rule이 있습니다.

  • 각 layer들은 같은 크기의 feature map output size를 만들고, 동일한 number of filters를 가집니다.
  • feature map size가 반으로 줄어들 경우, layer당 complexity를 유지하기 위해 number of filters를 2배로 늘입니다. convolution layer의 stride를 2로 하여 down-sampling을 직접 수행합니다.

convolution layer(34개)를 통과한뒤, global average pooling, 1000-way fully-connected layer with softmax로 끝납니다. 또한 이 모델은 VGG Net보다 fewer filters, lower complexity를 가지고 있고, layer baseline은 3.6 billion FLOPs로서 VGG의 18%(FLOPs)입니다.

Residual Network

plain network에 base를 두고 shortcut connection을 추가한 ResNet(Fig. 3, right)입니다. shortcut connection(Fig. 3, solid line)은 input과 output이 같은 dimension일 때 사용됩니다. dimension이 증가할 때(Fig. 3, dotted line)는 두가지 경우를 고려하였습니다.

  • identity shortcut connection을 계속 실행하는 경우, dimension을 증가시키기 위해 나머지를 zero padding 하였습니다.
  • projection shortcut connection은 dimension을 맞추기 위하여 1x1 convolution을 사용합니다.

양쪽 옵션 모두 stride는 2를 사용합니다.

Implementation

모델 전부 ImageNet Challenge를 위해 사용하였습니다.

  • weight decay 0.00001 & momentum 0.9
  • drop out X
  • image는 [256, 480] 중 가까운 방향으로 resize됨
  • per-pixel mean subtraction 과 함께 224x224로 랜덤 crop
  • standard color augmentation 사용
  • Batch Normalization을 convolution 후, activation 전 사용
  • batch size 256으로 SGD 사용
  • learning rate는 0.1 부터 시작, local minimum을 만나거나 loss가 진동하는 경우 1/10씩 감소시킴
  • iteration: 60 * 10^4

테스트시 대회를 위해 standard 10 crop testing을 적용하였습니다. fully convolutional을 적용하였습니다.

Experiment

ImageNet Classification

ImageNet classification dataset에서 model을 평가하였고, 학습이미지는 1.28 백만장, 평가는 5만장을 이용하였습니다. 그리고 서버로 보내는 최종 테스트시에는 10만장을 이용하였고, top-1, top-5 에러율을 평가하였습니다. 

Plain Network


위 그림은 ImageNet 참가시 사용한 Network Architecture Implementation detail입니다.


Fig. 4, left를 보시면 plain-18이 34보다 전체적인 error가 적은것을 보실 수 있습니다.

Residual Network


ResNet-18, 34모두 plain network에 base를 두고 있고, 첫번째 비교(Table 2 and Fig. 4)에서 identity shortcut connection을 사용하였습니다(zero padding). 그리고 Table 2와 Fig. 4로 부터 3가지 요점을 찾을 수 있습니다.

  1. ResNet을 사용할 경우 네트워크의 depth가 증가하여도 error가 감소합니다. (degradation 문제 해결)
  2. 같은 depth여도 ResNet이 성능이 더 좋습니다. (Table 2)
  3. plain 보다 ResNet이 더 빨리 solution을 찾아갑니다. (Fig. 4)

Deeper Bottleneck Architectures


ResNet 50/101/152 부터는 Fig. 5, right와 같은 bottleneck architecture를 사용하였습니다. 이 아키텍쳐를 통해 네트워크를 더 깊게 쌓을 수 있었고, dimension이 바뀌는 경우에는 projection shortcut connection을 사용하였다고 합니다.

ResNets


위 Table 들을 보시면 전반적으로 ResNet이 성능이 더 우수하다는 것을 알수 있습니다. 또한 Network가 더 깊어질 수록 성능을 향상 시킬수 있다는 것 또한 보여줍니다.

CIFAR-10 and Analysis


CIFAR-10 test set을 이용하였을 때 각 layers 별로 성능을 체크하였고, layer가 너무 깊을 경우(1202) 다시 error가 증가하는 것을 볼수 있습니다. Fig. 6

Fig. 6는 CIFAR-10에서 학습을 진행할 때 plain network 같은 경우에는 깊을 수록 학습이 잘 진행되지 않지만 ResNet의 경우에는 반대의 양상을 띄게 됩니다. ResNet-1202는 제외합니다.

Analysis of Layer Responses


각 3x3 convolution layer(Batch Norm 후, ReLU 전)의 표준편차입니다. ResNet이 plain network에 비해 small response를 보이는 것으로 보아, 좀더 안정적으로 학습을 진행한다고 할수 있습니다.

Exploring Over 1000 layers

위의 Figure, Table 들을 보시면 layer의 수가 1000이 넘어가는 ResNet이 있는데 이 ResNet들은 아무리 residual function도 layer가 너무 과도하게 높으면 제대로 발휘하지 못한다는 것을 보여줍니다.

ResNet on Object Detection


기존의 VGG를 사용하던 Faster R-CNN에 ResNet을 이용하여 Object Deteciton을 사용하였더니, 성능이 크게 향상된 것을 확인할 수 있습니다.

Reference

Arxiv: Deep Residual Learning for Image Recognition

Arxiv: Identity Mappings in Deep Residual Networks

Identity Mappings in Deep Residual Networks 블로그 포스팅