인공지능

[모두의 딥러닝] lec 10-3. NN dropout and model ensemble

여니두 2019. 5. 27.

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% 성능 향상됨

 

댓글