이 글은 최성준 박사님의 <논문으로 짚어보는 딥러닝의 맥> 강의 중 'Overfitting을 막는 regularization' 강의와 여러 자료들을 모아 정리했습니다. 잘못된 부분이 있다면 알려주세요!
Overfitting을 막는 Regularization
Regularization이란?
Overfitting(과적합)이란?
[그림] Underfitting과 Overfitting
* Stochastic Noise (비결정적 노이즈)
오버피팅이 일어나는 대표적인 이유는 노이즈때문이며, 노이즈에는 관측 에러가 있다.
* Deterministic Noise (결정적 노이즈)
이 노이즈는 모델(objective function)의 복잡도(차원)가 커질 수록 증가하며, 이에 오버피팅이 발생할 확률이 높아진다.
이 유형의 노이즈는 모델링을 할 수 없다.
* underfitting(과소적합)
학습셋이 적거나 학습이 제대로 되지 않아 n=1처럼 목적 함수와 학습 데이터 간의 오류가 많은 경우를 의미한다.
[그림] Overfitting에 대한 개념
(출처: https://hackernoon.com/memorizing-is-not-learning-6-tricks-to-prevent-overfitting-in-machine-learning-820b091dc42)
- VC dimension: 모델의 복잡도 (예: 딥러닝에서 뉴런의 수)
- Training error:in-sample error
- Testing error: out-of-sample error
- 데이터가 부족할 경우, data agumentation을 이용해서라도 늘리자! (예: 좌우 반전, 이미지 자르기, 밝기 조절)
* Data agumentation: 데이터를 늘려 모델의 성능을 좋게하는 과정 (CNN의 대표 모델 중 하나인 VGG에서 많이 사용함) - 적절한 능력(capacity)을 갖는 모델을 활용하자
- 서로 다른 앙상블(ensemble)을 활용하자
* 앙상블(ensemble)
데이터를 나누어 여러 모델을 만들어서 나온 결과 중 가장 많이 나온 결과를 선택함 (=bagging)
예를 들어 10,000개 데이터 중 8,000개씩 다섯 개의 모델을 만들고 가장 많이 나온 결과를 선택하는 것을 뜻하며, 대회에서 우승했던 모델들 모두 앙상블을 이용했다.
Limiting the Capacity
1. Architecture
네트워크의 수(hidden layers, units per layer)를 줄이는 것
추가) 딥러닝에서 은닉층(hidden layer) 수를 늘리는 것만으로는 좋은 성능을 내기 어렵다. 모델이 깊어질 수록 분류할 수 있는 패턴이 많아지지만, 경사 소실 문제(vanishing gradient problem), 오버피팅(overfitting) 등의 문제가 발생하기 때문에 좋은 결과가 나오지 않을 수 있다.
* 경사 소실 문제(vanishing gradient problem)
: 딥러닝 모델을 학습할 때 최적해를 구하고 오차함수의 값을 줄이기 위해 파라미터의 경사를 구하는 데, 이 변수의 경사가 '0'이 되어버리는 문제
2. Early Stopping (조기 종료)
Epoch 수(학습 횟수)가 클수록 학습셋에 대한 오차는 줄어들지만 에폭 수가 늘어날 수록 오차가 증가하며 오버피팅이 발생할 수 있다. 따라서, 이전 에폭과 비교해서 오차가 증가하면 오버피팅이 발생하기 전에 학습을 멈추는 것을 'early stopping'이라고 한다.
3. Weight-decay
파라미터(weight) 자체를 너무 커지지 않게 패널티(L1, L2)를 추가하는 것
4. Dropping Out (드롭 아웃)
Dropout은 오버피팅 문제를 해결하고자, 일반화(generalization) 성능을 향상시키기 위한 방법이다.
학습할 때 뉴런의 일부를 네트워크 상에 존재하지 않는 것처럼 랜덤으로 '0'으로 만든다(= 비활성화). 드롭아웃의 확률은 일반적으로 p=0.5를 사용하며, 학습할 때만 드롭아웃을 하며 테스트할 때는 모든 뉴런을 사용한다.
Q. 드롭아웃을 하면 왜 일반화 성능이 향상될까?
5. DropConnect
드롭아웃할 때 노드를 끄는 것처럼 노드 간의 웨이트(weight)를 끄는 것
6. Batch Normalization(배치 정규화)
Batch Normalization은 각 미니배치별로 사전 정규화 처리를 수행하는 기법이다. 데이터 셋 전체를 정규화하는 것보다 학습에 사용하는 미니배치별로 정규화하기 때문에 학습하는 과정 전체에서 효과가 나타난다.
미니배치에 있는 값에서 평균을 빼고 variance로 나눠준다. (정말 중요하며 웬만하면 사용하는 게 좋다. 모든 논문에서 사용한다!)
데이터 전처리보다 배치 정규화가 학습 과정 전체에 효과적인 이유를 <정석으로 배우는 딥러닝> 책에서는 아래와 같이 설명하였다.
데이터의 전처리로 데이터 셋을 정규화(백색화)하고 웨이트의 초깃값을 정리함으로써 학습이 잘 진행되기는 하지만, 학습시킬 때는 네트워크 내부에서 분산이 편중돼버리므로 이렇게 정리한 효과가 한정적입니다.
이와 달리, 배치 정규화는 학습에 사용하는 각 미니배치별로 정규화하므로 학습 과정 전체에서 효과가 발휘됩니다.
Batch Normalization 의 장점
- Increase learning rate
일반적으로는 러닝 레이트가 크면 발산하지만, BN은 데이터를 정규화 시키기 때문에 커도 괜찮다. - Remove Dropout
- Reduce L2 weight decay
- Accelerate learning rate decay
- Remove Local Response Normalization
결론
오버피팅은 항상 발생한다! 어떤 문제를 풀던 발생하기 때문에 정규화를 항상 고려해야 한다.
- 데이터를 늘린다.
- 샘플을 조금씩 늘려가면서 레이어를 늘린다 (예: 64 -> 128.. 512-> 1024...)
데이터 수가 적을 땐 더욱 중요하다. - Data augmentation을 잘 해야한다!
- 이 분야는 아트의 영역(?)이다. 감이 중요하기 때문에 문제를 풀어본 자만이 잘 알 수 있다...(a.k.a 노하우)
'20. 인공지능과 딥러닝' 카테고리의 다른 글
[논문리뷰] DeepMind의 AlphaGO 논문 톺아보기 (1) | 2019.02.06 |
---|---|
[딥러닝개념] 딥러닝 효과적으로 학습하기(2) (ft. regularization) (0) | 2019.01.13 |
[논문리뷰] RNN :: LSTM(Long Short Term Memory) 톺아보기 (13) | 2019.01.05 |
[논문리뷰] CNN :: ResNet 톺아보기 (0) | 2018.12.02 |
[논문리뷰] CNN :: VGGNet 톺아보기 (0) | 2018.11.18 |
댓글