본문 바로가기

DeepLearningFromScratch

6.3 배치 정규화 (Batch Normalization)

배치 정규화란?

가중치 초기값을 적절히 설정하면 각 층의 활성화 값이 적절하게 고른 분포를 나타내며 분포하게 된다. (이해되지 않는다면 6.2 가중치 초기화 부분을 참고하길 바란다.)

 

그렇다면 각 층이 적당히 활성화 값을 퍼뜨리도록 가중치의 초깃값 설정이라는 불편함이 아니라 강제로 설정하는 방법?

이것이 바로 배치 정규화의 concept 의 출발이다.

 

1) 배치 정규화 알고리즘

 

먼저 왜 사용하는가에 따라 장점을 알고 넘어가자!!

1) 학습을 빠르게 진행할 수 있다.

잠시 Andrew Ng 교수님의 stanford university deep learning specialization lecture 의 내용을 인용하면 직관적으로 생각해보라. 만약 입력값으로 들어와서 연산을 해야할 값이 variation 이 커서 여기저기 분포되어있고 고르지 못하다고 한다면 수렴을 빠르게 할 수 있겠는가? 더욱 간단한 방법의 생각은 나의 데이터셋에서 feature1, feature2 가 있다고 가정하자 둘을 x 와 y 축에 넣고 좌표계를 도입해보면 평균이 0 이고 분산이 1인 예쁜 모양의 원형 안에 모여있다면  더욱 큰 학습률을 선택하여 사용할 수 있기에 그 수렴이 global optima 로 빠르게 수렴하지 않겠는가?

 

2) 초깃값에 의존하지 않는다.

물론이다. 앞서 말했던 것처럼 초깃값 설정에서 조금은 더 자유로울수 있게 만들겠다는 concept 에서의 출발이니 당연하다.

 

3) 오버피팅을 억제한다. (후에 다시 만날 Dropout 의 필요성 감소)

 

배치 정규화는 그 이름과 같이 학습시 미니배치를 단위로 정규화를 진행한다.

구체적으로 미니배치 속 데이터의 분포가 평균은 0이고 분산이 1이 되도록 정규화 한다. 여기서 연산되는 데이터는 가령 전체 데이터가 N 이라고 하면 그 중 m개의 데이터를 하나의 미니배치로 묶어 시행하는 것이다.

 

대개 이 시행을 활성화 함수 앞이나 뒤에서 처리한다. (활성화값의 분포가 고르게 분포되기 위하여)

배치 정규화 계층마다 이 정규화된 데이터에 대하여 고유한 확대와 이동 변환을 수행한다.

정규화 데이터를 x_hat 이라고 가정하면, y_i <- gamma * x_hat_i + beta 와 같이 수행된다.

default 값으로 매개변수인 gamma 와 beta 는 각각 1 과 0 으로 사용된다.

BatchNormalization 을 사용한 것과 사용하지 않은 것의 수렴 속도 차이이다. 물론 초기값을 다르게 하여 보았다.

특정 매개변수의 초기값을 제외하면 대부분의 경우가 배치 정규화를 사용하는 것이 유리하다는 것을 보일 수 있다.

batch_norm_test.py
0.00MB