1번 글에 이어서 시작해보겠습니다. 1번 글은 BatchNorm에 본격적으로 들어가기 전에 Feature Scaling에 대해 알아두는 것이 좋을 거 같아서 작성한 글입니다.
Feature Scaling으로 입력값의 분포에 안정성을 얻게 되었지만 첫번 째 Layer 이후 Layer들의 입력 값들의 분포도 안정이 되어야 한다는 것이 BatchNorm의 기본 아이디어입니다. 저자는 이를 Internal Covariate Shift 현상이라고 합니다.
먼저 Covariate Shift는 Train 시의 Data의 분포와 Test 시 Data의 분포가 다르다면 Test시 모델의 성능이 현저히 떨어지는 현상을 말합니다.
고양이 인것과 고양이가 아닌 것들을 분리하는 이진 분류 상황에서 학습 때는 검은색 고양이의 이미지만 사용했다가 Test에서 주황색 고양이가 나오게 되자 모델의 성능이 떨어지는 사례가 이에 해당합니다. 극단적인 예를 들었지만 이러한 현상은 Feature Scaling으로 분포를 안정화 시키면서 극복이 가능해진다고 합니다.
Internal Covariate Shift는 입력 데이터가 아니라 모델 내부의 Layer에서 입력 분포가 Training Step마다 변하게 되면 Layer의 파라미터가 계속해서 바뀌는 분포에 적응해야하기 때문에 성능이 높아지기 어려운 상황이 됩니다.
Training Step 마다 각각의 Layer의 분포가 바뀌게 되는 것은 이런 상황을 의미합니다. 저자가 언급하기를 분포의 극복하기 위해 이전부터 존재했던 방법으로 Whitening이라는 방법론이 있습니다. Whitening은 변수들의 분포를 서로 독립이며 평균이 0이고 분산이 1인 정규분포 상대로 가정할 수 있는 상태로 만드는 것을 의미합니다. Whitening을 사용하게 되면 학습 단계에 상관없이 동일한 분포를 가정할 수 있게 되는 것입니다.
Whitening의 과정은 PCA의 주성분에 고윳값의 제곱근을 나눠서 평균이 0이고 분산이 1인 변수들로 치환하는 방법을 말합니다.
PCA를 모르시는 분들을 위해 간단히 설명을 해보자면 Principal Component Analysis로 주성분 분석이라는 의미를 가집니다. 차원축소의 일환인데 아래의 식으로 얻은 공분산 행렬에 대해 고윳값 분해를 해서 고윳 값이 큰 순서대로 나열한 후 작은 고윳값은 0으로 치환하며 데이터를 표현함에 있어 설명력이 좋은 축을 남기게 되는 것을 의미합니다.
공분산 행렬은 XtX의 형태이므로 대칭행렬의 형태를 띕니다. 대칭행렬의 고유벡터는 서로 직교한다는 성질과 직교가 되고 각각의 벡터가 직교가 되면 변수간 독립을 가정할 수 있게 됩니다. 또 각각의 주성분들의 분산은 고윳값으로 나타는데 주성분들을 고유값의 제곱근으로 나눠주면 주성분의 분산은 1이 되게 되는 것입니다. (잘 모르시는 분들은 일단 PCA 후 PCA로부터 얻은 고윳값의 제곱근으로 주성분이라는 것을 나눠주면 직교가 되어 독립이 보장되고 분산이 1이 된다는 것만 알고 넘어가지면 좋을 거 같습니다.)
이러한 과정을 거치게 되면 일단 공분산 행렬을 구해야 함은 물론이고 공분산 행렬에 대해 추가적인 미분값을 구해줘야 하는 상황에 이르게 됩니다. 저자가 언급한 Whitening의 문제점은 Bias에 대한 문제였습니다.
위의 내용을 나름 증명해 본 것입니다.
제가 증명한 내용이 정확하지는 않지만 저자가 하고 싶으셨던 말은 bias가 계속해서 업데이트는 되지만 x^의 값이 업데이트 되지 않으므로 값이 계속해서 누적되게 되고 이때 Gradient Exploding이 발생해서 학습에 안좋은 영향을 미쳤다고 합니다. 이를 방지하기 위해 두 가지 식에 대해 미분값을 구해줘야 한다고 했습니다.
bias에 대한 미분을 구할 때 x^ 뿐만 아니라 X에 대해서도 고려해줘야한 다는 것입니다. 이런 식으로 화이트닝을 각 Layer마다 진행하게 되면 연산량이 매우 많아지게 되기 때문에 다른 더 간단한 방법을 고려해야 했습니다.
그 방법이 BatchNorm이었습니다.

