Day 17: Chapter 7-4 Batch normalization

2023. 3. 8. 23:53딥러닝 이론

오늘 공부한 내용은 Ch. 7-4입니다:

- Ch. 7-4 Batch normalization, 직관적으로 이해하기

 

딥러닝 면접에 오신 걸 환영합니다. 자, 첫 번째 문제 나갑니다... MLP model을 돌리는데 weights and biases의 변동이 거의 없고 gradient도 바닥을 기어 다니고 있습니다. Training loss도 역시 안 좋습니다. 이 현상을 뭐라 부르나요? 이 현상에 대한 해결책도 말씀해 주세요.

 

7-1, 7-2, 7-3

이 현상은 Vanishing gradient입니다. Vanishing gradient의 증상 중 parameters (특히 앞쪽)의 update가 둔해지고 gradient도 작습니다 (gradient가 적으면 parameter도 update가 많을 수 없음). 또한, vanising gradient문제가 나타나면 training loss가 높아 underfitted이라고도 볼 수 있습니다. 그렇기에 validation/testing accuracy도 낮습니다 (최악일 경우 거의 램던인 수준 = 왜냐하면 random initialization에서 나온 weighs에서 거의 변동이 없었으니까).

 

이 문제가 일어나는 이유는 보통 layer가 많아지면서 activation function의 작은 기울기가 여러 layer로 곱해지면서 0에 근접한다. 예를 들어 sigmoid function의 최대 기울기는 1/4이다. sigmoid activation을 사용한 layer가 4겹만 있어도 0.25 ^ 4 = 0.00390625가 되어 gradient가 너무 작아져 update과정이 많이 더뎌진다. Layer가 엄청 많은 것도 문제일 수 있지만 보통 activation function을 ReLU로 바꿔도 어느 정도는 해결이 된다.

 

7-4, 7-5

물론 ReLU도 완벽하진 않다. ReLU는 batch의 모든 input이 양수나 음수면 결국 linear 하고 non-linearity의 성질을 잃게 된다. 그리고 음수 같은 경우는 애초에 기울기가 0이라 오히려 더 심한 vanishing gradient를 일으킬 수 있다 ㅎㅎ. 그래서 우리는 ReLU에 normalization을 해 mean = 0, variance = 1이게 맞출 수 있다.

하지만 batch normalization을 쓰면 sigmoid도 사용이 가능합니다. 왜냐하면 batch normalization은 AI가 알아서 mean, variance를 찾아주기 때문입니다. 사실 이 또한 parameter가 되는 것입니다. Manually 정하는 것보단 좋겠죠? batch normalization은 node당 2개 a, b가 있어 3-node면 6개의 parameter가 loss calculation 할 때 들어갑니다.

근데 parameter 또 많으니깐 layer normalization도 가능합니다. Layer당 2개의 parameter를 사용합니다. Parameter a^2, b는 사실 분산과 평균이라 생각해도 좋습니다.