티스토리 뷰

Study/AI

[MLY] Variance를 줄이는 방법

생각많은 소심남 2018. 9. 14. 08:55

 만약 만든 알고리즘이 high variance에 의해서 어려움을 겪고 있다면, 아래의 방법을 고려해봐라:

 - 학습 데이터를 추가할 것 : 이 방법은 만약 당신이 데이터에 대해서 많이 접근할 수 있고, 이를 처리할 연산 능력이 충분한 한, Variance 문제를 해결할 수 있는 가장 간단하고 신뢰할 만한 방법이다.

 - 정규화 방법을 적용해볼 것 (L2 regularization, L1 regularization, dropout) : 이 방법은 variance를 줄여주지만, bias를 높이는 부작용이 있다.

 - Early Stopping을 적용해볼 것 (예를 들어 개발 데이터 오류에 기반해서 gradient descent를 빨리 멈추게 한다던지...) : 이 방법은 variance를 줄여주지만 bias를 높인다. Early Stopping 방식이 일반적인 정규화 방식과 유사하게 동작하기 때문에, 몇몇 분들은 이런 것도 정규화 방식이라고 표현하기도 한다.

 - 입력 feature의 수/종류를 줄이기 위해서 feature를 선택하기(feature selection) : 이 방법도 variance를 줄여주지만, 역시 bias를 증가시킨다. (예를 들어 1000개의 feature를 900개로 줄이는 것과 같이) feature의 갯수를 살짝 줄이는 것은 bias에 거의 영향을 미치지 않는다. (예를 들어 1000개의 feature를 100개로 줄이는 것처럼 10배 감소를 시킨다면) feature를 많이 줄이는 경우는 유용한 feature를 많이 빼지 않는 한, 눈에 띌만큼 효과를 기대할 수 있다. 현대 딥러닝 체계상, 데이터가 많은 경우 위와 같은 feature selection을 하지 않고, 보통은 모든 feature를 알고리즘에 다 넣어서, 알고리즘이 가진 데이터 기반으로 그 중에 feature를 선택하는 경향을 취하고 있다. 하지만 데이터의 양이 적은 경우에 feature selection은 유용하게 활용할 수 있다.

 - 모델의 크기를 줄일 것 (neural network의 neuron 수나 계층 수와 같은 것들) : 주의해서 사용해야 한다. 이 방법은 variance 문제를 해결할 수 있겠지만, bias를 증가시킬 가능성도 존재한다. 그러나 이 방법을 variance 문제를 해결하는데 쓰는 것을 추천하지 않는다. 차라리 정규화 방법을 적용하는 것이 분류 성능을 높이는데 도움이 된다. 모델의 크기를 줄임으로써 얻을 수 있는 이점은 연산량을 줄여서 이로 인해 더 빠르게 모델을 학습시킬 수 있다는 것이다. 만약 모델 학습 속도를 높이는 것이 유용하다면, 모델 크기를 줄이는 것을 고려해봐라. 하지만 원하는 것이 variance를 줄이는 것이라면, 그리고 연산 속도에 대해서 고민하지 않아도 된다면, 위 방법 대신 정규화 방법을 추가해보는 것을 고려해라.

이전 bias 문제를 해결하는 방법으로 언급했던 두가지 방법도 있다.

- 오류 평가를 통해서 얻은 직관을 기반으로 입력 feature를 수정해라. : 만약 오류 평가시 지금 쓰는 알고리즘이 오류를 해결하는 데 있어 추가로 필요한 feature가 있다는 생각이 든다고 가정해보자. 이 feature는 어쩌면 bias와 variance 측면에서 도움이 될 수 있다. 이론적으로는 feature를 추가하게 되면 variance를 증가시키게 된다. 만약 이런 경우라면, variance를 증가하는 것을 막기 위한 방법으로 정규화 방법을 사용해라.

- 모델의 구조(신경망 구조)를 수정해라 : 이 방법이 어쩌면 지금 당면한 문제에 적합한 해결책일 것이다. 이 방식은 bias와 variance에 영향을 줄 수 있다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 27. Techniques for reducing variance을 번역한 내용입니다.>

댓글