3-4 Solving the Problem of Overffiting 본문

ML & DL/Coursera-ML

3-4 Solving the Problem of Overffiting

eremo2002 2019. 1. 11. 21:05

Overfitting 정의와 Overfitting 해결하는 방법에 대해 알아본다.












선형회귀로 값을 예측하는 예제를 다시 보자

첫번째 모델은 직선으로 값을 예측하고 있다. Size 작을 때는 가격을 어느정도 예측할 있으나 Size 점점 커질 수록 가격이 상승하는 폭이 줄어들기 때문에 직선을 사용해선 데이터를 나타낼 없다. 다시 말해, 모델은 데이터에 제대로 맞지 않는 것이다.

이러한 문제를 과소적합(underfitting)이라고 하며 알고리즘이 high bias 성향을 가지고 있다고 한다.

High bias 특성을 갖는다는 뜻은 모델이 데이터의 분포와 상관없이 크기에 따라서 값을 무조건 선형적으로만 예측하려는 성향을 가지고 있기 때문이다. 크기가 엄청 데이터가 들어와도 그걸 선형적으로 예측하려 하기 때문에 결과가 좋지 않을 것이다.

 

두번째 모델은 2차함수를 사용했을 훈련데이터에 그냥 맞는다 정도로만 표현한다.

2차함수가 뒤로 갈수록 꺾여서 내려가기 때문에 이건 다른 데이터를 예측할 없을 것이다.

 

 

세번째 모델은 5개의 파라미터를 사용해서 좀더 정확하게 현재 데이터를 예측할 있다. 모델은 지금 데이터에 맞아떨어지기 때문에 좋은 모델처럼 보이지만 굉장히 복잡하고 꼬불꼬불한 선이기 때문에 다른 데이터도 train data만큼 정확하게 예측할 있다고 하기는 어렵다. 이러한 문제를 과적합(overfitting)이라고 하며 알고리즘이 high variance 가지고 있다고 한다. 굉장히 고차함수를 이용하면 훈련 데이터에 맞는 모델을 만들 있다. 그러나 이렇게 만들어진 모델은 변동성이 너무 크기 때문에 high variance 가지고 있다

 

정리하자면 과적합(Overfitting)이란 우리의 가설 h(x) 학습 데이터에만 너무 맞아서 학습 데이터의 비용함수 값은 0이나 0 가까운 값을 보이게 되고 모델은 엄청나게 복잡한 모델로 학습 데이터에만 너무 맞춰져서 새로운 데이터에 대해서 일반화가 되지 않는 문제를 말한다.













이러한 문제는 로지스틱 회귀에서도 발생한다.

첫번째 모델은 직선으로 분류하려고 하니까 분류가 되지 않는다. 경우는 과소적합(underfitting) 예다.

 

두번째 모델은 100% 아니지만 decision boundary 그래도 분류하고 있다.

 

세번째 모델은 엄청나게 많은 고차항의 모델로 굉장히 복잡한 decision boundary 만들어질 것이고 모델은 현재 데이터를 정확하게 분류하고 있지만 훈련 데이터셋만 너무 예측할 있게 학습되기 때문에 과적합이 발생했다고 있다. 그래서 새로운 데이터가 들어오면 일반화가 되지 않을 것이다.












이러한 오버피팅 문제는 어떻게 다뤄야 할까?

그리고 우리는 오버피팅이 됐다는 사실을 어떻게 있을까?

위와 같은 어떤 오버피팅된 모델을 다시 가정하면, 그래프를 그려서 이게 오버피팅이 됐네 라고 판단할 있다.

그런데 feature들이 엄청나게 많아지면 그래프가 복잡해지고 시각화하기 어렵기 때문에 그래프를 그려서 제대로 판단할 수가 없다.












오버피팅 문제를 해결하기 위한 방법으론 크게 2가지가 있다.


첫번째로 feature 개수를 줄이는 것이다.

