Batch Normalization (배치 정규화)
- 신경망을 훈련할 때 일반적으로 어려운 한 가지는 가중치를 일정한 범위 내에서 유지해야 한다는 것입니다.
가중치가 커지기 시작하면 gradient exploding 문제가 발생하고 작아지면 gradient vanishing 문제가 발생합니다.
- 신경망의 입력 데이터 스케일을 조정하는 이유 중 하나는 처음 시작되는 훈련을 안정적으로 시작하기 위함입니다.
처음 네트워크의 가중치가 랜덤 하게 초기화되어 학습되기 때문에 스케일 조정이 되지 않으면 큰 폭으로 출렁이게 됩니다. 그래서 앞서 CNN을 구현했을 때 입력 데이터의 0 ~ 255 사이의 픽셀 값 대신 0 ~ 1 사이의 스케일로 바꿨습니다.
- 입력 데이터의 스케일을 조정했기 때문에 모든 layer의 활성화 출력도 비교적 안정될 것이라 기대하고 훈련합니다. 하지만 네트워크의 훈련이 진행되면 초기의 랜덤 한 가중치 값과 점점 멀어지는 가중치 값이 나오기 때문에 안정될 것이라 생각했던 것은 무너집니다. 논문에서는 이것을 convariate shift라고 합니다.
Batch Normalization 알고리즘
- 그렇다면 각 layer이 활성화를 적당히 퍼트리도록 '강제' 하면 어떨까요?
Batch Normalization의 아이디어가 여기서부터 출발한 방법입니다!
- 배치 정규화 식을 보시면 어렵지 않습니다.
- 미니 배치 B = {x1, x2, x3, ~ xm}이라는 m개의 데이터에 대해 평균과 분산을 구합니다.
그리고 입력 데이터를 평균이 0, 분산이 1이 되게(적절한 분포가 되게) 정규화하는 것입니다!
normalize 식에 있든 입실론은 0으로 나누는 상황을 막기 위해 사용합니다.
- 마지막 scale and shift의 식은 배치 정규화 계층마다 정규화된 데이터에 고유한 scale과 shift 변환을 수행하는 것입니다. gamma가 scale을 beta가 shift를 담당하며 두 값은 처음에는 1과 0부터 시작하며 학습하면서 적합한 값으로 조정해 가는 것입니다. 즉, 학습되는 파라미터인 것이죠.
Batch Normalization 효과
- 이런 batch normalization이 주목받는 이유가 무엇일까요? 배치 정규화는 2015년에 나온 이후로 많은 연구자와 기술자가 즐겨 사용하고 있으며 이 batch normalization을 사용하여 뛰어난 결과를 달성한 예가 많습니다.
1. 학습 속도 개선
2. 초깃값에 크게 의존하지 않음
3. 오버피팅 억제
- 이러한 이유로 batch normalization은 나온 이후로 많이 쓰이고 있습니다.
여기까지 batch normailzation에 대해 알아보았습니다.
딥러닝을 공부하면서 나오는 용어들에 대해 하나씩 정리해나갈 예정입니다.
틀린 점이나 질문이 있으시면 댓글로 남겨주세요!
감사합니다 :)
'AI > DL' 카테고리의 다른 글
ResNet 구조 이해 및 구현 (4) | 2021.08.25 |
---|---|
VGGNet 구조 이해 및 구현 (3) | 2021.08.20 |
AlexNet 구조 이해 및 구현 (2) | 2021.08.19 |