Programming & Machine Learning/풀어쓰는 머신러닝

뉴럴넷에서의 오버피팅과 해결책

Yamarae 2017. 8. 3. 02:55

오버피팅과 해결책

신경망 등에서의 오버피팅

머신러닝 분야에서의 오버피팅은 언제나 가장 큰 issue이다.
신경망 분야에서도 backpropagation 이라는 큰 전환점이 있었지만 꽤 오랜기간동안 상용화되지 못했던 이유는 오버피팅 때문이다.
다른 알고리즘에 비해 파라미터와 계수의 갯수가 크다보니, 자연스레 모델의 complexity가 증가하고 오버피팅이 발생한다.
초기의 해결책은 거의 전무했으며 DBN등으로 어느정도 성능을 끌어올렸다가, 
computing 성능의 발전과 dropout등의 알고리즘 등장으로 상당히 많이 개선되어 딥러닝의 유행을 이끌고 있다.

신경망 분야에서만 적용되는 것이 아닌 공통적으로 적용되는 오버피팅 해결책은 다음과 같다.

1. 훈련 데이터를 늘린다
2. 피처를 정규화 / 표준화 시켜준다
3. 피처를 선택하여 제거하거나, 페널티를 준다.
4. 데이터의 차원을 축소한다 (CNN과 같은 커널이나 샘플링 개념이 포함된 신경망 알고리즘은 이 문제가 자동으로 해결이 된다.)

이 외에, 알고리즘별로 발생하는 특징들과 해결법들이 유수하게 존재할 것이다.

아마도 신경망 알고리즘에서의 오버피팅은 활성함수를 가지고 있는 각각의 뉴런들이 
훈련 데이터들에 매우 과적합이 되어 있는 상태일 것이다.

딥 러닝으로 발전되어지기 이전의 인공신경망에서는 이러한 문제점을 
- 사전훈련을 통해 initial weight를 신중하게 고르는 방법 (DBN)
- backpropagation

등으로 어떻게든 해결하기 위해 노력했지만 여전히 많은 제약과 걸림돌이 존재. 그러나 딥 러닝으로 패러다임이 전환되는 과정에서 
backpropagation 기법도 발전하였고, 무엇보다 dropout이라는 새로운 방법이 발견되었다. 
이제는 신경망에서의 오버피팅은 거의 dropout으로 해결이 가능하며 가장 많이 사용하는 기법이 되었다.

dropout의 개념

드롭아웃은 네트워크 학습에서 오버피팅을 막기 위한 방법으로, 뉴럴 네트워크가 학습중인 경우에
마치 앙상블 기법처럼 랜덤하게 뉴런을 골라서 학습을 진행한다. (하지만 앙상블처럼 최종 투표를 하지는 않는다)
오버피팅을 막기 위해 몇몇개의 뉴런은 일부러 제거한다는 것이다.
이 드롭아웃 레이어의 위치에 따라서도 성능이 달라지는 경우가 있지만, 대부분의 경우는 큰 차이가 없다.

드롭아웃은 워낙에 쉽고 직관적인 방법이기 때문에, 아래의 두 이미지만 보아도 별다른 설명 없이 이해가 가능하다.