3-2/기계학습이론

[기계학습] Linear Regression_과적합 해결하기

dotudy 2024. 10. 13. 01:24

지난 포스팅에서는 회귀분석에 대한 개념과 선형 회귀의 최적 model parameter를 계산하는 방법에 대해 공부했다.

$\hat{\beta} = (X^TX)^{-1}X^Ty$ 이 식은 꼭 외우도록 하자!

 

하지만 학습할 때 주의해야 될 사항이 있다. 바로 과적합이다.

과적합은 model이 training data를 너무 신경쓰다보니 정작 test data에서는 예측 성능이 떨어지는 문제를 말한다. 

training data에 대해서는 완벽하게, 거의 error가 0일 정도로 학습되는데 test data에 대해서는 예측을 잘 하지 못한다.

그림으로 이해해 보자.

 

왼쪽 그림은 파란색과 빨간색을 분류하는 문제이다. 분류를 할 때 data가 하나씩 misclassification될 때마다 error값이 증가할 것이다. 따라서 error값을 0으로 하기 위해 초록색 곡선처럼 굉장히 곡률이 심한 decision boundary가 도출된다. 하지만 새로운 값이 별이 추가되었을 떄는 틀린 결론을 내놓는 문제가 발생한다. 이것이 과적합의 예시이다. 

 

What is a Good Model?

위의 모델들은 모두 다른 모델이지만 같은 data를 가지고 학습하였다. 이러한 모델들 중 좋은 모델이라는 것은 test data에서 예측 성능을 보이는 일반화된 모형일 것이다. 

 

복잡도가 높은 모델들은 과적합을 초래한다.

해당 곡선은 training set에서 특정 정확도를 보일 때 test set을 넣으면 정확도를 어느 정도 보일지 나타낸다. 정확도는 같이 높아지다 특정 지점을 넘어서면 과적합되어 test set에 대해 정확도가 떨어진다. 그러면 해당 문제를 어떻게 해결해야 할까?

 

Regularization Methods

바로 regularization term을 loss function에 더해주는 것이다. 

 

예시를 보자.

우리의 모델이 왼쪽 그래프라고 하자. $\hat{y} = \hat{\beta_{0}} + \hat{\beta_{1}}x^{1} + \hat{\beta_{2}}x^{2} ... + \hat{\beta_{4}}x^{4}$

 

$$\underset{\beta}{\operatorname{min}}\sum\limits_{i=1}(y_{i}- \hat{y_{i}})^2 + 5000\beta_3^2 + 5000\beta_4^2$$

위의 식은 원래의 cost function에 $\beta$와 관련된 항을 더해준 것이다.

error를 최소화해야하니 크게 세 개의 항이 모두 최소가 되어야한다. $\beta$값들이 바뀌면서 자동적으로 loss function의 error 값은 높아질텐데 $\beta$의 계수가 굉장히 큰 수이므로 영향력이 매우 커진다.

조금 더 쉽게 풀어서 말하면, $\beta_3$값이 2에서 1로 바뀌면 error가 20000에서 5000으로 감소하는 것이다. 따라서 최소가 되도록 하기 위해 model은 $\beta_3 \approx 0, \beta_4 \approx 0$가 되도록 할 것이다. 

하지만 무작정 $\beta$값들을 0으로 보내는게 좋은 것이 아니라 원래 왼쪽 그래프처럼 error가 거의 없었던 모델이 오른쪽과 같은 형태로 변하면서 error들이 증가하게 된다. $\underset{\beta}{\operatorname{min}}\sum\limits_{i=1}(y_{i}- \hat{y_{i}})^2$이 값이 커지는 것이다. 따라서 양쪽 사이의 저울질을 잘해서 가장 최적인 값을 찾아야한다.

 

만약 $\beta$ 앞의 계수들이 0.5, 1이었다면 원래의 loss function과 추가한 항들의 값들을 저울질 할 것이고 극단적으로 낮은 값, 0.00001과 같은 값들이라면 $\beta$값이 바뀌더라도 영향을 거의 미치지 못한다. 따라서 여전히 기존의 lost function인 $\underset{\beta}{\operatorname{min}}\sum\limits_{i=1}(y_{i}- \hat{y_{i}})^2$만을 최적화하려고 해서 overfitting 문제를 해결하지 못한다.

 

 

정리! 

