시작하며
우리는 지금까지 Linear Regression 그리고 Logistic Regression 두가지에 중점을 두어 Supervised Learning을 공부하였습니다.
이번 포스팅에서는 모델 학습 과정에서 발생할 수 있는 'Overfitting' 이라는 것을 공부하고 이를 어떻게 해결해야하는지 알아보겠습니다.
Overfitting
학습이 반복되면서 학습의 정확도(accuracy) 가 올라갑니다. 이상적인 학습이란 데이터가 계속 들어와 학습이 반복되면 될수록 accuracy가 높아지는 것입니다.
하지만 이 과정에서 학습 모델이 주어진 데이터에 너무 과하게 맞춰져서(overfit) 조금이라도 다른 데이터만 들어와도 다른 결과로 예측하여 결과적으로 정확도가 낮아지는 현상을 'Overfitting' 이라고 합니다.
예를 들어, Logistic Regression에서 일반적인 경우에 h(x) = 0.9정도가 나왔다면 예측값 y = 1이어야 하지만,
학습모델이 Overfitting된 경우 이를 0으로 예측하게 되는 것입니다. 이제 Linear와 Logistic Regression에서 어떨 때 Overfit이 발생하는지 알아보겠습니다.
위 이미지의 우측 상단에 보이는 세 개의 그래프는 똑같이 주어진 dataset에 대해 Linear Regression을 한 결과인데, 각각 정의된 h함수가 다릅니다. 이제부터 차이를 알아보겠습니다.
- Linear Regression
- 왼쪽의 경우, 가설함수는 1차방정식 이며 주어진 데이터과 완전히 일치하진 않지만, 대략 추정은 가능한 수준입니다. 이렇게 최적화가 덜 된 가설함수 h를 'Underfit' 또는 'high bias' 라고 합니다.
- 가운데의 경우, 가설함수는 2차방정식 이며 주어진 데이터에 어느정도 적합하여 최적화가 잘 되었다(Just right 라고 할 수 있습니다.
- 오른쪽의 경우 는 4차 방정식 으로 그 형태가 복잡하긴 하지만 학습을 위한 training dataset에는 완전히 최적화가 되어있다고 할 수 있습니다.
하지만 오른쪽 그래프의 경우, 성능 평가를 위한 test set에서 training dataset과 조금이라도 다른 데이터가 들어왔을 때 좋은 성능을 낼지 의구심이 듭니다.
이렇게 너무 과한 최적화가 이뤄진 가설함수 h를 'Overfit' 또는 'High Variance' 라고 합니다.
- Logistic Regression
- 왼쪽의 경우, Decision Boundary에 해당하는 가설함수 h는 어느정도 예측치를 제시할 순 있겠지만 최적화가 좀더 필요해 보입니다. -> Underfit
- 오른쪽의 경우, 가설함수는 고차다항식으로 학습을 위해 주어진 Training dataset에 지나치게 최적화되어새로운 데이터의 예측을 위해 사용되기는 어려울거 같습니다. -> Overfit
- 가운데의 경우, 가설함수는 이차방정식으로 적절합니다. -> Just Right
우리가 학습에 사용할 데이터의 Feature가 많아질수록 가설함수의 최고차수도 함께 올라가게 됩니다. 즉 가설함수가 데이터에 fit되기 쉽다는 것입니다.
게다가 실제로 데이터는 굉장히 많은 Feature를 가지기 때문에 이러한 Overfitting 에 빠지기 쉽습니다. 이러한 문제를 해결하려면 어떻게 해야할까요?
How to solve 'Overfitting'?
Overfit을 해결하는 데는 크게 두가지로 나뉩니다.
첫번째는 feature의 수를 줄이는 것입니다. 결국 feature의 수가 많아 가설함수의 차수가 높아져 이로인해 Overfit이 발생하는 것이라면 feature를 줄이면 그만인 것입니다.
이렇게 feature를 줄임으로써 각 feature가 가진 속성이 가지는 의미를 정확히 파악하여 모델 학습에 도움을 주는 것입니다. 하지만 분명 이러한 과정에서는 학습에 중요한 feature마저 버려질 수 있다는 단점 이 있습니다.
두번째는 정규화(Regularzation)을 사용하는 것입니다. 즉 모든 feature를 사용하는 대신 고차항에 곱해져있는 θ의 값을 줄여서 마치 최고차항이 줄어드는 효과를 가져오는 것입니다.
Feature를 줄이는데는 'PCA'와 같은 알고리즘이 사용되는데 이것은 나중에 공부하고 오늘은 Regularzation에 중점을 두겠습니다.
Regularzation
위의 Linear Regression에서 왼쪽의 h 함수는 2차 함수이고, 오른쪽의 h 함수는 4차방정식으로 Overfitting입니다.
이 Overfit한 가설함수 h를 비용함수에 대입하여 항상 그래왔듯 비용을 최소화할 것입니다.
다만 위 이미지의 아래를 보시면, 이번에 이용할 비용함수는 뒤에 (1000θ3^2 + 1000θ4^2)가 더해져있습니다. 이것을 Gradient Descent Alogirithm을 적용하려 합니다.
그럼 Gradient Descent Algorithm 입장에서는 비용을 최소화하는 θ를 찾고자 할텐데, 만약 θ3나 θ4가 큰 값을 갖는다면 뒷쪽에 새롭게 더해진 (1000θ3^2 + 1000θ4^2)때문에 비용이 매우커지지 않겠습니까?
따라서 알고리즘은 비용을 최소화하기 위해 θ3와 θ4를 0에 가깝게 만들것입니다. 그렇게 되면 우리가 원래 4차 방정식으로 알고 있던 Overfit한 h(x)는 θ3과 θ4가 사실상 0이 됨에 따라 2차방정식이 됩니다.
이렇게 정규화를 통해 일부 파라미터 θ를 매우 작은 값으로 만들면 h(x)의 차수가 줄어 심플해집니다.이런식으로 정규화는 Overfitting될 확률을 줄여줍니다.
i는 파라미터의 수입니다. 이때 정규화는 우리가 알던 비용함수에 Σθi^2을 더하여 h(x)를 단순하게 합니다. 이때 θ0는 상수이므로 이는 제외하고 더하게 됩니다.
이때 Σθ^2 앞에 곱해져있는 'λ'은 람다(Lamda) 입니다. 람다는 regularzation parameter 인데, 이는
-
Σθi^2을 더하기 전 본래의 비용함수가 제 역할을 할 수 있도록 조절해주며,
-
3차 이상의 고차항에 붙어있는 파라미터 θ를 아주 작은 값으로 만들어 가설함수 h가 적당한 2차함수가 될 수 있도록 만들어 줍니다
Gradient Descent Algorithm에서 Learning Rate인 α가 어떤 값을 갖느냐가 학습속도에 영향을 미쳤듯이, 람다 또한 어떤 값을 갖느냐에 따라 Regularzation에 영향을 미칩니다.
예를 들어, 람다 λ가 10^10이라면, 본래의 비용함수에 더하게 된 Σθi^2가 매우 커져 θ0을 제외한 θi는 모두 0이되고, 결국 가설함수에는 θ0만 남아 직선이 되어 데이터에 underfit하게 될것입니다. 따라서 람다의 값 또한 적절하게 세팅하는 것이 중요합니다. 이제 우리가 지금까지 배워온 개념들에 Regularzation을 적용해보겠습니다.
Implement Regularzation
- Regularized Linear Regression
위는 Linear Regression에 이용되는 Gradient Descent Algorithm에 Regularzation을 적용한 것입니다. 우선 θ0는 정규화에 적용하지 않으므로 θ0와 나머지를 θi로 구분하겠습니다.
이후 람다로 표현된 식(λ*θ / m)을 추가하여 이를 전개하면 맨 아래와 같은 식이 됩니다.
이때 θj에 곱해진 (1 - α*λ / m) 에서 α, λ, m은 모두 양수 이므로 (1 - α*λ / m)은 1보다 작을 것이고, 결국 매번 갱신할때 마다 θj는 줄어가므로(minimize) Gradient Descent Algorithm이 올바르게 동작함을 확인할 수 있습니다.
-
Regularized Normal Equation
이번엔 Normal Equation입니다. 혹시 Normal Equation의 개념이 부족하신 분은 아래 포스팅을 참고해주세요
- Normal Equation vs Gradient Descent Algorithm
https://box-world.tistory.com/11
- Normal Equation vs Gradient Descent Algorithm
기존에 θ를 구하던 공식인 ( XtX) inverse * Xty에서 Xt * X에 람다와 매트릭스를 곱한 값을 더해주시면 됩니다. 이때 매트릭스는 대각선이 전부 1인 단위행렬이지만 θ0에 해당하는 [0][0] 부분만 0으로 완벽한 단위행렬은 아닙니다.
하지만 저번에 Normal Equation에선 Xt*X의 값이 non-invertibility 즉 가역행렬인 경우 가 문제가 되었습니다.
하지만 Regularized Normal Equation에선 람다가 0보다 크다면 Xt * X자체가 non-invertibility여도 람다식으로 인해 항상 invertible하게 되므로 이러한 문제가 해결됩니다.
- Regularized Logistic Regression
Logistic Regression의 경우에도 비용함수에 똑같이 Σθi^2을 더해주고 θ0도 역시 정규화에서 제외시킵니다.
이를 Gradient Descent Algorithm에 적용한 결과입니다. 겉보기에는 Linear Regression과 크게 다를 바 없어보이지만 Logistic Regression의 경우 h함수가 logistic(sigmoid)함수에 감싸진다는 것을 유의해야합니다.
요약
- Overfitting이란 학습 모델이 주어진 데이터에 너무 과하게 맞춰져서(overfit) 조금이라도 다른 데이터만 들어와도 다른 결과로 예측하여 결과적으로 정확도가 낮아지는 현상을 말합니다.
- 이를 해결하는데는 feature의 수를 줄이거나, 정규화를 적용하는 두가지 방법이 있습니다.
- Regularzation의 방법으로는 Cost Function에 (λ*Σθi^2)을 더하여 고차항에 곱해져있는 파라미터 θ를 0에 가깝게 만들면 됩니다.
- 이때 적절한 람다값을 설정해주지 않는다면 오히려 가설함수가 underfit해질 수 있습니다.
'AI > Coursera ( Machine Learning )' 카테고리의 다른 글
[머신러닝] Neural Network를 이용한 XNOR 연산 그리고 Multi Classification (0) | 2020.05.01 |
---|---|
[머신러닝] 딥러닝의 시작 Neural Network 정복하기 1 (0) | 2020.04.30 |
[머신러닝] 여러 개로 분류하기(Multi Classification) (0) | 2020.04.30 |
[머신러닝] Logistic Regression 이해하기 2 (0) | 2020.04.30 |
[머신러닝] Logistic Regression 이해하기 1 (0) | 2020.04.30 |