배치 정규화 핵심 요약
배치 정규화 정의
인공 신경망의 각 층에 들어가는 입력을 평균과 분산으로 정규화하여 학습을 효율적으로 만듦
장점
- 학습 속도(training speed)를 빠르게 함
- 가중치 초기화(weight initialization)에 대한 민감도를 감소시킴
- 모델의 일반화(regularizaion)효과가 있음
배치 정규화 레이어 (BN Layer)을 추가하여 진행한다.
파라미터의 개수도 적어서 성능을 비약적으로 높일 수 있음
연구 배경: 입력 정규화
입력데이터가 표준 정규분포를 가질 수 있도록 정규화해줌
이미지 같은 경우에 이러한 표준화 방법을 자주 사용함
은닉층 정규화
감마와 베타에대한 학습을 진행함
배치 정규화를 하는 이유
딥러닝에서 층에서 층으로 이동될 때마다 이전 층들의 학습에 의해 가중치 값이 바뀌게 되면, 현재 층에 전달되는 입력 데이터의 분포와 현재 층에 학습했던 시점의 분포와 차이가 발생합니다. 이러헤 층 별로 입력 데이터 분포가 달라지는 현상을 "내부 공변량 변화"이라고 합니다.
※ 공변량 변화 vs 내부 공변량 변화
-. 공변량 변화 : 훈련 데이터의 분포와 테스트 데이터의 분포가 다른 경우를 의미
-. 내부 공변량 변화 : 신경망 층 사이에서 발생하는 입력 데이터의 분포 변화를 의미
배치 정규화가 이루어지는 시점
각 층에서 활성화 함수를 통과하기 전에 수행
배치 정규화의 장점
- 훨씬 큰 학습률을 사용할 수 있어 학습 속도를 개선시킵니다.
- 배치 정규화를 사용하면 시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용하더라도 기울기 소실 문제가 크게 개선됩니다.
- 가중치 초기화에 훨씬 덜 민감해집니다.
- 미니 배치마다 평균과 표준편차를 계산하여 사용하므로 훈련 데이터에 일종의 잡음 주입의 부수 효과로 과적합을 방지하는 효과도 냅니다. 다시 말해, 마치 드롭아웃과 비슷한 효과를 냅니다. 물론, 드롭 아웃과 함께 사용하는 것이 좋습니다.
- 배치 정규화는 모델을 복잡하게 하며, 추가 계산을 하는 것이므로 테스트 데이터에 대한 예측 시에 실행 시간이 느려집니다. 그래서 서비스 속도를 고려하는 관점에서는 배치 정규화가 꼭 필요한지 고민이 필요합니다.
- 배치 정규화의 효과는 굉장하지만 내부 공변량 변화때문은 아니라는 논문도 있습니다.
배치 정규화의 한계
1. 미니 배치 크기에 의존적이다.
배치 정규화는 너무 작은 배치 크기에서는 잘 동작하지 않을 수 있습니다. 단적으로 배치 크기를 1로 하게되면 분산은 0이 됩니다. 작은 미니 배치에서는 배치 정규화의 효과가 극단적으로 작용되어 훈련에 악영향을 줄 수 있습니다. 배치 정규화를 적용할때는 작은 미니 배치보다는 크기가 어느정도 되는 미니 배치에서 하는 것이 좋습니다. 이처럼 배치 정규화는 배치 크기에 의존적인 면이 있습니다.
2. RNN에 적용하기 어렵다.
뒤에서 배우겠지만, RNN은 각 시점(time step)마다 다른 통계치를 가집니다. 이는 RNN에 배치 정규화를 적용하는 것을 어렵게 만듭니다. RNN에서 배치 정규화를 적용하기 위한 몇 가지 논문이 제시되어 있지만, 여기서는 이를 소개하는 대신 배치 크기에도 의존적이지 않으며, RNN에도 적용하는 것이 수월한 층 정규화(layer normalization)라는 방법을 소개하고자 합니다.
입력정규화의 목적 : 하나의 데이터가 각각의 축에 대해서 비슷한 범위를 가지게 하는 것이 목표
입력데이터가 표준 정규분포의 값을 가질 수 있도록 값을 변경하는 것이 목표이다
Input : 미니 배치 B={x(1),x(2),...,x(m)}
Output : y(i)=BNγ,β(x(i))
- m은 미니 배치에 있는 샘플의 수
- μB는 미니 배치 B에 대한 평균.
- σB는 미니 배치 B에 대한 표준편차.
- x^(i)은 평균이 0이고 정규화 된 입력 데이터.
- ε은 σ2가 0일 때, 분모가 0이 되는 것을 막는 작은 양수. 보편적으로 10−5
- γ는 정규화 된 데이터에 대한 스케일 매개변수로 학습 대상
- β는 정규화 된 데이터에 대한 시프트 매개변수로 학습 대상
- y(i)는 스케일과 시프트를 통해 조정한 BN의 최종 결과
선형적인 구간 - > 정규화되면 더욱 선형적이게 됨
따라서 감마와 베타를 이용하여 non-linear하게 만들어줌
VGG 아키텍쳐에서 시행한 배치정규화
결과적으로 파란선 -> 빠르게 성능이 잘 나온다는 것을 알 수 있음
배치 정규화를 안하고 하이퍼파라미터를 잘못 적용하면 -> 학습이 잘 안되는 것을 볼 수 있음
배치 정규화를 하고 하이퍼파라미터를 조금 잘못 적용해도 그나마 학습이 된다는 것을 볼 수 있음
앱실론 값: 값을 보정해줌
각각 변수에 대한 기울기 구해보기
감마와 베타에 대해 학습을 진행한다
출처
https://www.youtube.com/watch?v=58fuWVu5DVU 나동빈님 유튜브
https://daje0601.tistory.com/306 [코딩일기:티스토리]
'공부정리 > Deep learnig & Machine learning' 카테고리의 다른 글
[Deeplearning] 작물 잎 사진으로 질병 분류하기 (1) 베이스라인 설계- Pytorch (0) | 2023.01.10 |
---|---|
[딥러닝] 밑바닥부터 시작하는 딥러닝 2 - Chapter 1 신경망 복습 (1) (0) | 2022.09.16 |
[딥러닝] 활성화 함수 정리 (0) | 2022.08.22 |
[딥러닝] 활성화 함수 요약 정리 (0) | 2022.08.22 |
[핵심 머신러닝] 군집분석 (0) | 2022.08.17 |