Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

자습용으로 공부하기 위해 정리한 자료 입니다. 출처는 맨 밑에 있습니다.

 

1. Learning Problem in DNN Internal Covariate Shift

– 뉴럴네트워크는 히든레이어가 많아서 학습이 힘듬
– Deep Learning은 히든 레이어가 더 많아서 학습이 더 힘듬.

이게 왜 힘드냐면 웨이트의 조금만 변화가 쌓이다 보면은 높은 레이어로
갈수록 변화가 더 커지기 때문이다.

결국 히든 레이어의 값이 변동이 심한것이 학습에 문제를 일으킵니다.

DNN의 훈련의 문제 상황을 보면

만약에 히든레이어2까지 변화가 별로 없는 값이 들어오게 된다면
H2기준으로 웨이트를 변화를 적게 주면서 학습하면 학습이 잘됨.

그러나 웨이트의 영향을 받아서 h2의 값이 너무 다른값을 가지게 된다면
기존의 값과 너무 다르기 때문에 어떻게 학습할지 모르게 됨.

딥러닝의 웨이트를 학습하는것도 처음의 학습하는 노드의 분포와
다음의 분포가 다르면 학습이 잘 안되게 된다 라는것이고,

이것을 Internal Covariate Shift라고 합니다.
Internal Covariate Shift를 해결하기 위해 두가지 방법이 있었는데,

– 초기값을 잘 설정해야하고
– 러닝웨이트를 적게 해서 잘 해야 합니다.

더 좋은 방법이 있었으니 BN(Batch Normalization)

2. Batch Normalization

위에서 설명했듯이 H2 weight가 값이 변동하는 폭이 적다면 학습이 잘 될것이다 라고 가정할수 있음

Input layer의 출력이 Hidden layer로 들어가는데, 이것을 좀더 상세히 풀면은
input x가 있고 weight가 있고, wx로 곱하고 이것을 Activation 함수를 통해 보낸다.

여기서 wx값이 흔들리는것을 막기 위해서 (액티베이션 함수 전단계)  Batchnorm을 집어 넣고
스케일을 조정해서 Activation 전 값의 변화를 줄이는 것이 BN의 목적임

왼쪽은 BN적용 오른쪽은 BN 미적용을 분리하여 설명

WX는 가로고 세로는 Activation 값
BN은 input X의 weighted sum의 스케일을 줄입니다.
기존에 학습한거의 분포가 노란색처럼 생겼고,
새롭게 학습하여 들어온 weighted sum의 분포가 녹색이라고 하면
BN은 scale을 줄이기 때문에 스케일을 줄여서 기존에 학습했던 분포와 조금 다르지만 비슷하게
맞춰주게 됩니다.(노란색점섬)

다찬가지로 레이어가 쌓여도 비슷하게 Scale을 변화해서 기존분포와 비슷하게 해줍니다.(분포가 비슷하니 학습이 잘됨)

그러나 BN을 사용하지 않으면 오른쪽처럼 변화가 축적되어서 학습되었던 분포와 새로 들어오는 값의 분포의 차이가 벌어져서 이것이 결국 학습을 방해하게 됩니다.

input 값의 scale을 조정하기 위해 0  mean에 unit variance를 사용하게 됨

0 이하면 0으로 죽어 버리고 너무 크면 NonLinearity 한 값을 가지지 못하는 문제가 있기때문에
sigmoid도 마찬가지로, 0 주변에서 사용해야 합니다. 양 극단으로 가면 vanishing gradient 문제가 발생하기 때문입니다.

그래서 대표적인 값으로 zero mean + unit variance(분산이 1)을 많이 사용함

앞에서는 BN을 설명하기 위해서 Layer단위로 설명을 했는데, BN는 node단위로 들어가게 됨
식을 보면
– 배치 단위로 평균을 구하고
– 배치단위로 분산을 구하고
– 그 값으로 노말라이즈를 합니다. 에타는 분산이 너무 작을경우 보정해주는 상수임

앞에서 평균 0에 분산 1이 좋다는 것을 이야기 했으나, Relu의 경우 값의 절반이 죽어버릴수
있으니 조금 옮겨서 보다 많은 값을 가져가도록 스케일을 바꿀수 있고,

sigmoid인 경우 Nonlinearity를 반영하고 싶었는데 너무 0에 모여 있다면 Not nonlinearity만 반영되기 때문에 Scale을 좀 넓혀 주는것이 좋다.

이런 Scale shift 파라미터는 Backpropergation으로 학습할수 있다.

 

3. Batch Normalizatin 장점

– 이니셜 값을 힘들게 설정하지 않아도 학습이 잘됨
– 높은 Learning rate를 사용해서 학습을 빨리 할수 있음
– 정규화 효과가 있어서 dropout이 필요 없을수도 있음

4. 실험

그래서 위 그래프와 같이 BN을 사용하면 효과가 좋고, covariate 문제를 해결하였다.

5. 결론

Batch Norm은 Internal covariate 문제를 해결하기 위해 제안되었음
– 빠른 학습이 가능(높은 러닝레이트 사용가능)
– Initial values에 신경을 덜써도 됨
– regularization effect 효과가 있음

 

6. One more thing

Relu와 다르게 값이 -1 영역도 있고,
보통 activation 을 통화한 다음의 값이 0에서 0.1사이에 값을 많이 가진다고 함.

결국 Activation 전에 input의 분산과 평균을 조정하지 않아도 분포의 변화없이 지속적으로 값을 내놓기 때문에 BN없이도 훈련이 잘된다고 함

 

 

참고자료

논문 : https://arxiv.org/abs/1502.03167

출처 : https://www.youtube.com/watch?v=TDx8iZHwFtM&index=22&list=PLlMkM4tgfjnJhhd4wn5aj8fVTYJwIpWkS

Leave a Reply

Your email address will not be published. Required fields are marked *