
신경망 학습을 하다보면 기울기가 점차 작아지는 현상을 볼 수 있다. 가중치 업데이트가 제대로 되지 않으면 결국 최적의 모델을 찾을 수 없게 되는데 이를 기울기 소실(Gradient Vanishing이라고 한다.)
반대로 기울기가 너무 커지면서 발산하는 현상도 있다. 이를 기울기 폭주(Graidient Exploding)이라고 한다.
시그모이드 함수를 사용하면 입력의 절대값이 클 경우 출력값이 0 또는 1에 수렴하여 기울기가 0이 되는 것을 볼 수 있다.

중요!!
은닉층에서 시그모이드 함수 사용 X
Leaky ReLU 함수를 사용하면 입ㄹ력값에 대해서 기울기가 0에 수렵하지 않아 죽는 ReLU 문제를 해결
은닉층에서는 ReLU 또는 변형함수 사용

항상 초기 값이 잘 주어지면 모든 모델은 원할하게 작동할 것이다. 따라서 가중치 초기화만 잘해줘도 기울기 소실 문제를 해결할 수 있다.
균등분포 또는 정규분포를 사용하여 가중치를 초기화할 때 2가지 경우로 나뉘며, 이전층의 뉴런개수(n_in)와 다음층의 뉴런 개수(n_out)를 가지고 식을 세움.


정리 : 세이비어 초기화는 여러 층의 기울기 분산 사이의 균형을 맞춰 특정 층이 주목받는 것을 방지. 시그모이드 함수는 하이퍼볼릭탄젠트 함수처럼 S자 형태인 활성화 함수와 함께 사용하면 GOOD!
하지만 ReLU 함수와 같이 사용하게 될경우 좋지 못한 성능을 보임
Why? 그러게 되면 0보다 적은 값은 모두 0으로 변환시켜 출력값의 분산이 절반정도로 줄어듬 -> 출력의 소실 발생함
세이비어 초기화와 똑같이 정규포와, 균등분포로 나뉘지만 다음 뉴런의 개수를 반영하지 않는다.

정규분포로 초기화할 경우

위 2가지 방법으로도 기울기 소실과 폭주를 막을 수 있지만 언제든 다시 발생할 수 잇음. 배치정규화를 통해 각 층에 들어가는 입력을 평균과 분산으로 정규화하여 학습을 효율적으로 만듬.
내부 공변량 변화 : 학습과정에서 층 별로 입력 데이터 분포가 달라지는 현상. 이전 층들의 학습에 의해 가중치 값이 바뀌게 되면 현재 층에서 전달되는 입력데이터의 분포가 현재 층이 학습했던 시점의 분포와 차이가 생김.
-> 층마다 분포가 달라지기 때문에 모델의 불안정성이 발생함.
즉 공변량 변화는 훈련 데이터의 분포와 테스트 데이터의 분포가 다를 경우 발생 -> 내부 공변량 변화는 신경망 층 사이에서 발생하는 입력데이터의 분포 변화
활성화 함수를 통과하기 전 배치 정규화가 진행됨. 각층에서 활성화값이 적당히 분포되도록 조정하는 것
미니배치 단위로 정규화 진행. 구체적으로 데이터 부포가 평균이 0, 분산이 1이 되도록 정규화 하며 scale 또는 Shift를 감마값, 베타값을 통해 실행
-> 이런 과정을 활성화 함수 앞에 혹은 뒤에 삽입함으로써 데이터 분포가 변형되지 않도록 유지
스케일(감마) : 특정 값을 곱하고 (전체적인 값의 범위나 크기를 조절)
시프트(베타) : 더하는 선형 변환 (중심 = 평균 위치를 이동)

Process
1) 미니배치 샘플링 : 학습 데이터셋으로부터 미니배치 랜덤하게 선택
2) 순전파
: 미니배치에 있는 입력데이터르 ㄹ받아서 순전파 수행, 각 층에서 가중치와 편향을 사용해 활성화 함수를 통과시킨 결과
3) 배치 정규화 적용
: 각 은닉층의 활성화 값에 대해 배치 정규화 수행, 입력 데이터의 평균과 표준편차를 계산하여 정규화 진행, 정규화된 결과를 Scale, Shift 을 이용하여 네트워크 특성의 평균과 분산 조정
4) 역전파
: 배치정규화의 파라미터들(스케일 시프트 매개변수)에 대한 그레디언트 계산, 배치 정규화 층을 통과한 그레디언트와 역전파 알고리즘을 사용하여 가중치 및 편향에 대한 그레디언트 계산
5) 가중치 및 편향 업데이트
: Gradient Descent 또는 최적화 알고리즘을 사요하여 가중치와 편향을 업데이트 , 배치정규화의 파라미터들(스케일과 시프트 매개변수) 도한 그레디언트 하강법을 사용해 업데이트
!! 중요한 점
일반적으로 배치정규화를 훈련할 때는 각 미니배치에서 평균과 분선을 계산하는 것으로 확인했다. 하지만 테스트 할 때에는 단일 포인트에 대한 평균과 분산을 계산하는 것이 불가능하다. 이를 효율적으로 계산하기 위해 Expoential Moving Average(지수 이동 평균)이 있다. 훈련과정에서 지수 이동평균을 통해 갱신한다면 테스트 시에 이러한 추정치를 사용하여 모델을 평가할 수 있다.
1) 미니 배치 크기에 의존적 : 너무 작은 배치 크기에서는 잘 작동하지 않을 수 있다.
2) RNN에 적용하기 어려움 : RNN은 각 시점마다 다른 통계치를 가지게 되는데, 이를 정규화하여 적용시키기 어렵다.
배치 정규화는 각 feature (특성) 개수들에 대해서 평균과 표준편차를 정규화 한것이라면 층 정규화는 각 층별 평균과 표준편차를 정규화 시키는 것을 의미(각 층의 데이터 분포를 고르게 만들어 학습을 안정화 시키고 속도를 높이는 방식)
