본문 바로가기

카테고리 없음

머신 러닝 알고리즘 - Overfitting(과적합)과 Regularization(일반화)

머신 러닝 알고리즘의 가장 큰 숙제는 Overfitting(과적합) 문제다. Overfitting(과적합)은 학습이 너무 잘 되어서 학습 데이터에 대해서는 높은 정확도를 나타내지만 테스트 데이터나 실제 적용 시에는 성능이 떨어지는 현상을 말한다.

머신 러닝 알고리즘이 빨간색과 하늘색의 데이터를 구별하는 경우를 살펴보자. 왼쪽 데이터가 샘플링을 해 온 학습 데이터다. 학습 데이터에서 성능이 최대한 잘 나오도록 알고리즘을 학습 시켜보면 왼쪽처럼 구분선이 그려지게 된다.

이 구분선을 이용해서 실제 데이터에 적용을 해보면 적중률이 떨어지는 경우가 있다. 학습 데이터가 실제 데이터를 충분히 반영하지 못 했을 경우가 그렇다. 위 그림에서는 그냥 직선 하나면 실제 사용하는 데에 문제가 없지만 너무 학습 데이터에 최적화되도록 학습이 된 경우, 학습 데이터는 거의 완벽하게 표현하지만 실 데이터에서는 정확도가 떨어지게 된다.

이런 Overfitting을 해결하는 가장 원초적인 방법은 학습 데이터를 더 많이 수집하는 것이다. 학습 데이터가 실 데이터를 잘 반영할수록 Overffiting 현상이 발생하지 않게 된다. 두 번째로는 Feature의 개수를 줄이는 것이다. 'X1, X2, X3, ..., X100' 이렇게 100개의 데이터에 대해서 학습을 한 경우 'X1, X2, ..., X50' 이렇게 Feature의 개수를 절반으로 줄여서 테스트해보는 것이다. Feature 사이에 연관성이 있는 경우도 있기 때문에 효과가 발생할 수도 있다. 마지막으로 정규화(Regularization)를 하는 방법이 있다.

정규화 (출처 : 위키백과)

정규화는 데이터를 구분하는 선이 지나치게 구불구불해지지 않게 막아주는 역할을 한다. 최대한 직선에 가깝게 곡률을 줄여주는 역할을 하는 Factor를 Cost 함수에 추가해서 위 그래프처럼 그래프를 펴주는 역할을 하게 된다.

Cost Function을 다시 한번 살펴보자. 위 식을 이용하면 Regularization(정규화)을 수행하지 않기 때문에 Overfitting이 발생할 가능성이 있다. 이 식에서 최대한 구분선이 구불구불하지 않도록 펴주는 Regularization Strength를 추가해 주면 다음과 같은 식을 얻을 수 있다.

다양한 방법으로 Regularization을 수행할 수 있지만 가장 일반적인 형태의 수식이 위의 수식이다. λ(람다) 값에 의해서 얼마나 Overfitting을 제어할 것인지(즉, 얼마나 그래프를 구불구불하지 않게 펼 것인지) 결정하게 된다. 알고리즘이 Overfitting 되는 경향을 보이면 이 λ(람다) 값을 증가시켜서 그 정도를 경감시키면 된다. 반대로 너무 큰 람다 값은 학습을 방해하여 정확도를 떨어트릴 수도 있으니 잘 조절해서 사용하면 된다.