본문 바로가기

Note/AI•ML•DL

[딥러닝] 배치 정규화 - Batch Normalization

정규화란?

정규화는 통계학에서 다루는 개념으로 위키백과에 의하면 어떤 대상을 일정한 규칙이나 기준에 따르는 '정규적인' 상태로 바꾸거나, 비정상적인 대상을 정상적으로 되돌리는 과정이라고 정의하고 있습니다. 

즉, 값을 표준화된 형태, 정규 분포 상 수치로 표현한 것 또는 그 과정을 정규화라고 할 수 있습니다.

 

최소-최대 스케일 변환을 통한 정규화 수식은 아래와 같습니다.

 

$$ x_{측정값}=\frac{x-x_{최소값}}{x_{최대값}-x_{최소값}} $$ 

 

그리고 표준화라고 불리는 정규화 수식은 아래와 같습니다.

 

$$ x_{측정값}=\frac{x-\mu_{x}(평균)}{\sigma_{x}(표준 편차)} $$

 

최소-최대 스케일 변환을 통한 정규화는 범위가 정해진 값이 필요할 때 사용하는 일반적인 기법으로 비정상적으로 아주 큰 값이 있거나 아주 작은 값이 있을때 사용합니다. 배치 정규화를 포함한 많은 머신 러닝 알고리즘에서는 표준화 수식으로 사용합니다. 

 

그렇다면 배치 정규화란? 하는 이유는?

배치 정규화는 레이어의 출력값이나 활성화 값을 정규화하는 것을 뜻 합니다. 모델이 학습을 할 때마다 출력값을 정규화하기 때문에 초기 가중치 설정 문제에서 비교적 자유로워질 수 있습니다.

 

그렇다면 배치 정규화를 하는 이유는 무엇일까요?

  • 우선적으로 정규화를 하게 되면 입력분포가 일정해짐에 따라 학습률(Learning rate)을 크게 설정할 수 있습니다. 학습률이 크다는 것은 학습속도도 빨라진다는 것을 의미하는 것이기 때문에 결과적으로 속도가 많이 개선됩니다.
  • 학습 시 출력값을 정규화하기 때문에 가중치 초기 설정시에 발생하는 문제에 대한 의존성이 적어진다고 볼 수 있습니다.
  • 과적합 위험을 줄일 수 있습니다.
  • 기울기 소멸 (Gradient Vanishing) 문제를 해결할 수 있습니다.
  • 가중치가 잘못된 방향으로 갱신될 수 있는 문제를 해결할 수 있습니다.
  • 가중치의 변화가 중첩되어 가중되는 크기 변화가 크다는 "internal covariate shift" 문제를 해결할 수 있습니다.
  • 또한 dropout을 대체할 수 있습니다.

 

보통 "internal covariate shift"를 줄이기 위한 대표적인 방법은 각 레이어의 입력에 whitening을 하는 것입니다. whitening 은 평균 0, 분산 1로 바꾸어 주는 것을 말하며 이러한 연산은 두가지 문제점이 있습니다. 

첫째로, weight 곱과 bias 합 연산 후에 정규화를 하기 위해 평균을 빼주게 되면 고정 스칼라 값인 bias의 영향이 사라지게 됩니다.

둘째는, 만약 sigmoid 활성화 함수를 통과하는 경우 대부분의 입력값이 sigmoid의 중간 부분에 속하게 됩니다. sigmoid의 중간은 선형이기 때문에 비선형성이 사라질 수 있습니다. 

 

이러한 문제를 해결하기 위해 배치 정규화 알고리즘이 등장했습니다.

 

배치 정규화 알고리즘

Batch normalization: Accelerating deep network training by reducing internal covariate shift

 

  1. 입력값 미니배치의 평균과 분산을 계산합니다.
  2. 출력값 또는 활성화값의 평균이 0, 분산이 1이 되도록 정규화를 합니다.
  3. 배치 정규화 단계마다 scale과 shift 변환을 수행합니다.

 

코드 분석

추후 Darknet 프레임워크의 코드를 통해 배치 정규화 알고리즘 분석글을 재업로드 하겠습니다. ^^7

 

 

참고자료

반응형