Feature 보고 메뉴얼하게 판단하여 쓸모 없는 feature들은 버린다. 혹은 Model selection 알고리즘을 사용하여 어떤 feature들을 사용할 것인지 선택한다.

이렇게 불필요한 feature 버리는 것은 오버피팅을 방지할 있다. 그러나 이러한 방법이 가지는 문제점은 어떤 feature 버리게 되면 결국 문제에 포함된 정보를 같이 버리게 되는 것이다. 물론 완전히 쓸모 없는 feature들도 있을테지만 일단 feature라는 데이터에 대한 어떤 정보를 가지고 있기 때문에 이를 함부로 버리는 것은 정보의 손실로 이어진다. 또한 우리가 쓸모 없다고 판단한 feature들이 사실은 잘못된 판단으로 중요한 feature였을 경우 문제는 커질 있다. 따라서 우리는 웬만하면 정보를 가지고 있는 feature들을 버리고 싶진 않다.

 

 

두번째 방법은 모든 feature들을 사용하되, Regularization 이용하여 파라미터들의 영향력을 줄이는 것이다.


















Regularization cost function에서 어떻게 동작하는지 알아본다.










왼쪽과 달리 오버피팅된 오른쪽 모델이 있다고 하자.

이때 θ3, θ4 값이 매우 작은 값이 되도록 penalize 것이다.











그리고 현재 cost function 조금 수정하여 뒤에 저러한 값을 더한다고 해보자.

우리의 목표는 어쨌든 cost 값이 최소화되는 파라미터를 찾는 것이다.

만약 뒤에 있는 θ3, θ4 매우 값을 가진다면 cost 값도 매우 값을 가질 것이다.












반면 θ3, θ4 0 가까운 매우 작은 값을 가진다면 우리는 가설 h(x)에서 θ3 θ4 값이 거의 0 가깝기 때문에 θ3x^3, θ4x^4 값도 0 매우 가까운 값이 것이고 따라서 이를 값을 무시해도 문제는 없을 것이다. 그러면 h(x) 이차함수로 생각할 있으므로 오버피팅되지 않은 좋은 모델을 만들 있다.












Regularization 대해 자세히 알아보자

Regularization θ0부터 θn까지 파라미터들의 값을 작게 만들어  영향력을 줄여서 가설 h(x) 좀더 심플하게 만들고 오버피팅을 줄이는 것이다.

우리가 앞의 예에선 θ3, θ4 가지고 penalize하였는데 feature 매우 많은 상황에서 특정 파라미터만 뽑아서 penalize하는 것은 쉽지 않다.

따라서 cost function θ0 제외한 모든 파라미터들 더하는 방법을 사용한다. (보통 θ0 빼는 일반적인 방법(?) 같다.)












Regularization 적용한 cost function 다음과 같다.

여기서 람다는 regularization 파라미터라고 하며 람다의 역할은 2 개의 goal 사이에서 trade off 하는 것이다.

첫번째 goal 기존에 있던 오차제곱합의 값이 최소화 되도록 하여 트레이닝 데이터를 맞출 있도록 하는 것이다.

두번째 goal 파라미터의 값을 작게 만들어 가설 h(x) simple하게 만들고 결과적으로 오버피팅을 줄이는 것이다.












다시 정리하자면 선형 회귀에서 regularization 적용한 cost function 이렇게 정의된다.

어쨌든 우선적으로 우리의 목표는 비용함수의 값을 최소화하는 θ 찾는 것이다. 그러나 너무 트레이닝 데이터만 가지고 학습했을 오버피팅이라는 문제가 발생했었고 이를 방지하기 위해 파라미터들의 영향력을 줄이는 regularization 더하여 cost function 재정의한다.

여기서 람다는 앞에서 말했던 목표의 절충점을 찾는 파라미터 값이다. 람다를 어떤 값으로 선택해야 하는지도 중요할 것이다.

 

한가지 분명한 람다가 아주아주 값인 경우, cost 커지지 않도록 regularization 의해 파라미터의 값을 매우 매우 작은 값으로 만들 것이다.

