Solving the problem of overfitting
아래 내용은 Andrew Ng 교수님의 강의와 자료를 기반으로 학습한 내용을 정리하여 작성하였습니다.
개인의 학습 내용이기에 잘못 해석 및 이해하고 있는 부분도 있을 수 있으니, 다양한 자료를 기반으로 참고하시는 걸 추천드립니다.
앞에서 Linear regression과 Logistic regression에 대해 정리해보았습니다. 이번 글에서는 Machine Learning에서 중요한 문제인 Overfitting(과적합)에 대해서 알아보고 어떻게 해결할 수 있는지에 대해 정리하고자 합니다.
What is overfitting?
우리나라 말로 과적합이란 용어로 사용되는 Overfitting이 뭔지에 대해 알아보겠습니다. 아래 그림은 Linear regression에서 보았던 예제 그래프인데요, 하나의 Training Set을 어떻게 Hypothesis model을 선정하느냐에 따라여 다양한 형태의 그래프로 표현할 수 있음을 보입니다.
첫 번째 그래프부터 보시죠. 1차 함수를 h(x)로 사용하고 있습니다. 현재 그래프에 표시된 data만으로는 어느정도 예측을 하는 듯 하나 Training data가 무수히 많아지면 Cost function은 점점 커질 수 있습니다.(입력이 hypothesis model과 오차가 크다면요) 그럼 1차함수로는 제대로 된 값을 예측할 수 없다는 말이죠, 두 번쨰 그래프는 2차 함수를 h(X)로 사용하고 있습니다. 오차가 없는 건 아니지만 대체로 Training data를 잘 학습한 것 같습니다. 세 번째 그래프를 보시면 Training data를 완벽히 fit(적합) 되어 있습니다. 지금 이 data들만 보면 완벽한 모델이라고 할 수 있겠네요, 하지만 이렇게 Training data에 fit되어 있으면 새로운 data가 들어왔을 때 오차가 생기겠죠, 즉 일반적인 상황에 대해서는 좋은 모델이라고 할 수 없습니다.
그럼, Logistic regression에 대해서도 살펴보죠. 입력 x1, x2에 대해 O와 X로 classification하려는 hypothesis model을 보여주고 있습니다.
첫 번째 그래프는 1차 함수를 h(x)로 사용하여 O,X를 분류하고 있습니다. 확실히 만족한 만한 분류 성능은 보여주지 못하고 있습니다. 두 번째 그래프는 2차 함수로 표현되었으며, 만족할 만한 성능으로 분류함을 보입니다. 하지만, 마지막 그래프에서 보시면 100% 완벽하게 training data를 분류하고 있습니다. 이건 위에서 설명 드린바와 같이 일반적인 상황에서 새로운 입력이 들어왔을 때, 좋은 결과를 얻지 못합니다.
이 처럼 만약 우리가 매우 많은 feature들을 가지고 있고, hypothesis model이 training set을 잘 표현한다고 해도, 다른 data에 대해서는 예측을 실패할 수 있다는 것입니다. 이게 바로 Overfitting 입니다.
위의 그래프만 보면, 저럴 때 Overfitting이니 바로 대처할 수 있지 않나? 라고 생각하실 수도 있습니다. 위와 같은 입력 feature가 1개 또는 2개 일때는 시각화하여 확인이 가능하겠죠, 하지만 수 십, 수 백개의 입력 feature가 존재한다면 해당 그래프가 표현이 될까요? 시각화는 여러분들의 이해를 돋기 위해 표현한 것이지 문제 해결을 위해 나타낸 것이 아닙니다.
위 그래프와 같이 만약 입력 feature의 수는 매우 많은데, Training data가 적다면? 굉장히 낮은 차수의 함수로도 Overfitting이 될 수 있다는 점 꼭 기억해두세요. 만약 저기에 Training data만 많다면 저 차수로 overfitting은 발생하지 않겠죠?
그럼 Overfitting 문제를 해결하기 위한 내용들을 보시죠.
1. feature의 개수를 줄여라!
- 제거할 feature와 유지시킬 feature를 직접 선택.
- Model selection algorithm을 사용하여 자동으로 feature를 선택하자.
2. Regularization(정규화)
- 모든 feature를 유지하고, parameter theta 값들만 줄이자.
- feature들이 많으면 각 feature들이 y를 예측하는데 조금씩 기여하고 있다.
Regularization - Cost funtion
Overfitting 문제를 해결하기 위해 Regularization(정규화)를 사용한다고 하였습니다. 그 중 가장 먼저 Cost function을 이용한 Regularization에 대해 살펴보겠습니다.
위 그림 중 좌측은 2차, 우측은 4차 함수로 hypothesis model을 설정하였을 때의 그래프입니다. 오른쪽이 명확하게 Overfitting 되어 있음을 확인할 수 있습니다. 우리가 원하는건 현재 Hypothesis model은 그대로 둔 상태에서 Overfitting을 해결하는 방법인데요, 4차 함수의 x^3, x^4을 제거하면 2차 함수로 좌측과 같은 그래프가 나타나겠지만, 그건 우리가 원하는 방향이 아닙니다. 그럼 3차 이상을 제거하지 않고 어떻게 Overfitting을 해결할까요? 여기서의 주제와 같이 Cost function을 이용합니다.
자 overfitting의 주된 원인은 x^3, x^4의 영향력을 최소한으로 줄이면 어떻게 될까요? 만약 theta3와 theta4가 0에 매우 가까워지게된다면 x^3, x^4가 어떻한 값이라도 그래프가 큰 영향은 주지 못할 것입니다. 앞에서 Linear regression과 Logistic regression에서 살펴보았듯이 저러한 Overfitting이 발생한 원인은 Cost function, 즉 오차값이 0에 매우 가까워지도록 만들었기 때문인데요, 그래서 아래 식과 같이 Cost function에 임의의 수식을 더하여 theta3와 theta4를 조절하게 됩니다.
위 수식을 보면 1000*theta3^2와 1000*theta4^2 (제곱은 앞의 cost function 수식에 제곱이 있기에) 을 기존 cost function 식에 더하여 줍니다. 저렇게 해줌으로써 theat3와 theta4에 의한 오차가 굉장히 커질 수 밖에 없게되며, 그 오차를 줄이기 위해 theta3, 4는 0에 가까워지게 되는 거지요. 그렇게 됨으로써 hypothesis model은 4차 방정식을 유지하면서 Overfitting을 해결할 수 있습니다.
Regularization을 이용해 Overfitting 문제를 해결할 때 위에서는 3,4차에 대해서 theta 값의 영향을 감소 시켰습니다. 매우 높은 차수의 hypothesis model이 있을 때 Overfitting 문제가 발생하면 어떻게 해결을 해야 할까요? 과연 어느 theta에 적용을 해야 하는지 궁금할 수 있습니다. 위에서 설명한 예시를 생각하고 아래 수식을 보면 이해가 안 가실 수도 있습니다.
아까 우리가 설정한 1000이란 값은 lambda(람다, 여기서 Lambda는 Regularization Parameter 라고 부릅니다.)로 표현이 되었고, 그 외 theta의 제곱이 표현되어 있습니다. 그런데 j를 보니 1부터 시작을 합니다. 우리가 생각했던 고차식에 대해서만 적용을 하는 것이 아닌 theta1 즉, x에 대해서도 적용을 하고 있습니다. 쉽게 이해가 가지 않으실 수 있겠지만, 모든 차수에 대해 적용을 하는게 실제로 Overfitting 문제 해결에 훨씬 도움을 주고 Hypothesis model 단순화에도 좋습니다. (j = 0부터 시작하는 이유는 theta0는 1과 곱해지기 때문에 입력에 영향이 없어서 입니다.)
여러분들이 생각하시기에 무수히 많은 feature들이 있다고 할 때 어떤 Parameter theta의 영향을 줄여야 할지 알 수 있나요? 어떤 theta를 줄여야 할 지 모르고 각 feature들이 모두 y를 예측하는데 기여할 수도 있기때문에 전체적으로 Parameter의 영향을 줄여 Overfitting을 단순화 하게 됩니다.
위 수식을 이용하면 단순화가 된다는 것은 알겠습니다. 그런데.. Lambda는 도대체 또 어떻게 정해야 하나요..? 만약 Lambda 값이 극단적으로 커지면 어떻게 될까요? 여러분들의 Hypothesis model이 잘 동작할까요? 몇 가지 가능한 상황들을 나열해 보죠.
1. Hypothesis model이 잘 동작한다.
- 설정한 Lambda 값이 매우 잘 적용된 것 이겠죠?
2. Overfitting 문제가 해결되지 않았다.
- 현재 설정한 Lambda 값으로는 Parameter theta들의 영향을 줄이기엔 문제가 있을 수 있습니다.
3. Underfitting이 발생한다.
- 너무 큰 Lambda 값에 의해 모든 Parameter theta값들의 영향력이 줄어들게 되고, Regularization에 영향을 받지 않는 theta0에 의해 상수로 표현될 수 있습니다. 아래 그래프처럼 말이죠.
지금까지 Machine Learning에서 자주 만날 수 있는 문제인 Overfitting에 대해서 살펴보고 그 해결방법 중 Regularization에 대해서 알아보았습니다. Linear regression과 Logistic regression에 regualization이 적용된 부분은 찾아보시면 많이 찾으실 수 있습니다. 한번 확인해보시고 접목해 보시는 걸 추천드립니다.
지금까지 긴 글 읽어주셔서 감사합니다.
'AI > Machine Learning' 카테고리의 다른 글
Neural Networks - Model representation (0) | 2018.01.30 |
---|---|
Non-linear hypotheses (0) | 2018.01.30 |
Logistic Regression - Multi class classification (0) | 2018.01.23 |
Logistic Regression - Cost function / Gradient descent (0) | 2018.01.22 |
Logistic Regression - Model representation / Decision boundary (0) | 2018.01.22 |