[모두의 딥러닝] lec 10-3. NN dropout and model ensemble
Overfitting
- 간단한 데이터가 있을 때 좋은 curve로 값을 나누는 것 --> 좋은 fit
- curve를 구부려서 나누는 것 --> Overfitting
Overfitting이 왜 문제인가?
- 학습 데이터로 accuracy 측정하면 정확도 거의 99%
- test 데이터셋으로 하면 형편없는 accuracy
> 응용력이 없는 것. 실제로 사용하면 별로 좋지 않을 것.
- 깊게 NN을 할수록, Overfitting될 가능성 높다.
> 굉장히 많은 변수가 사용될 것이기 때문
> Curved되는 것을 방지해야한다!
Solutions for overfitting
1. More traning data!
- 학습 데이터 많으면 많을수록 좋다
2. Regularization 사용
Regularization
- 너무 큰 값의 weight을 주지 말자!
> 너무 심하게 구부리지 말고, 펴자!
L2 Regularization
- 각 element들을 곱한 것이 최저가 되게 하는 것
- 주황색 변수의 값을 얼마나 중요하게 생각하는지가 관건
> NN에서는 Overfitting을 막기 위한 또 다른 방법이 존재!
Dropout: A Simple Way to Prevent Neural Networks from Overfitting [Srivastava et al. 2014]
- 그만둬버리는 것
- NN을 학습할 때 연결된 것을 끊어버리는 것.
- 몇 개 노드를 죽이자는 것
" randomly set some neurons to zero in the forward pass"
이게 과연 될 것인가?
- 각각의 뉴런들이 어떤 것을 내세우는 전문가라고 가정
- 몇명은 쉬고, 남은 사람들 가지고 훈련
- 이 과정을 random하게 하여 반복
- 마지막에 이 전문가들을 총동원하여 예측하면?!
> 상당히 잘 된다.
TensorFlow로 구현
- 어떤 요소들을 0으로 만들거나 activation을 끄면 된다.
- _L1이란 것을 만들고, 그것을 다음 Layer로 보내기 전에 dropout layer에 넣어주고 나온 결과물을
다음 layer로 보내주는 것
> 한 단을 더 추가해주면 된다.
- dropout_rate: 랜덤한 값을 주어준다. 보통 0.5
** 주의) 학습하는 동안에만 dropout 시킨다!
- 실전에는 전문가 모두를 불러와야 한다. > dropout_rate = 1. (모두 참여한다는 의미)
Ensemble
- 학습할 수 있는 장비가 많을 때 사용 가능
- 독립적으로 NN을 만들었을 경우,
- 같은 Training set들이 있고, Learning Model 또한 같은 NN 10단
- 초기값이 다를 것이니, 결과도 다를 것
- Combiner로 결과를 합침
> 독립된 전문가 여러명에게 묻는 것과 같음
> 최소 2% ~ 4, 5% 성능 향상됨
'인공지능' 카테고리의 다른 글
[모두의 딥러닝] lab 10. NN, ReLu, Xavier, Dropout, and Adam (0) | 2019.05.28 |
---|---|
[모두의 딥러닝] lec 10-4. 레고처럼 넷트웍 모듈을 마음껏 쌓아보기 (0) | 2019.05.27 |
[모두의 딥러닝] lec 10-2. Initialize weights 잘 해보자 (0) | 2019.05.13 |
[모두의 딥러닝] lec 10-1. Neural Network: XSigmoid보다 ReLU가 더 좋아 (0) | 2019.05.10 |
[모두의 딥러닝] lab 09-2. Tensorboard (Neural Net for XOR) (0) | 2019.05.07 |
댓글