기존의 loss function 뒤에 다른 항들을 붙여 해결한다. 다만, 이러한 항들은 원래 있던 항과 상충되는 경우가 많다. 예를 들면, 새로운 항의 값을 줄이기 위해 parameter 값 자체를 줄여야하는데 이런 경우 원래 있던 loss function의 값이 커지는 경우가 많다. 따라서 그 둘 사이의 balance를 조절하는 것이 핵심이다. 이는 항의 계수를 조절하면서 결정하면서 최적화한다.

 

 

이제 위의 예제를 일반화해서 표현해보자.

$$L(\beta) = \underset{\beta}{min} \sum_{i=1}(y_{i}-\hat{y_i})^2+\lambda \sum_{j=1}^{p}\beta_{j}^{2}$$

(1) Training accuracy: $\underset{\beta}{min} \sum_{i=1}(y_{i}-\hat{y_i})^2$ 

(2) Generalization accuracy: $\lambda \sum_{j=1}^{p}\beta_{j}^{2}$

$-10x, 10x$ 모두 부호를 고려하지 않기 위해 제곱을 한다. 변수 값에 동일한 영향을 주기 때문이다. 

$\lambda$는 중요도를 조절하는 상수인데 정답은 없고 여러 번의 시도를 통해 가장 좋은 값을 선택하는 것이다. 

 

if) $\lambda$가 매우 컸다면 -> $\beta_1 \approx 0, \beta_2 \approx 0, \beta_3 \approx 0, \beta_4 \approx 0$

     (2)의 영향력이 커지기 때문에 parameter 자체의 값이 작아져야한다. 모두 0이 되기 때문에 의미 없는 예측을 한다.

 

else if) $\lambda$가 매우 작았다면 -> $\hat{y} = \hat{\beta_{0}} + \hat{\beta_{1}}x^{1} + \hat{\beta_{2}}x^{2} ... + \hat{\beta_{4}}x^{4}$

     (1)의 영향력이 커지기 떄문에 training accuracy에만 의존하게 된다. 따라서 overfitting을 줄이는 시도가 일어나지 않는다.

 

따라서 $\lambda$의 balance 조절을 잘해야한다. 

 

Ridge Regression

앞의 일반화한 식이 바로 ridge regression이다. 이는 multiple linear regression 중에서 각각의 parameter 값의 제곱의 합을 취해줌으로서 overfitting을 해결하려는 model이다. $\lambda \sum_{j=1}^{p}\beta_{j}^{2}$가 L2-norm이라고 한다.

$$hat{\beta^{ridge}} = \underset{\beta}{argmin} \sum_{i=1}^n(y_{i}-\hat{y_i})^2+\lambda \sum_{j=1}^{p}\beta_{j}^{2}$$

$\hat{y_i} = x_i\beta^T$

$x_i = <x_1, x_2, ..., x_p>$

$\beta = <\beta_1, \beta_2, ..., \beta_p>$   (원래는 $\beta_0$도 넣어야하는데 편의를 위해 생략했다.)

$\beta$라는 vector를 이루고 있는 각각의 model parameter들의 값 자체가 작아야한다. 

뒤에 값이 더해지기는 했지만 여전히 $\beta$에 대한 2차 함수기 때문에 미분을 통해 최솟값을 찾을 수 있다. 

해당 식에서 $\lambda$는 사람이 직접 control하는 hyper parameter이고 $\beta$는 data를 기반으로 학습되는 model parameter이다.

 

결론을 다시 써보자면...

$\hat{\beta^{ridge}} = (X^TX+\lambda{I_p})^{-1}X^Ty$

$\hat{\beta^{LS}} = (X^TX)^{-1}X^Ty$

 

Lasso (Least absolute shrinkage and selection operator)

앞의 Ridge Regression과 비슷하지만 $\beta$의 제곱의 합 대신 절댓값의 합을 사용한 식이다.

$$hat{\beta^{lasso}} = \underset{\beta}{argmin} \sum_{i=1}^n(y_{i}-\hat{y_i})^2+\lambda\sum_{j=1}^{p}|\beta_{j}|$$

$\lambda\sum_{j=1}^{p}|\beta_{j}|$가 L1-norm이라고 한다. (해당 식에서도 편의상 $\beta_0$를 고려하지 않았다.)

다만, 절댓값을 취했으므로 더 이상 미분이 되지 않는다. 따라서 이때는 점진적으로 찾아나가는 방법을 써야하는데 대표적으로 gradient descent를 쓸 수 있다. 

 

