티스토리 뷰

ML

9. 배치 정규화 (Batch Normalization)

마로그래머 2023. 7. 26. 23:58
반응형

Coursera - Batch Normalization

하이퍼파라미터들을 살펴보며 최적화를 어떻게 시킬 수 있는지를 확인했다. 하이퍼파라미터를 잘 선택할 수 있는 또 다른 테크닉인 Batch Normalization 을 살펴보자. 모든 신경망에 적용되진 않지만 적용이 가능하다면 하이퍼파라미터 탐색이 훨씬 쉽고 빨라진다.

Batch Normalization

하이퍼파라미터 탐색을 쉽게 만들어줄 뿐만아니라 신경망과 하이퍼파라미터의 상관관계를 줄여주어 더 많은 하이퍼파라미터가 잘 작동하게 만들어준다. 또한 아주 깊은 심층 신경망이라도 아주 쉽게 학습하 수 있도록 해준다. 와오... 그래서 ML 에서 아주 중요한가보다.

어떻게 작용할까

로지스틱 회귀에서는 인풋값 x를 normalization 하여 w,b에 영향을 주었다. 그럼 심층신경망에서 은닉유닉 a^[n]을 normailzation 하면 w^[n+1], b^[n+1] 에 영향을 줄까? 이것이 Batch Normalization 가 하는 일을 나타내는 것이다.(실제로는 a^[n]이 아니라 활성화 함수를 적용하기 전인 z^[n] 을 정규화한다.)

앞서 입력값 X를 정규화 하는 것이 신경망 학습에 도움을 주었듯이 신경망 안의 깊은 은닉층의 값들까지 정규화해보는 것이다. 이를 통해 은닉 유닛 z의 평균과 분산을 정규화한다.

어떻게 구현할까

신경망에서 사잇값들이 주어졌다고 하자.
어떤 레이어에서 은닉유닉의 값이 z^(1)에서 z^(n)이 있다고 치자.(레이어인 [l]은 생략)

이 값들에 대해서 Normalization 해준다하면 입력값을 Normalization 하였듯이 다음과 같이 할 것이다.

평균을 계산
μ = (1/n) * ∑z^(i)

분산을 계산
σ^i = (1/n) * ∑(z^(i) - μ)²

normalize(정규화)를 하여 norm을 구함 (안정성을 위해 ε 추가)
z^(i)_norm = z^(i) - μ / √σ² + ε

이렇게 하면 z값에 대해서 정규화를 거쳐 모든 z들의 평균이 0이고 표준편차가 1이 되도록 만들게된다.
하지만 은닉 유닛은 다양한 분포를 가져야하기때문에 항상 평균0, 표준편차1을 가지는 것은 좋은 일이 아니다. 그래서 다음과 같이 z~ 을 계산하는 방식을 더 거친다.

z~^(i) = γz^(i)_norm + β

여기서 γ 와 β는 모델에서 학습시킬 수 있는 변수이다.

경사하강법이나 모멘텀,RMSProp,Adam 등의 다양한 알고리즘을 이용해서 γ 와 β를 학습시킬 수 있다. 신경망에서 w,b를 업데이트했던 것 처럼 말이다.

즉, 은닉 유닛이 표준화된 평균과 분산을 갖되 학습 알고리즘에서 설정할 수 있는 두 변수 γ 와 β에 의해 조절되는 것이다.

딥네트워크에 어떻게 사용하는데?

배치 정규화의 정규화 과정에서는 z^[l]의 평균을 계산한 뒤에 빼서 0으로 만들기 때문에 상수 b는 사라진다.

Z^[l] = W^[l] * a^[l-1] + b^[l]

이것은 곧

Z^[l] = W^[l] * a^[l-1]
이 된다.

따라서

Z^[l] = W^[l] * a^[l-1] 
z^(i)_norm = z^(i) - μ / √σ² + ε
z~^(i) = γ^[l] * z^(i)_norm + β^[l]

이 된다. 결과적으로 b의 역할을 β가 차지하게 되었다.

