Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

EHFKSWL

Batch Normalization 본문

Deep Learning

Batch Normalization

도란지 2021. 5. 13. 15:49

Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift

위 논문 내용의 일부를 요약하였습니다.


Batch Normalization을 이해하기 전에 딥러닝에서 Normalization이 왜 필요한지 먼저 이해해야 한다. BN은 Normalization 앞에 Batch가 붙은 것이므로 Batch 단위로 Normalization을 진행하겠다는 것을 예상해 볼 수 있다.

Normalization이란?

Normalization은 말 그대로 데이터를 정규화 시키는 것을 말한다. 고 3때 통계 과목에서 정규화라고 하여 x에 평균값을 빼주고 표준편차로 나누는 것을 배운 경험이 있을 것이다. 이것도 정규화 방법의 하나이며 0~255 사이의 값을 갖는 image를 255로 나눠주어 0~1의 값으로 바꾸는 것도 Normalization이다. 

cs231n data normalization

cs231n 수업의 data normalization 그림이다. 일반적으로 데이터가 zero-centered 되야 학습이 잘된다고 알려져 있다. 그래서 original data를 중간 그림과 같이 zero-centered 되도록 옮기고, (shifting) normalization을 통해 데이터의 scale에 변화를 준다.(scaling)

 

그럼 데이터 Normalization을 했을 때 장점은 무엇일까?

 

아래와 같이 non-normalization 데이터는 feature scaling이 다르기 때문에 큰 learning rate 에서는 scale이 작은, 그리고 작은 learning rate에서는 scale이 큰 feature가 학습이 잘 된다. 각 feature들의 scale별로 학습이 잘되는 learning rate가 다르기 때문에 최적의 learning rate를 찾기가 힘들고 학습이 느리다. 아래 그림에서도 zigzag 모양으로 학습이 진행되고 있다.

그러나 normalization data에서는 data feature들의 scale 범위가 비슷하기 때문에 learning rate 값을 잘 설정했다면 각 feature가 결과에 영향을 주는 정도가 비슷해져서 minimum 값에 빠르게 도달할 수 있다. 

또한 BN은 딥러닝 알고리즘 초기에 많은 문제를 만들었던 weight initialization 문제도 해결할 수 있다고 알려져있다.

Inherent covariate shift

DNN에서 학습시 parameter가 update 되기 때문에 각 레이어의 input의 distribution이 달라진다. 이것은 learning rate도 낮게 설정해야 하고, prameter도 정교하게 초기화 해야 하는 등 학습 속도의 전체적인 저하를 야기한다. 이것을 inherent covariate shift 라고 하며, Batch normalization이 해결하고자 하는 문제이다. 논문에서도 이 문제가 계속해서 언급된다.

Hidden layer의 입력도 Normalization 하자

위에서 말했듯이 Deep Learning에서는 input data가 많은 Layer를 거치면서 값이 바뀌게 되고, 분포 또한 달라진다. normalization 된 데이터를 input에 넣어 줘도, 중간에 가서는 scale이 달라질 수 있다는 것이다. 이것을 해결하기 위해 고안된 것이 Batch normalization이다. 다시 말하면 Batch Normalization은 input data에서 뿐만 아니라 hidden layer에서도 Normarlization 된 input을 넣기 위한 방법이다. Batch-norm을 하는 과정은 다음과 같다.

 

크기가 m인 mini-batch 단위로 데이터 학습을 한다고 하자. 평균과 표준편차를 구해서 x의 scale을 바꿔주는 과정은 일반적인 normalization과 같다. normalize에서 표준편차와 더해지는 ϵ은 안정성을 위해 표준편차가 너무 작은 값이 되는 것을 막기 위한 것이다. 여기까지 과정에서는 input x에 의해서 정해지는 값이다. Batch normalization에서 학습이 되는 것은 𝛄, β이다. normalized 된 x_hat에 대해서 𝛄, β로 scale and shift를 해줘 최종적으로 다음 layer에 들어가는 값을 조절할 수 있다. 논문에서는 단순히 normalize만 하면 sigmoid의 input으로 0에 가까운 값이 들어오기 때문에 Non linearity를 잃어버릴 수 있다고 한다. 그러나 sigmoid보다는 relu function을 Activation으로 많이 사용되는데 논문의 Non linearity를 잃어버린다는 말이 합리적인가에 대해서는 의구심이 든다. 어찌됐든 batch norm을 이용하면  이를 보완하기 위해 𝛄, β를 넣어 주는 것이며 학습을 통해 결과가 더 잘 나오도록 한다.

Batch normalization의 forward pass와 gradient 값을 나타낸 것이다. BN은 미분 가능한 알고리즘으로, 각 메트릭별 gradient는 논문에 나온 결과를 참고하길 바란다.

Batch normalization도 layer의 하나의 종류이다. tensorflow에서도 'tf.keras.layers.BatchNormalization' layer를 가져와서 사용할 수 있다. 일반적으로 BN은 FC Layer와 Activation 사이에 위치하지만 모델에 따라 달라질 수 있다.

'Deep Learning' 카테고리의 다른 글

Andrew Ng 교수님의 Data-centric 강의 요약  (0) 2021.05.25
Attention (Seq -to-Seq)  (0) 2021.05.13