여기서 X는 이전 Layer의 Activation Function을 통과한 후 가중합이 된 값을 말합니다. 간단히 X = Wu+b라고 나타낼 수 있습니다. BatchNorm은 x에 대해 Batch 단위로 평균 μ(B)와 δ(B)를 각 dimension마다 구해서 정규화해준 후 학습 파라미터 γ, β를 이용해 Reparameterization을 해주게 됩니다. 여기서 γ(Scaling)는 분포의 분산, β 평균을 구해 분포를 옮겨주는(Shfting Parammeter)
γ, β를 추가적으로 학습 시키는 이유는 신경망은 Actvitvaiton Function을 사용하기 때문입니다. 표준화된 값은 표준 정규분포를 따르기 때문에 평균은 당연히 0일 것이므로 대부분 -2~2사이 값을 가지게 될 것입니다. 이를 Sigmoid 함수의 그래프에 적용해 보면 아래와 같은 그림이 나옵니다.
-2~2 값을 가지게 되면 Linear한 구간에 속하게 되어 비선형성을 잃게 됩니다.
반대로 정규화를 해주지 않은 채 극단적인 값이 나오게 되면 Saturated Regime에 빠지게 되는데 Saturated Regime의 기울기는 0에 가까우므로 Vanishing Gradient 현상이 일어나게 될 것입니다.
따라서 학습 파라미터 γ, β는 학습이 잘 되는 분포를 갖도록 비선형 함수의 Input 값의 분포를 변형해준다고 볼 수 있습니다.
이렇게 γ, β가 잘 학습되면 두 가지 Regime에 빠지지 않게 될 것입니다.
ReLU 함수에서 Linear Regime과 Saturated Regime에 빠지는 경우
잘 학습된 분포
Batch Normalization의 위치
Hidden Layer의 기능은 두 가지로 볼 수 있는데 가중합과 acitvation이 있습니다. 따라서 부분으로 나눠보면 Batch Norm이 적용될 수 있는 위치는 가중합 이전, 가중합 이후 Activation 이전, Activation 이후가 될 수 있겠죠.
하지만 위에서 봤다시피 Batch 정규화의 학습 파라미터들의 설계가 activation function의 input으로써 기울기를 더 잘 전달할 수 있게 하는 목적이므로 Activation Function이전에 존재하는 것이 가장 성능이 좋을 수 밖에 없게 되는 것입니다.
또 저자가 언급하기를 Batch Normalization을 사용하면 높은 Learning Rate를 사용할 수 있다고 합니다.
큰 Learning Rate를 사용할 경우 파라미터의 Scale이 커지게 되어 Vanishing Gradient 혹은 Exploding Gradient 현상이 일어날 수 있습니다.
저자는 위의 식들을 높은 Learning Rate를 사용해도 되는 근거로 사용했습니다.
저자의 식을 증명해본 결과 입니다. 결국 높은 Learnig Rate에 의해 파라미터의 스케일이 커지게 되어도 기울기의 값에는 변화가 없거나 작아지게 되어서 파라미터의 수렴이 더 원활하게 된다는 내용을 담고 있습니다.
Convolution Layer에서 BatchNormalization
Convolution Layer의 Output Channel에 대해 픽셀값들이 Batch 단위로 정규화된 후 학습 파라미터 γ, β 곱해지고 더해지는 것 여기서 Pixel 마다 γ, β가 학습되는 게 아니라 Output Feature Map 하나마다 γ, β가 한 개 씩 학습이 된다는 점을 유의하셔야합니다. Activation Function은 결국 Pixel 값에 적용되므로 픽셀 마다 γ, β를 학습 시키면 안되는지 물음이 생길 수 있지만 그렇게 되면 해상도에 따라 학습 파라미터의 개수가 기하 급수적으로 늘어나게 될 것이니 그런 것이 아닐까 생각해 볼 수 있겠습니다.
Convolution 연산 후 Ouput 얻은 Output Channel에 대해 픽셀값을 배치단위로 정규화한 후 채널 마다의 학습 파라미터 γ, β를 곱하고 더해주는 것 입니다.
Inception Model로 Classification 학습의 수렴 속도를 비교한 지표들입니다. 기본적으로 Activation은 RelU를 썼고 Sigmoid를 쓴 Model의 성능은 다소 떨어지는 게 보입니다. BatchNorm을 사용했을 때 그리고 BatchNorm에 높은 Learning Rate를 사용했을 때 더 빠르게 학습하는 걸 볼 수 있습니다.
Batch Norm은
"Activation의 Input을 정규화한 후 학습 파라미터 γ, β를 곱하고 더해줌으로써 Gradient의 안정성을 더한 기법"
이라 정리하며 Batch Normalization의 논문 리뷰를 마치겠습니다.