배치 정규화 (Batch Normalization)
각 층이 활성화를 적당히 퍼뜨리도록 해봅시다.
2015년에 제안된 방법이지만 주목받고 있습니다. 주목받는 이유는
- 학습을 빨리 진행할 수 있음
- 초기값에 크게 의존하지 않음
- 오버 피팅을 억제
배치 정규화의 기본 아이디어는 다음과 같습니다.
- 각 층에서의 활성화값이 적당히 분포되도록 조정
- 그래서 데이터 분포를 정규화하는 ‘배치 정규화(Batch Norm) 계층’을 신경망에 삽입
- 학습 시 미니배치를 단위로 정규화 (이름 보면 알 수 있음)
- 구체적으로는 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화
- 평균 0, 분산 1인 데이터로 변환하는 처리를 활성화 함수의 앞 혹은 뒤에 삽입함으로써 데이터 분포가 덜 치우치게 할 수 있음
또, 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대(scale)와 이동(shift) 변환을 수행합니다.
- γ : 확대 및 축소 (scale)
- β : 이동 (Shift)
- 처음에는 γ=1, β =0부터 시작하고 학습하면서 적합한 값으로 조정
거의 모든 경우에서 배치 정규화를 사용할 때의 학습 진도가 빠른 것으로 나타납니다.
실제로 배치 정규화를 이용하지 않는 경우엔 초기값이 잘 분포되어 있지 않으면 학습이 전혀 진행되지 않는 모습도 확인할 수 있습니다.
바른 학습을 위해
오버 피팅 (Overfitting)
오버 피팅이란 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태를 말합니다.
오버 피팅된 모델은 훈련 때 사용하지 않은 시험 데이터(범용 데이터)에는 제대로 대응하지 못합니다.
오버 피팅은 주로 다음 두 경우에 일어납니다.
- 매개변수가 많고 표현력이 높은 모델
- 훈련 데이터가 적음
가중치 감소 (weight decay)
오버피팅 억제용으로 예로부터 많이 이용해온 방법 중 하나입니다.
학습 과정에서 큰 가중치에 대해서는 그에 상응하는 큰 페널티를 부과하여 오버 피팅을 억제하는 방법입니다.
원래 오버 피팅은 가중치 매개변수의 값이 커서 발생하는 경우가 많기 때문입니다.
예를 들어, 가중치의 제곱 노름(L2 노름)을 손실 함수에 더합니다.
그러면 가중치가 커지는 것을 억제할 수 있습니다.
가중치를 W라 하면 L2 노름에 따른 가중치 감소는 (1/2)λW^2이 되고, 이 (1/2)λW^2를 손실 함수에 더합니다
- λ는 정규화의 세기를 조절하는 하이퍼 파라미터
- λ를 크게 설정할수록 큰 가중치에 대한 페널티가 커짐
- (1/2)는 미분 결과인 λW를 조정하는 역할의 상수
가중치 감소는 모든 가중치 각각의 손실 함수에 (1/2)λW^2를 더합니다.
따라서 가중치의 기울기를 구하는 계산에서는 그동안의 오차 역전파법에 따른 결과에 정규화 항을 미분한 λW를 더합니다.
L1 노름(norm), L2 노름, L∞
- L1 노름 : 각 원소의 절댓값의 합
- L2 노름 : 각 원소의 제곱들의 합
- L∞ 노름 : 각 원소의 절댓값 중 가장 큰 것
드롭아웃 (Dropout)
신경망 모델이 복잡해지면 가중치 감소만으로는 오버 피팅에 대응하기 어려워졌습니다.
드롭아웃을 이용하면 표현력을 높이면서도 오버 피팅을 억제할 수 있습니다.
드롭아웃은 뉴런을 임의로 삭제하면서 학습하는 방법입니다.
신경망 구조 학습시, 레이어간 연결 중 일부를 랜덤하게 삭제하면, 여러개의 네트워크를 앙상블 하는 효과를 낼 수 있고, 이로 인해 일반화 성능이 높아진다고 합니다.
훈련 때 은닉층의 뉴런을 무작위로 골라 삭제, 삭제된 뉴런은 신호를 전달하지 않습니다.
훈련 때는 데이터를 흘릴 때마다 삭제할 뉴런을 무작위로 선택하고, 시험 때는 모든 뉴런에 신호를 전달합니다.
단, 시험 때는 각 뉴런에 훈련 때 삭제 안 한 비율을 곱하여 출력합니다.
순전파 때 신호를 통과시키는 뉴런은 역전파 때도 신호를 그대로 통과시키고, 순전파 때 통과시키지 않은 뉴런은 역전파 때도 신호를 차단합니다.
기계학습에서의 앙상블 학습은 드롭아웃과 밀접하다 할 수 있습니다.
드롭아웃이 학습 때 뉴런을 무작위로 삭제하는 행위를 매번 다른 모델을 학습시키는 것으로 해석할 수 있기 때문입니다.
적절한 하이퍼파라미터 값 찾기
각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등 신경망에는 하이퍼파라미터가 다수 등장합니다.
이러한 하이퍼 파라미터의 값을 적절히 설정하지 않으면 모델의 성능이 크게 떨어지기도 합니다.
하이퍼파라미터의 값은 매우 중요하지만 그 값을 결정하기까지는 일반적으로 많은 시행착오를 겪습니다.
하이퍼파라미터의 값을 최대한 효율적으로 탐색하는 방법에 대하여 얘기해보겠습니다.
검증 데이터 (Validation data)
하이퍼파라미터를 다양한 값으로 설정하고 검증하는 과정에서 주의할 점은 하이퍼파라미터의 성능을 평가할 때는 시험 데이터를 사용해서는 안된다는 것입니다.
시험 데이터를 사용하여 하이퍼파라미터를 조정하면 하이퍼파라미터 값이 시험 데이터에 오버피팅되기 때문입니다.
하이퍼파라미터 조정용 데이터를 일반적으로 검증 데이터(Validation data)라고 부릅니다.
- 훈련(train) 데이터 : 매개변수 학습
- 검증(validation) 데이터 : 하이퍼파라미터 성능 평가
- 시험(test) 데이터 : 신경망의 범용 성능 평가
검증 데이터를 얻는 가장 간단한 방법은 훈련 데이터 중 일부를 검증 데이터로 먼저 분리하는 것입니다.
데이터 셋 안의 데이터가 치우쳐져 있을 수 있으니 훈련 데이터를 분리하기 전에 입력 데이터와 정답 레이블을 뒤섞는 게 좋습니다.
하이퍼파라미터 최적화
하이퍼파라미터를 최적화할 때의 핵심은 하이퍼파라미터의 ‘최적값’이 존재하는 범위를 조금씩 줄여간다는 것입니다.
범위를 조금씩 줄이려면 우선 대략적인 범위를 설정하고 그 범위에서 무작위로 하이퍼파라미터 값을 골라낸(샘플링) 후, 그 값으로 정확도를 평가해야 합니다.
정확도를 잘 살피면서 이 작업을 여러 번 반복하며 하이퍼파라미터의 최적 값의 범위를 좁혀가는 것입니다.
신경망의 하이퍼파라미터 최적화에서는 그리드 서치(Grid search) 같은 규치적인 탐색보다는 무작위로 샘플링해 탐색하는 편이 좋은 결과를 낸다고 알려져 있습니다.
이는 최종 정확도에 미치는 영향력이 하이퍼파라미터마다 다르기 때문이라고 합니다.
하이퍼파라미터를 최적화할 때는 딥러닝 학습에는 오랜 시간이 걸립니다.
따라서 나쁠 듯한 값은 일찍 포기하는 게 좋습니다.
그래서 학습을 위한 에폭을 작게 하여, 1회 평가에 걸리는 시간을 단축하는 것이 효과적입니다.
정리
- 0단계
- 하이퍼파라미터 값의 범위를 설정
- 1단계
- 설정된 범위에서 하이퍼파라미터의 값을 무작위로 추출
- 2단계
- 1단계에서 샘플링한 하이퍼파라미터 값을 사용하여 학습하고, 검증 데이터로 정확도를 평가합니다.
- 단, 에폭은 작게 설정
- 3단계
- 1단계와 2단계를 특정 횟수 반복하며, 그 정확도의 결과를 보고 하이퍼파라미터의 범위를 좁힘
- 어느 정도 좁아지면 그 압축한 범위에서 값을 하나 골라냄
여기에서 설명한 하이퍼파라미터 최적화 방법은 실용적인 방법입니다. 하지만 과학이라기보다는 다분히 수행자의 지혜와 직관에 의존한 걸 볼 수 있습니다.
더 세련된 기법을 원한다면 베이즈 최적화 (Bayesian optimization) 참고하시면 좋을 것 같습니다.
Reference
본 글은 '밑바닥부터 시작하는 딥러닝'을 참고하여 작성하였습니다.
'Data Science > Deep Learning' 카테고리의 다른 글
[DL] CNN (Convolutional Neural Network) (0) | 2022.03.29 |
---|---|
[DL] 신경망 학습 - 매개변수 갱신, 가중치의 초기값 (0) | 2022.03.17 |
[DL] 오차역전파법(Backpropagation) (2) | 2022.03.08 |
[DL] 신경망 학습 (0) | 2022.03.04 |
[DL] 손실함수 (Loss Function) : 오차제곱합(SSE), 교차 엔트로피 오차(Cross-Entropy) (0) | 2022.03.04 |
댓글