여기서 γ^[l]과 β^[l]의 차원은 은닉유닉층 (n^[l], 1)의 shape와 같다. 은닉유닉의 값을 조정하는데 쓰이기 때문에 같아야겠지?

자, 배치 정규화를 사용하여 미니배치 경사하강법을 구현하는 것을 전체적으로 살펴보자.

  • t는 1부터 mini_batch_num까지 반복할 것이다.
    • 미니배치 X^{t}에 대해서 Forward Propagation 실시.
      • 각 은닉층에서 Batch Normalization 을 사용하여 미니배치의 평균과 표준편차를 이용, z^[l]z~^[l] 로 바꿔준다.
    • Back Propagation을 이용하여 dw, dβ, dγ를 계산한다.
    • 각 변수들을 업데이트한다.
      • w^[l] = w[l] - α * dw^[i]
      • γ^[l] = w[l] - α * dγ^[i]
      • 등등..
        물론 모멘텀, RMSPropr, Adam을 이용할 수 있다.

Batch Normalization 구현은 프레임워크를 이용해서 코드 한 줄로 만들 수 있다.ㅎ

왜 도움이 되는데?

은닉층의 입장에선 바로 앞의 은닉층의 값들이 학습을 하면서 계속 변화하기 때문에 공변량 변화문제를 계속 겪게 된다.

  • Covariate Shift(공변량 변화): X, Y 매핑에서 X의 분포가 바뀌면 학습알고리즘을 다시 학습해야하는 것.

여기에 Batch Normalization 을 하면 값들의 평균과 분산이 일정하도록 제한을 걸 수 있고, 은닉층 값들의 분포가 변화하는 양을 줄여주어 뒤쪽 층의 부담을 줄여주는 것이다.

또한 앞쪽 층의 파라미터와 뒤쪽층의 파라미터 간의 관계를 약화시킨다. 그래서 신경망의 각 층이 다른 층에 상관 없이 스스로 배울 수 있게 해준다. 따라서 전체 신경망의 학습 속도를 상승시킬 수 있다.

Regularization 효과도 덤으로

은닉층에 노이즈가 추가되기때문에 아주 약간의 Regularization 효과를 보여준다. 아주작아서 효과가 크진않다.

테스트할 때 주의

배치 정규화는 한번에 미니배치 하나의 데이터를 다룬다.
하지만 테스트 과정에서는 미니배치가 없을 것이다. 그래서 테스트과정에서는 예측이 잘 맞도록 조금 다른 접근이 필요하다. 어떻게 할 수 있을까??


Batch Norm at Test Time

테스트 할 때 배치정규화를 알아보자.

배치 정규화는 한 번에 하나의 미니배치 데이터를 처리한다. 그런데 테스트할 때는 한번에 샘플 하나를 처리한다. 그럼 테스트할 때는 어떻게 해야할까?

  • 테스트할 때는 샘플이 하나일텐데 그 샘플의 평균과 분산을 구하는 것은 말도안되는 일이다.
  • 그래서 μ와 σ²(층의 평균과 분산을 하는 식)을 훈련세트로부터 추정해준다.
  • 여러가지 방법이 있는데 실제로는 지수가중평균을 사용한다.
    • μ와 σ²가 학습하면서 가진 값을 추적하여 대충 결정한 뒤 사용하는 것이다.
  • 이렇게 함으로써 은닉층의 z값을 조정할 때 훈련세트로부터 대충 추정해준 μ와 σ²값을 사용한다.
  • 물론 딥러닝 프레임워크로 구현가능하다.ㅎ
반응형

'ML' 카테고리의 다른 글

ROC Curve & AUC Curve  (0) 2023.07.27
오차행렬 (Confusion Matrix)  (0) 2023.07.27
8. 하이퍼파라미터 튜닝 (Hyperparameter Tuning)  (0) 2023.07.26
7. 학습률 감쇠 (Learning Decay), Local Optima  (0) 2023.07.24
6. Adam  (0) 2023.07.24
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함