Ridge VS Lasso

Ridge는 만약 특정 $x$값이 결과적으로 중요하지 않은 feature였다면 $\beta$가 작은 값으로 학습되지만 Lasso는 해당 $\beta$값이 한없이 0에 수렴한다. Lasso는 중요한 feature는 극대화하고 중요하지 않는 feature는 최소화하는 경향을 보인다. 

1. Ridge

 

위의 평면을 model parameter에 대한 평면, $hat{y} = \beta_1x_1 + \beta_2x_2$라고 가정하자. 우리의 문제는 가장 optimal한 $\beta_1$과 $\beta_2$를 구하는 것이다.

 

먼저, $\hat{\beta^{LSE}}$는 error를 가장 최소화시킬 수 있는 가장 optimal한 $\beta_1$과 $\beta_2$값이다. 이때의 loss값을 0이라고 하자. $E(\beta_1, \beta_2) = 0$ loss가 점점 커지면서 같은 loss값을 가지는 vector들의 집합을 이으면 타원을 그릴 수 있다.

 

왜 타원으로 표현할 수 있을까?

regularization term을 고려하지 않고 원래의 loss function은 $MSE(\beta_1, \beta_2)$ (mean squared error)이다. 위 그림 옆에 있는 식을 보면 loss function을 풀면 2차 곡선의 일반식이 도출된다. 2차 곡선은 판별식의 크기에 따라 타원, 쌍곡선, 포물선의 형태가 결정되는데 계산을 해보면 항상 0보다 작음을 확인할 수 있다. 판별식이 음수면 항상 타원이 그려진다. 따라서 regularization term은 원점을 중심으로 가지는 원으로 표현하고 loss function은 타원으로 그린다. 

 

해당 원은 regularization을 위해 추가한 loss를 나타낸 것이다. $\lambda$의 값에 따라 원의 크기가 조절된다. 

 

regularization을 고려하지 않고 MSE만 고려하면 타원을 그리지 않고 MSE Loss가 가장 최소가 되는 한 지점이 우리가 찾는 최적값이 된다. 하지만 이제 새로운 term이 추가되었으니 MSE와 다른 objective 사이의 균형 맞추며 최소화시켜야한다.

타원이 점점 커진다. -> loss 점점 커진다.

prediction을 조금 손해보고 $\beta$가 가질 수 있는 점의 범위를 넓혀보자. -> 타협점을 찾아감.

원과 타원이 커지면서 만나는 지점이 바로 타협점이 된다. 그 점보다 더 원 안쪽으로 들어온 점은 loss가 지나치게 큰 $\beta$값들이고 타원 쪽으로 들어간 점은 parameter 값이 너무 커진 overfitting의 문제점을 가진다.

위의 예시에서는 $\beta_1$의 값이 작고, $\beta_2$의 값이 크다. 이는 $\beta_2$가 훨씬 중요하다는 뜻이다. 그렇다고 해서 $\beta_1$이 버려지지는 않는다.

 

parameter 즉, $\lambda$ 값이 크면, $\beta$들의 값이 조금만 커져도 regularization term이 매우 커져서 원이 굉장히 작은 지점에서 타협점을 가지게 된다. 그러면 MSE가 커지는 형태가 된다.

 

2. Lasso

이번에는 원이 아닌 다이아몬드 모양이 된다. 따라서 대부분의 타협점이 축 위에 위치한다. 

위의 예시에서는 $\beta_1 = 0$으로 하나가 버려진다. 

 

왼쪽 Ridge의 $\beta$값들을 보면 $\lambda$가 작아져도, 규제가 강해져도 모든 feature들이 고려된다.

반면, 오른쪽 Lasso의 $\beta$값들은 $\lambda$가 작아지면 lcavol 하나만 고려하고 나머지는 버리는 것을 확인할 수 있다. 

 

 

Elasic Net (Ridge + Lasso)

$$hat{\beta^{enet}} = \underset{\beta}{argmin} \sum_{i=1}^n(y_{i}-\hat{y_i})^2+\lambda_1\sum_{j=1}^{p}|\beta_{j}| + \lambda_2\sum_{j=1}^{p}\beta_{j}^2$$

 

두 방법이 동시에 쓰일 수 있지만 해당 강의에서는 다루지 않았다.

이 외에도 여러 정규화 방법이 있지만 생략하였다.