본문 바로가기
Deep Learning

Batch Normalization, Transfer Learning

by 자라자 2020. 9. 19.

futurelab.creatorlink.net/

Batch Normalization

Normalization을 하는 이뉴는 인풋 레이어의 스케일을 맞춰줘야 어느 방향에서든 학습이 잘 일어나기 때문이었는데, Batch Normalization은 layer마다 분포를 균일하게 잡아주는 역할을 합니다. Normalization은 activation function에 들어가기 전에 일어납니다.(affine 변환 레벨).

 

표준정규분포가 최상의 분포가 아닐 수 있기 때문에 추가 변수를 곱해서 분포를 재조정해줍니다. 

 

input에서는 데이터 전체에 대해서 normalization을 할 수 있지만, 연산중에는 mini-batch에 해당하는 계산만 하기 때문에, batch별로 평균과 표준편차가 구해집니다. 그리고 한 batch 안에서도 몽땅 평균 표준편차를 구하는 것이 아니라 각 feature별로 평균과 표준편차를 구합니다.  즉 feature의 개수만큼 1d array로 평균과 표준편차가 구해집니다.

 

베타와 감마는 learnable합니다. 이 부분이 매우 중요합니다.

 

그렇다면 BN을 안썼을 때는 무슨 문제가 일어날까요? Internal Covariate Shift가 발생합니다. BN을 통해 전달받는 값을 제한함으로써 해결할 수 있습니다. 동시에 gradient vanishing/exploding에 대한 방지도 가능합니다. 마지막으로 미세한 regularization에 대한 효과도 있습니다.  

 

 

Normalization Layers

Batch Normalization에는 몇 가지 단점들이 있습니다. 첫 번째는 batch size가 너무 작으면 평균, 분산이 너무 부정확해진다는 점입니다. 두번째는 RNN은 같은 layer에서도 cell의 이동에 따라 다른 feature들을 받으므로 통계량이 매번 다릅니다.

 Layer Normalization이라는 기법이 있습니다.  Batch Normalization은 feature별로 normalization을 하지만 Layer Normalization은 layer별로 진행합니다.

 

Transfer learning

Deep Learning에는 한계가 있습니다. 모델이 클수록 많은 데이터를 요구하고, 이는 필연적으로 training에 많은 시간이 필요하다는 단점을 가져옵니다. 이를 극복하는 방법이 Transfer Learning입니다.

모델을 학습시킬 시간적 여력이 없을 경우, Pretrained 모델을 불러와서 Freeze 시킵니다. 그래서 가중치를 가져다 쓸 수 있고, class에 따라 fine tuning을 해줘서 이용할 수 있습니다.