본문 바로가기
[ 딥러닝 ]

배치 정규화 (Batch Normalization)

by 불주먹고양이 2023. 5. 31.

정규화 (Normalization)은 일반적으로 0 ~ 255 사이의 값을 0 ~ 1 사이의 값으로 변환해주는 것이다.

정규화의 이점은 다음 그림으로도 파악할 수 있는데,

출처 : https://dbstndi6316.tistory.com/384

정규화를 하지 않은 A에서는 local minimum에 빠지기 쉽지만, 정규화를 한  B는 상대적으로 local minimum에 빠질 가능성을 줄일 수 있다.

 

 

배치 정규화 (Batch Normalization)는 모델이 학습하기 전에 배치 데이터 값의 범위를 조정하는 것을 말한다.

각 층의 활성화 값이 적당히 퍼뜨려지도록 강제하는 방법이다.

 

아직 개발된지 얼마 안 된 기술이지만 많이 사용되고 있다.

 

 

1. 배치 정규화 효과

(1) 학습 속도 가속화

배치 정규화를 적용하면 학습이 빨리 진행되도록 하는 효과가 있는데, 그 이유는 다음과 같다.

 

학습 속도 가속화라는 것은 각 iteration, epoch의 진행 속도가 향상된다는 뜻이 아니다!

정해진 loss 만큼 줄어들기 위해 필요한 학습 epoch와 반복 횟수가 줄어든다는 뜻이다.

 

배치 정규화가 적용되지 않으면 각 layer로 들어가는 batch input 들의 범위가 제각각이다보니 파라미터들이 수렴하는 데에 오랜 시간이 걸린다.

배치 정규화를 하고 입력하게 되면 입력 value들이 좁은 범위에서 움직이기 때문에, 각 layer의 paramteter들이 들쑥날쑥하는 상황을 줄일 수 있다.

 

(2) 초기값에 크게 의존적이지 않게 된다.

학습 데이터 분포가 잘 퍼져 있기 때문에 학습을 통해서 가중치를 갱신하면 된다.

 

(3) 오버피팅을 억제한다.

배치 정규화를 통해 각 레이어에서 활성화 값의 분포가 정규화하면 분포가 안정화된다.

이는 기울기 소실이나 폭주를 줄이고, 층 간의 안정성이 향상된다. 이를 통해 모델이 더 일반화된 표현을 학습할 수 있으며 오버피팅을 줄이는 데 도움이 된다.

 

 

 

2. Internal Covariate Shift

신경망 학습 과정에서 학습이 불안정해지는 이유이다.

 

(1) Covariate (공변량)

종속변수에 대하여 독립변수와 기타 잡음인자들이 공유하는 변량을 의미한다.

다시말해 독립변수들이 종속변수에 얼마나 영향을 주는지 알고 싶을 때, 즉 관계를 밝히려 할 때 방해가 되는 요인이다.

 

(2) Covariate Shift

학습 데이터와 테스트 데이터의 데이터 분포가 다른 현상을 의미한다.

출처 : https://blog.bigml.com/2014/01/03/simple-machine-learning-to-detect-covariate-shift/

 

(3) Internal Covariate Shift

학습 데이터를 가지고 학습을 진행할 때, 가중치가 학습하면서 이전 레이어의 값에 따라 다음 레이어의 가중치 값이 영향을 받게 된다.

 

아무런 규제가 없이 가중치들이 학습되면서 값의 범위가 넓어지고 변동이 심해지는 현상을 말한다.

출처 : https://medium.com/geekculture/tagged/internal-covariate-shift
출처 : https://heytech.tistory.com/438

 

(4) 화이트닝 (Whitening)

화이트닝의 목적은 입력 데이터의 상관 관계를 줄여서 데이터를 더 독립적이고 가우시안 분포를 따르는 형태로 변환하는 과정이다.

 

입력 데이터의 공분산 행렬 계산 ▶ 고유값 분해 ▶ 데이터를 고유값의 제곱근으로 나누기 ▶ 고유벡터 변환 적용

 

입력 데이터의 각 축이 상관관계가 없고 독립적인 형태로 변환된다. 입력 데이터의 분포를 변환하여 모델이 데이터를 더 쉽게 학습할 수 있도록 한다.

 

계산량이 많고 일부 파라미터들의 영향이 무시된다는 점에서 Internal Covariate Shift의 해결책으로 적당하지는 않다.

따라서, Batch Normalization을 이용하여 해결한다.

 

 

 

3. 배치 정규화를 하는 방법

배치 정규화 계층을 삽입하면 된다.

출처 : https://thebook.io/080289/0600/

 

(1) 정규화

학습 시에 미니배치 단위로 정규화한다.

미니 배치의 평균, 분산을 구하고 정규화를 진행한다.

출처 : https://light-tree.tistory.com/139

 

(2) 확대와 이동 (Scale and Shift) 변환

분포가 평균이 0이고 분산이 1이 되도록 정규화하고, scale and shift 를 진행한다.

 

신경망은 비선형성을 가지고 있어야 표현력이 커져 복잡한 함수를 표현할 수 있다.

평균이 0이고 분산이 1인 데이터를 고정시키면 활성화 함수를 통과한 값들은 거의 대부분 Sigmoid 함수의 직선 (선형) 부분에 머물게 된다. 비선형성이 사라지게 되는 것이다!

 

이런 문제를 해결하기 위해서 확대 (Scale)와 이동 (Shift) 변환을 수행한다.