그러면 θ0 제외한 나머지 파라미터들이 모두 0 가까운 값을 가지게 것이고 이러한 현상이 극대화되면 결국 h(x) 직선이 되어버릴 것이다. 그래서 training data조차 맞추지 못하는 underfitting 현상이 발생한다.


















Regularization 적용된 선형회귀에서 Gradient descent normal equation 어떻게 작동하는지 알아본다.













Regularization term 적용된 비용함수 J 다음과 같이 정의된다.

그리고 우리의 목표는 비용함수 J 값을 최소화하는 파라미터 θ를 찾는 것이다.











Gradient descent 파라미터 θ 이렇게 업데이트 하였다.










Regularization term 들어간 업데이트 식은 다음과 같다.

그냥 regularization term 추가로 들어갔을 뿐이지 달라진 없다.











업데이트 되는 식을 θj 묶어서 정리하면 2개의 term으로 나눌 있다.

흥미로운 것은 앞의 값은 대개 1보다 작은 값을 갖게 된다는 것이다. 그러면 regularization 목적대로 θj 기존 값보다 작아질 것이다.

그리고 뒤의 값은 우리가 그냥 선형 회귀에서 사용했던 learning rate뒤에 곱해지는 미분계수와 똑같아진다. Regularization 사용한 cost function Gradient descent 적용하더라도 문제 없이 작동한다.











Normal equation에서 θ 구할 아래 식으로 한번에 구하였다.












Regularization 적용한 θ 람다와 (n+1 x n+1) 차원의 매트릭스 곱이 추가된다.

이때 matrix 대각선의 처음 원소만 0이고 대각선의 나머지 원소는1 채우며 외의 공간은 0으로 채운다.












역행렬을 구할 feature 수보다 example 수가 매우 적을 역행렬이 존재하지 않는 문제가 생길 있다.

Octave pinv 이용하면 이러한 문제는 해결할 있다.

그러나 어쨌든 m <= n 이라면 역행렬이 존재하지 않을 수도 있는 여지는 여전히 남아있다.

그러나 우리가 regularization term 추가하게 되면 괄호 안의 행렬은 역행렬이 존재하게 된다. (증명은 생략함)































로지스틱 회귀에 regularization 적용해본다.












로지스틱 회귀에서 오버피팅된 이러한 고차식 모델이 있다고 해보자.

Regularization 로지스틱 회귀에 적용하던 것도 똑같이 우리가 기존에 정의했던 cost function 뒤에 regularization term 더해주면 된다.

Regularization 적용하면 오버피팅을 방지할 있기 때문에 분홍색 모델처럼 일반화를 있는 모델이 만들어질 것이다.













선형회귀에서 regularization 적용한 cost function gradient descent 파라미터 업데이트는 이렇게 하였다.

크게 바뀌는 없다. 로지스틱 회귀에선 가설 h(x) 다르기 때문에 우리가 배웠던 시그모이드 함수가 들어간다.

그리고 learning rate 곱해지는 값의 미분계수를 구하여 업데이트를 반복하면 된다.













로지스틱 회귀에서 n개의 feature 존재한다면 파라미터 θ 벡터는 n+1차원의 벡터가 것이다.

그리고 앞에서 정의한대로 우리의 cost function 뒤에 regularization term 더해주면 된다.

그리고 업데이트를 하기위해 cost function J(θ) 기울기를 구하여 파라미터 값을 업데이트하고 이를 반복해가면 끝이다.












 θ별로 해당 이런 식으로 미분계수 값을 구해주면 된다.



















'ML & DL > Coursera-ML' 카테고리의 다른 글

4-2 Neural Networks  (0) 2019.01.15
4-1 Neural Networks Motivation  (0) 2019.01.15
3-3 Multiclass Classification  (0) 2019.01.10
3-2 Logistic Regression Model  (0) 2019.01.09
3-1 Classification and Representation  (0) 2019.01.09
Comments