input의 분포를 안정적으로 유지시켜 신경망 학습 속도를 높여 학습 성능을 높일 수 있는 Batch Normalization을 소개하는 논문입니다.
직전 신경층 parameter가 변하게 되면, 학습과정 동안 각 layer의 input 분포가 변한다는 사실때문에 deep 신경망을 학습하는 것은 어렵습니다. 이는 낮은 learning rate, 적절한 parameter 초기값 설정을 필요로하여 학습 과정의 속도를 느리게 하며, 모델이 saturating nonlinearity에 빠져 학습을 어렵게 만듭니다. 이러한 현상을 해당 논문에서는 internal covariate shift라고 부르며, layer input을 normalizing하여 문제를 해결하였습니다. 해당 논문에서 제시하는 방법은 모델 구조의 일부분으로 normalization을 추가하고 normalization을 학습 과정의 각 mini-batch 단위에서 이루어지도록 하였습니다.
Batch Normalization은 높은 learning rate를 사용할 수 있게 해주었고, 초기값 설정을 민감하게 하지 않도록 해주었으며, dropout 역시 사용하지 않도록 해주었습니다.
SGD(Stochastic gradient descent)는 deep network 학습을 효율적으로 해주었으며, Adagrad, momentum과 같은 SGD의 변형들은 SOTA 성능을 달성하는데 사용되고 있습니다. SGD는 network의 paramter들을 최적화하여 아래의 loss function을 최소로 만듭니다.
SGD에서 각 step은 m 크기의 mini batch를 활용하여 학습을 진행합니다. 첫째, Mini-batch는 전체 training set의 gradient의 추정치를 mini-batch gradient로 사용할 수 있습니다. Batch size가 커질수록 추정치는 더욱 정확해집니다. 둘째, mini-batch를 활용한 연산이 각 예시들을 연산하는 것보다 효율적입니다.
SGD는 여전히 단순하며 효율적인 방식이지만, learning rate, parameter 초기값과 같이 모델의 hyper parameter tuning을 제대로 해주어야만 합니다. 학습은 각 layer의 input들이 앞선 모든 layer의 parameter에 영향을 받기때문에 매우 복잡합니다. 결과적으로 network parameter의 작은 변화는 network의 깊이가 깊어질수록 증폭되어 큰 영향을 미치게 됩니다.
Layer의 input 분포의 변화는 layer가 새로운 분포에 지속적으로 적응해야힉 때문에 문제를 야기할 수 있습니다. Learning system에서 input 분포가 변할 때 이러한 현상을 covariate shift라고 합니다. 이는 domain adaptation을 통해 해결할 수 있습니다.
Sub-network의 input들이 고정된 분포를 갖게된다면 sub-network 바깥의 다른 layer에도 긍정적인 결과를 줄 수 있습니다. Sigmoid 활성화 함수 g가 있을 때, g의 input x의 절대값이 커질수록 g의 gradient는 0에 가까워집니다. 이는 곧, g의 input x의 절대값이 작을 때를 제외하고는 gradient가 vanish되며 학습이 매우 느리게 진행됩니다. x = Wu+b일 때
x는 W와 b, 그 외의 모든 layer의 parameter들에 영향을 받기 때문에, 학습 시 parameter의 변화는 x를 saturated regime에 빠질 수 있을 가능성을 높이며, convergence를 어렵게합니다. 이러한 영향은 network의 깊이가 깊어질수록 더욱 커지게 됩니다. Saturation 문제와 vanishing gradient문제는 주로 ReLU를 사용하거나, 초기값을 잘 설정하거나, 작은 learning rate를 설정하여 해결하곤합니다. 하지만 만약 학습 중에도 nonlinearity input의 분포를 안정적으로 유지할 수 있다면 optimizer는 saturated regime에 빠질 확률이 낮아지며 학습은 빠르게 진행될 수 있습니다.
해당 논문에서는 학습 과정에서 deep network의 internal nodes의 분포 변화를 Internal Covariate Shift라고 부릅니다. 이 현상을 제거하게 된다면 더욱 빠른 학습을 진행할 수 있을것이라 기대하고 있습니다. 해당 논문에서는 Batch Normalization이라고 부르는 과정을 소개하며, internal covariate shift를 줄여 deep neural net의 학습을 가속화 시킵니다. 이는 lyaer input들의 평균과 분산을 고정시키는 normalization 단계를 통해 적용할 수 있습니다. 이를 통해 높은 learning rate 값을 활용할 수 있게 됩니다. 더 나아가 batch normalization은 모델을 제한하고 dropout의 필요성을 없애줍니다. 마지막으로 batch normalization은 network가 saturated mode에 빠지는 것을 막아 saturating nonlinearity를 사용할 수 있도록 해줍니다.
해당 논문에서는 Internal Covariate Shift를 netword activation의 분포가 학습 과정에서 parameter의 변화에 의해 변하는 것을 의미합니다. 학습을 잘 할 수 있도록하기 위해, internal covariate shift를 줄여야합니다. 학습이 진행되는 중에 layer input x의 분포를 고정시킴으로써 학습 속도가 빨리지는 것을 기대할 수 있습니다. 기존 연구들에서 input을 whitening(평균을 0, 분산을 1, decorrelated) 변화를 시켰을 때 학습 수렴 속도가 빨라진다는 것을 보였습니다.
Whitening가 optimization step에서 이루어진다면 gradient descent step은 parameter를 normalization 역시 갱신되는 방식으로 갱신하도록 이루어지며 이는 곧, gradient step의 효과를 줄이게 됩니다.
Whitening은 공분산 행렬 계산과 역행렬의 squre root를 계산해야하기 때문에 계산 비용이 많이 듭니다. 이러한 문제에서 해당 논문은 input normalization을 미분가능하고 전체 training set을 필요로 하지 않는 대안을 찾고자 했습니다.
각 layer의 input들을 모두 whitening하는 것은 비용이 많이 들기때문에, 해당 논문에서는 2가지 단순화를 수행하였습니다. 첫째, layer의 input과 output의 feature를 jointly하게 whitening하는 것 대신에 독립적으로 각 scalar feature를 normalize 했습니다. d 차원의 input x를 아래와 같이 normalization 해주었습니다.
기존 연구에서 이러한 normalization은 feature들이 decorrelated되어 있지 않더라도 convergence 속도를 높여주었다고 했습니다.
Layer의 각 input을 normalizing하는 것은 layer가 표현하는 것을 바꿀 가능성이 있습니다. 예를 들어, sigmoid의 input을 normalizing하게 된다면 input의 범위를 좁혀 nonlinearity를 linear regime으로 제한하게 됩니다. 이를 해결하기 위해, network에 포함된 transformation이 identity transform을 대표할 수 있도록 해주었습니다. 각 activation x^(k)에 아래와 같이 scale, shift parameter를 추가해주었습니다.
두번째 단순화로, Stochastic gradient 학습에서 mini-batch를 활용하기 때문에 각 mini-batch는 activation의 mean과 variance 추정치를 만듭니다. 이러한 방식으로 normalization에 사용되는 통계량은 gradient backpropagation에 활용될 수 있습니다.
Batch Normalizing Transform은 아래의 알고리즘1로 표현할 수 있습니다.
BN transform은 어떠한 activation을 다룰 수 있도록 network에 추가될 수 있습니다.
BN transform은 미분가능한 transform이기 때문에 학습이 가능하며 internal covariate shift를 줄여 학습이 빨리 될 수 있도록 합니다.
Batch-Normalize를 위해서 activation의 subset을 정하고 BN transform을 삽입합니다. 이전에는 x를 input으로 받았다면 이제는 BN(x)를 input으로 받습니다. 학습 시에는 mini-batch를 활용하기 때문에 mini-batch의 평균과 분산을 사용할 수 있지만 inference 시에는 input이 mini-batch로 들어오지 않습니다. 따라서 inference 시에는 학습 data 전체 평균과 분산을 사용하여 batch-normalization을 수행합니다.
평균과 분산이 inference 시 고정되기 때문에 normalization은 단순히 각 activation에 적용되는 선형변환이 됩니다. 아래 알고리즘2는 batch-normalized network의 절차를 요약하여 보여줍니다.
Batch-Normalization은 어떠한 종류의 activation에도 사용할 수 있습니다.
전통적인 deep network에서 너무 큰 learning rate는 gradient explode나 vanish 현상을 발생시켰고, local minima에 빠질 수도 있습니다. Batch Normalization은 이러한 문제를 해결해줍니다.
해당 논문에서는 deep network 학습 속도를 극적으로 증가시키는 새로운 방식을 소개하였습니다.
해당 논문에서는 각 mini-batch 별로 normalization을 수행하고 normalization parameter를 통해 gradient를 back-propagte를 수행합니다. Batch Normalization은 activation 마다 2개의 parameter를 추가하고 이를 통해 network의 representation을 유지시켜줍니다.
Batch Normalization을 추가해줌으로써 학습의 속도를 높일 수 있었습니다. 더 나아가 learning rate를 크게 가져갈 수 있으며, dropout을 제거할 수 있습니다.