Batch Normalization(2015)
[3줄요약]
각 미니배치 학습마다 정규화를 진행함으로써, 내부 공변량 변화에 대응하고 학습시, 더 높은 학습률을 사용할 수 있다는 점과, 가중치 초기화에 덜 신경을 쓸 수 있고 BN을 사용하면 Dropout을 사용하지 않아도 되는 장점이 있다. 또한 아무 optimizer를 사용할 수 있다는 장점도 존재하여 이미지 관련 모델에서 상당히 큰 차이로 높은 성능을 나타낸다.
1. Introduction
SGD 는 간단하고, 효과적이지만 학습률과 같은 하이퍼파라미터, 모델 파라미터의 초기값 튜닝에 신경을 많이 써야한다.
또한 이전 레이어가 다음 레이어에 영향을 많이 주기 때문에 학습이 어렵다. 그러므로 모델이 깊어질 수록 조그만한 변화가 큰 변화를 만들어낸다.
이를 공변량 변화(Covariant Shift) 라고 한다.
입력값 x에 해당하는 분산이 항상 일정하다면, 다음 레이어에서 x 분포의 변화에 따른 재조정을 할 필요가 없어진다.
sigmoid함수의 경우 x의 절대값 크기가 커질 수록 gradient값이 0으로 수렴하는 현상이 발생한다.
즉, x값이 커질수록 학습이 느려지고 기울기소실(gradient vanishing) 현상이 발생하는 문제점이 있다. 이를 saturation 이라고 한다.
sigmoid 같은 activation function을 사용하여 일어났던 기존의 saturation 문제와 기울기 소실을 해결하기 위해서는 ReLU함수를 사용하거나, 초기화를 더 세밀하게하고, 작은 학습률을 사용해야 했다.
비선형적인 입력값의 분포가 좀 더 안정적이라면 옵티마이저가 국소지역에 갇히는 일이 적어지고, 학습 속도도 가속화 할 수 있다.
그래서 Batch Normalization을 제안한다.(장점 다시 나열, 3줄 요약 참고)
2. Towards Reducing Internal Covariate Shift
network activation이 학습을 진행하는 동안 파라미터의 변화에 의해 분포의 변화를 내부 공변량 변화(Internal Covariate Shift)라고 정의한다.
내부 공변량 변화가 작을수록 학습은 빨라진다.
- Whitening
- 데이터의 평균을 0, 그리고 공분산을 단위행렬로 갖는 정규분포 형태로 변환하는 기법으로 Decorrelation + Standardization으로 볼 수 있다. 보통 PCA(주 성분 분석)를 이용해 데이터를 decorrelated 시킨다.
네트워크의 입력값이 화이트닝(whitening)이 되면 학습이 빨라진다는 것은 널리 알려져왔다.
매 layer마다 화이트닝이 적용된다면, 내부공변량변화의 영향을 없앨 수 있을 것이다.
하지만, 최적화 단계에서 위와 같은 작업들이 계속된다면, 경사 하강 단계에서 정규화를 통해 업데이트가 필요할 수 있으며 이는 경사하강법을 통한 오차역전파 효과를 감소시킨다.
왜 잘안되는지를 수식으로 살펴보자.
정규화 과정은 다음과 같다.
$$ \hat{x} = x - E[x] $$
$$ x = u + b, \chi=\{x_1..._N\} $$
u는 입력값이고, b는 편향이므로 x는 그 다음 층으로 들어가는 입력값이 될 것이다.
$$ E[x]=\frac{1}{N} \sum_{i=1}^{N}x_i $$
이 과정에서 평균은 다음과 같고, 만약 경사 하강법에서 평균을 무시한다면
(whitening이 평균이 0인 정규 분포이기 때문)
업데이트는 다음과 같을 것이다.
$b \leftarrow b+ \triangle b$ , $\triangle b \propto - \frac{\partial l}{\partial \hat{x}}$
$u+(b+ \triangle b) - E[u+(b+\triangle b)] = u+b-E[u+b]$
즉, b로만 업데이트가 진행되며 loss나 layer의 output의 변화가 없어지게 되는 문제점이 발생한다.
그러므로 학습을 진행하며 네트워크의 activation은 항상 분포변화가 발생할 수 밖에 없다는 점을 인지 해야 한다.
그러므로 정규화(normalization)을 사용해야하는데 정규화 변환식은 다음과 같다.
$$ \hat{x} = Norm(x,\chi) $$
그리고 역전파법을 위해 야코비안을 연산에 사용해야한다.
$$ \frac{\partial Norm(x, \chi)}{\partial x} and \frac{\partial Norm(x, \chi)}{\partial \chi} $$
프레임 워크 내에서, layer를 화이트닝 하는 것은 다음과 같은 연산들을 필요로한다. 먼저 공분산 행렬인
$$ Cov[x] =E_{x \in \chi}[\mathbf x \mathbf x^T]-E[x]E[x]^T $$
위의 식과 이 공분산 행렬의 역행렬에 루트값인 아래 식도 필요하다. (역전파를 위해)
$$ Cov[x]^{-1/2}(x-E[x]) $$
그러므로 파라미터 업데이트를 하는 순간마다 모든 학습데이터를 분석하지 않고, 미분이 항상 가능해야하기 때문에 대안을 찾게 되었던 것이다.
3. Noramlization via Mini-Batch Statistics
매 layer마다 화이트닝을 적용하는 것은 cost가 높고, 미분 불가능한 점이 존재할 수 있으므로 2가지 방법을 제안한다.
- 각 scaler feature를 독립적으로 정규화한다(평균0, 분산1).$$ \hat{x}^{(k)} = \frac{x^{(k)}-E[x^{(k)}]}{ \sqrt{Var[x^{(k)}]} } $$
이는 feature가 decorrelate가 되지 않아도 수렴을 빠르게 할 수 있게 해줍니다.
input 차원이 n차원일 때, 각 차원별로 정규화를 적용해줍니다.
시그모이드 함수를 이용하면, 비선형성에 대한 제약이 생기므로 다음과 같이 해결할 수 있다.
바로 scale 과 shift, 2가지 파라미터를 도입한다.
$\gamma ^{{(k)}} , \beta ^{{(k)}}$
$$ y^{{(k)}} = \gamma^{{(k)}}\hat{x}^{{(k)}} + \beta^{{(k)}} $$
이 파라미터들은 기존 모델 파라미터를 통해 알 수 있고, 네트워크의 성능을 보존하기 위해서 다음과 같이 파라미터를 설정하여 복구할 수도 있다.
$$ \gamma^{{(k)}} = \sqrt{Var[x^{{(k)}}]} $$
$$ \beta^{{(k)}}=E[x^{{(k)}}] $$
batch에 대해서 stochastic gradient optimization을 사용하여 전체 평균과 분산을 구하는 것은 부적합할 수 있다. 그러므로
- 미니 배치별로 평균과 분산을 이용한다.
출처:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
이렇게 Batch Normalization을 적용하면 오차역전파 계산할 시, 미분 불가능한 지점이 없고 내부 공변량 변화를 통제하여 학습속도를 높일 수 있다.
3.1 Training and Inference with Batch-Normalized Networks
Batch Normalization 이하 BN 을 적용하면 이제 레이어의 입력값이 x가 아닌 BN(x)가 입력값이 된다.
한번 학습이 되었다면 정규화에는 다음 식을 사용한다.
$$ \hat{x}=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon}} $$
미니 배치, 통계보다 모집단을 사용할 때는 $\epsilon$ 을 무시할 수 있다.
사이즈가 m인 미니배치를 학습시키기 위해 편향되지 않은 분산
$$ Var[x]=\frac{m}{m-1}E_\beta[\sigma^2_{\beta}] $$
을 사용할 수 있다.
3.2 Batch-Normalization Convolutional Net-works
기존 activation function의 식을 도식화해보면 $z=g(Wu+b)$ 인데, 여기 입력값에 BN이 적용되므로 최종 정리해보면 $z=g(BN(Wu))$ 로 대체할 수 있다.
CNN에서는 BN을 activation마다 적용하는 것 보다 feature map마다 적용하는 것이 효율적이다.
3.3 Batch Normalization enabled higher learning rates
기존 오차역전파에서는 모델이 터지는 현상이 있지만 BN을 적용하면 파라미터의 크기에 영향을 받지 않는다.
또한 기존에 학습에 큰 가중치를 사용시, 더 작은 기울기 값이 얻어지는 현상이 있었는데, BN을 적용하면 이것이 안정화되고 파라미터를 키울 수 있다.
3.4 Batch Normalization regularized the model
BN은 Dropout 역할도 대신할 수 있다.
이 뒤에부터는 어떻게 BN을 더 발전시킬지 그리고 기존 다른 모델에 비해 성능이 얼마나 높아졌는지 등을 나타내고 있다.