Batch Normalization(배치정규화)
: 각 층의 출력값들을 정규화하는 방법
: 배치 정규화를 통해서 Vanishing Gradient 현상을 해결하고 근본적으로 학습과정을 안정화할 수 있다.
깊은 신경망일 수록 같은 input 값을 갖더라도 가중치가 조금만 달라지면 완전히 다른 값을 얻을 수 있다. 이를 해결하기 위해서 각 층의 출력값에 배치정규화 과정을 추가해서 가중치의 차이를 완화해서 보다 안정적인 학습이 이루어질 수 있도록 한다.
Algorithm의 개요는 위와 같다. 뉴럴넷을 학습시킬때 미니 배치 단위로 데이터를 가져와서 학습시키는데, 각 미니배치의 평균값과 표준편차값을 구해준 다음에 normalize 해주고, scale factor와 shift factor를 이용하여 새로운 값을 만들어주는 것이다. 실제 적용시킬때에는 특정 hidden layer에 들어가기전에 Batch Normalization layer를 더해주고 input을 modify해준 뒤에 새로운 값을 activation function으로 넣어주는 방식을 사용한다.
Training 할때에는 mini-batch의 평균과 분산으로 normalize하고, Test 할때에는 계산해놓은 이동 평균(입력되는 평균과 분산을 이용하는 것이 아닌, Deterministic하게 고정된 평균과 분산값을 이용)으로 normalize한다. Train 과 Test모드가 따로 있다.
정리 : 미니배치의 평균과 분산을 이용해서 정규화 한 뒤에, scale 및 shift를 감마값 베타값을 통해 실행한다. 이 때 감마와 베타 값은 학습 가능한 변수이다. 즉 Back propagation을 통해서 학습이 된다.
이렇게 정규화된 값을 활성화 함수의 입력으로 사용하고, 최종 출력값을 다음 레이어의 입력값으로 사용하는 것이다.
output = g(Z), Z = WX + b 식은 output = g(BN(Z)), Z = WX + b 로 변경되는 것이다.
정규화
정규화를 하는 이유는 학습을 더 빨리하기 위해서 or Local optimum 문제에 빠지는 가능성을 줄이기 위해서 사용한다. 최저점을 찾을 때에 그래프를 전체적으로 이해하지 못하기 때문에 global optimum 지점을 찾지못하고 Local optimum에 머물러 있게 되는 문제가 발생한다. 이러한 문제점을 정규화를 통해서 local optimum에 빠질 수 있는 가능성을 낮춰주는 것 같다. 그림에서 보는 것 처럼 local optimum이 global optimum과 차이를 줄여주는 normalization방법을 통해서 로컬 옵티멈에 빠지는 문제를 해결해 줄 수 있다. (그림으로 보면 더 직관적이다 : ) )
Internal Covariant Shift(학습에서 불안정화가 일어나는 이유)
또한 1. Covariant Shift(이전 레이어의 파라미터 변화로 인해 현재 레이어의 입력의 분포가 바뀌는 현상), 2. Internal Covariant Shift(레이어를 통과할 때마다, Covariant shift가 일어나면서 입력의 분포가 약간씩 바뀌는 현상)
각 네트워크나 각 레이어나 activation마다 입력값의 분산이 달라지는 현상을 말한다.
https://eehoeskrap.tistory.com/430
https://eehoeskrap.tistory.com/430
'Deep learning > Studying' 카테고리의 다른 글
Tensorflow Weight Initializer (0) | 2021.09.10 |
---|---|
Group Normalization vs Batch Normalization (0) | 2021.09.10 |
Weight initialization(가중치초기화 ) (0) | 2021.09.10 |
전이학습 ,파인튜닝(미세조정) 간단정리 (0) | 2021.09.09 |
EfficientNet Transfer Learning & Fine tuning (0) | 2021.09.08 |