본문 바로가기
AI/[DLBasic]모두의 딥러닝(딥러닝의 기본)

[DLBasic] 10 - 3. NN dropout and model ensemble

by 쵸빙 2020. 1. 20.

     이번 시간에는 오버피팅 문제를 해결하는 드롭아웃과 모델 앙상블에 대해 알아보겠다.

 

Overfitting

     오버 피팅이란 훈련데이터에만 딱 맞는 모델이 되어서 범용적으로 올바른 결과를 맞추지 못하는 문제이다.

 

     학습 데이터로는 99%같이 정확도가 정말 높게 나오는데 실제 시험 데이터로는 결과가 낮게 나오는 것이 오버피팅의 현상이다. 이런 모델을 실전에 사용하면 안 된다. 위의 그래프에서는 빨간 선이 test data's error rate이고 파란 선이 train  data's error rate이다. layer가 많아질수록 train data에서는 error rate가 떨어진다.

 

Solutions for overfitting

     overfitting을 해결하는 방법으로는 학습 데이터를 더 많이 준비하는 것이 가장 좋다. 교수님 말씀으로는 feature의 개수를 줄일 필요는 없다고 한다. 또 Regularization이 중요하다고 한다.

 

Regularization

     Regularization은 너무 weight의 값을 크게 줘서 오른쪽과 같이 꼬불꼬불한 모양이 되기보다는 왼쪽처럼 완만한 곡선을 만들자는 의미이다.

 

L2 Regularization

     그것을 수학적으로 표현한 것이 위에서 보는 L2 Regularization이다. 즉, 각각의 element의 값을 곱한 것이 최조가 되게 하는 것이다. 이 L2 Regularization은 NN에서 많이 사용된다고 한다. 여기서 람다는 예를 들어 0.1이면 매우 중요, 0일수록 별로 중요하지 않음을 나타낸다.

 

Dropout

     Overfitting을 해결하는 방법으로 train data를 늘리고 Regularization을 사용하는 방법 말고도 Dropout이라는 방법이 있고, 이것은 매우 재미있는 방법이라고 한다. Dropout은 학습할 때 연결선을 몇 개 끊어버리자는 생각이다.

 

     랜덤하게 어떤 뉴런들을 kill시키자는 것이다. 이것이 왜 작동이 잘 되는지 알아보겠다.

 

     일부는 작동하고 일부는 쉬게 두면서 학습을 점차 진행시켜나간다. 마지막에는 모든 것을 총동원해서 예측하는데,

이 방법이 상당히 잘 작동한다고 한다.

 

Tensorflow implementation of Dropout

     Dropout을 Tensorflow에서 구현해보면 위와 같다. _L1이라는 한 단을 더 만들고 이것으로 dropout을 하는 것이다. 중요한 점은 학습하는 동안에만 dropout을 한다는 점이다. 실제로는 모든 것을 적용해야하기 때문에 Dropout에서의 dropout_rate가 1이다.

 

Ensemble

     마지막으로 Overfitting을 해결하기 위한 방법은 Ensemble, 앙상블이다. 학습시킬 데이터가 많을 때 사용하기 좋은 방법인데, 먼저 독립적으로 Neural Network를 10개 정도 만든다. 이 때 training set은 같게 줘도 되고 다르게 줘도 된다.

그 뒤 똑같은 형태의 NN을 9개 만들고 학습을 시킨다. 초기값이 다르니 결과가 조금씩 다른데 마지막에 그것들을 다 합친다. 마치 독립된 여러 명의 전문가들에게 물어보고 마지막에 결과를 합치는 것과 같은 것이다.

이것이 실제로 적용하면 2%에서 많게는 4~5%까지 결과가 향상된다고 한다.