본문 바로가기
Coursera 강의/Machine Learning

[Machine Learning] Regularization 정규화

by 별준 2020. 8. 8.
해당 내용은 Andrew Ng 교수님의 Machine Learning 강의(Coursera)를 정리한 내용입니다.

 

[The problem of Overfitting 과적합 문제]

우리가 이때까지 배운 Linear Regression과 Logistic Regression 알고리즘은 많은 머신러닝 문제들에 적용시킬 수 있다. 하지만 Overfitting(과적합)이라는 문제에 빠져 알고리즘의 성능이 나빠질 수 있다.

과적합이란 무엇일까 ?

 

- 과적합 Overfitting

우리가 이전에 예시로 들었던 집값 예측 문제를 다시 살펴보자. Linear Regression으로 집의 크기로부터 집값을 예측하는 문제였고, 선형 함수를 데이터에 맞게끔 적용하여 예측을 할 수 있었다. 하지만 아래 왼쪽 그래프처럼 이 모델은 그리 좋은 모델이 아니다. 데이터를 확인해보면 집값이 커질수록 집값이 완만하게 증가하지만, 선형 함수는 집값이 커질수록 동일하게 집값이 증가하는 것을 볼 수 있다.

 

 

왼쪽 그래프와 같은 문제를 Underfitting(과소적합)이라고 하며, 다른 말로는 해당 모델(알고리즘)이 high bias(높은 편향)을 가지고 있다고 한다.

가운데 그래프처럼 2차 함수를 적용하여서 표현할 수 있으며, 데이터와 꽤 잘 맞는 모델을 얻을 수 있다.(Just Right)

오른쪽 그래프와 같이 조금 극단적인 예제를 보면 4차 함수에 데이터를 맞추고 있고, 적어도 훈련용 데이터에 한해서는 정확한 값을 예측할 수 있지만, 우리는 이 그래프를 보고 제대로 된 집값을 예측할 것이라고는 생각되지 않을 것이다. 이처럼 이렇게 Training Set에 너무 맞춘 문제를 Overfitting 과적합이라고 한다. 다른 말로는 high variance(높은 분산)을 가지고 있다고 한다. 

 

 

 

정리를 하자면 과적합 문제는 많은 feature(특성)들이 존재할 때, 우리의 Hypothesis Function(가설 함수)가 복잡해지고 Training Set에 대해서만 잘 맞아서 다른 새로운 Data가 들어왔을 때, 그 값에 대한 일반화된(generalized) 예측을 제대로 하지 못하는 경우는 말한다. 여기서 Generalized는 새로운 Data에 대해서 얼마나 잘 맞는가 라는 의미이다.

 

이 문제는 Logistic Regression에도 마찬가지로 발생한다.

 

 

위처럼 \(x_1, x_2\) 에 대한 Logistic Regression 예제가 있다. 우리는 왼쪽 그래프처럼 간단한 가설함수를 사용하여서 선형 함수로 positive와 negative를 나눌 수 있지만, 데이터와 잘 맞아 떨어지지는 않는다. 이런 경우가 아까 위에서 설명한 Underfitting(과소적합) 케이스이다.

가운데 그래프처럼 좀 더 나아가서 높은 차원의 특성을 추가하여 가설함수를 사용하면 꽤 잘 맞는 Decision Boudary를 얻을 수 있고, 데이터에도 적절하게 잘 맞아떨어지는 것을 볼 수 있다.

그리고 오른쪽 그래프처럼 극단적으로 엄청나게 많은 고차항을 특성으로 추가하여 엄청 높은 차수의 다항식을 만들면 해당 Logistic Regression은 데이터에 정말 잘 맞는 Decision Boundary를 얻을 수 있다. 이런 경우가 아까 언급한 Overfitting(과적합) 케이스이다. 이 가설은 정말 좋지 못한 예측을 하는 것이고, 새로운 예제에 일반화(Generalization)되지 않는다. 

 

- Adderssing overfitting

일단, 우리가 살펴본 예제는 전부 1차원 혹시 2차원의 예제였기 때문에 그냥 그래프를 그려서 직접 확인하면서 적당한 차원의 다항식을 선택하면 되었다. 그래서 Hypothesis Function 가설함수를 그래프로 표현하여 어떤 다항식을 사용하는지 보는 것이 한 가지 방법이 될 수 있다. 하지만 해당 방법은 항상 적용되지 않는다. 다항식의 차수가 높은 문제도 있지만, 엄청나게 많은 특성이 있는 경우에는 다항식의 차수를 선택할 선택지조차 주어지지 않는다. 또한, 특성이 많아질수록 그래프를 통해 시각적으로 표현하기도 어렵다. 예를 들어서 아래와 같은 경우가 있다.

 

 

집값을 예측하는데, 특성(feature)가 엄청나게 많은 경우이다. 그리고 특성 하나하나가 집값 예측에 도움이 될 것 같은 경우이다. 이렇게 특성이 많은데, Training Set(학습 데이터)가 적은 경우에 과적합 문제가 발생할 수 있다.

 

과적합 문제를 해결하기 위해서는 크게 2가지의 방법이 있다.

 

1. Reduce number of features.

특성의 개수를 줄이는 것이다. 구체적으로는 특성들을 살펴보면서 어떤 특성은 남겨두고, 어떤 특성은 제거하는 식으로 특성을 선택할 수 있다. 추후에 Model selection algorithm에 대해서 배울 것이고, 이 알고리즘은 어떤 특성을 사용할 건지 자동으로 선택하거나 제거하는 알고리즘이다.

이렇게 특성을 줄이는 것으로 과적합 문제를 해결할 수 있다.

 

2. Regularization 정규화

이 방법은 모든 feature특성을 유지하지만, 각 특성들이 갖는 영향을 줄이는 것이다. 다시 말하자면, parameter \(\theta\) 가 미치는 영향을 줄이는 것이다. 값을 예측하기 위한 수많은 feature들이 존재하고, 각 feature들이 예측에 작은 영향을 미치는 경우에 잘 동작한다.

 

 

[Cost Function]

아래와 같은 두 경우의 그래프를 살펴보자.

 

 

위와 같은 Linear Regression에서 왼쪽 그래프의 경우에는 데이터에 잘 맞는 경우이고, 오른쪽의 경우에는 Overfitting 과적합 현상이 발생한 경우이다. 그래서 우리는 오른쪽의 경우에 \(\theta_3\) 과 \(\theta_4\) 를 최소화하려고 하고, 이 값이 0에 근접한다면 Hypothesis Function은 2차함수에 근접해지고 더욱 간단해진다. 결과적으로는 Overfitting 현상이 줄어들 것이다. 

우리는 \(\theta_3\) 과 \(\theta_4\) 를 최소화하기 위해서 다음과 같은 방법으로 Parameter \(\theta\) 를 구할 것이다.

$$\underset{\theta}{min} \frac{1}{2m}\sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 {\color{blue} + 1000\theta_3^2 + 1000\theta_4^2}$$ 

위의 식처럼 우리는 \(\theta_3\), \(\theta_4\) 에 Penalty(가중치; 여기서는 1000)을 부여하여 Cost Function에 더한다. 그리고 Parameter \(\theta\) 를 구한 후에 다시 Penalty를 제거한다. 그렇게 되면 \(\theta_3, \theta_4\) 의 크기는 작게 유지되게 되며, \(\theta_3 \approx 0, \theta_4 \approx 0\) 으로 최소화시킬 수 있고, 4차함수 모델을 사용했지만, 2차함수의 모델에 근접하도록 할 수 있다.

 

- Regularization 정규화

앞서 정규화는 Parameters \(\theta_0, \theta_1, \theta_2, ..., \theta_n\) 이 작은 값을 가져서 작은 영향을 미치게 하는 것이라고 하였다. 

이렇게 정규화를 통해 작은 Parameter 값을 가지게 된다면, 가설함수는 더욱 간단해질 것이고 Overfitting 가능성이 줄어들 것이다. 이제 우리는 각 Parameter에 가중치(Penalty)를 부여하기 위해서 기존의 Cost Function에 가중치를 더해서 아래와 같이 사용할 것이다.(집값 문제 예제를 통해 적용했다)

 

100개의 feature가 존재하는 집값예측 예제

 

$$J(\theta) = \frac{1}{2m} \sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 {\color{blue} + \lambda\sum_{j = {\color{red}1}}^{100}\theta_j^2}$$

식의 오른쪽 가중치의 합이 1부터 시작하는 것은 \(\theta_0\) 은 1로 고정되어 있어서 줄여줄 필요가 없기 때문이다. 여기서 \(\lambda\) 는 Regularization Parameter로 가설함수를 더욱 간단하게 만들어서 Overfitting을 줄여준다.

즉, 위 식은 Penalty \(\lambda\) 를 곱해서 Parameter \(\theta\) 의 크기를 작게 유지할 수 있다. 

그러나 만약 \(\lambda\) 의 크기가 너무 크면 \(\theta_0\) 만 남게 될 수 있으며, Underfitting 의 문제가 발생할 수 있기 때문에, 적절한 Regularization parameter 값 설정이 중요하다.

 

 

 

정규화를 하지 않은 파란색 그래프는 많이 복잡하게 그려지고 새로운 Data에 대한 예측이 제대로 이루어지지 않을 것이다. 하지만, 정규화(Regularization)를 하여 더욱 간단해진 분홍색 그래프는 기존 그래프보다 훨씬 더 좋은 가설함수라고 볼 수 있다.

 

 

[Regularized Linear Regression]

$$J(\theta) = \frac{1}{2m} \sum_{i = 1}{m}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda\sum_{j = 1}^{100}\theta_j^2$$

$$\underset{\theta}{min}J(\theta)$$

Linear Regression 에서 최적의 parameter \(\theta\) 를 찾는 방법은 Gradient Descent와 Normal Equation을 사용하는 2가지 방법이 있다.

 

- Gradient Descent

Linear Regression에서의 Gradient Descent 는 기존에 배웠던 것과 유사하게 아래 알고리즘을 사용하면 된다.

Repeat until convergence {

     \(\theta_0 := \theta_0 - \alpha\frac{1}{m}\sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)}\)

     \(\theta_j := \theta_j(1 - \alpha\frac{\lambda}{m}) - \alpha\frac{1}{m}\sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}\)

} simultaneously update for every \(j = 0, 1, ..., n\)

 

\(\theta_0\) 는 Penalize 하지 않기 때문에 위 알고리즘에서 따로 처리해주어야 한다. 

\(1 - \alpha\frac{\lambda}{m} < 1\)(\(for \alpha > 0, \lambda >0, m > 0\))이기 때문에, Gradient Descent를 진행하면 \(\theta_j\) 가 점점 작아지는 효과를 가지게 된다.

 

- Normal Equation

기존에 Normal Equation 에서 Parameter \(\theta = (X^TX)^-1X^Ty\) 이고, Regularized 된 Normal Equation은 아래와 같다.

$$\theta = (X^TX + \lambda\begin{bmatrix} 0 &0  &0  &...  &0 \\ 0 &1  &0  &...  &0 \\ 0 &0  &1  &...  &0 \\ ... &...  &...  &...  &0 \\ 0 &0  &0  &...  &1 \end{bmatrix})^-1X^Ty$$

여기서 \(\lambda\) 에 곱해진 행렬은 (n+1) x (n+1) 행렬이다.

 

그리고 Normal Equation을 구할 때, \(m \geq n\) 일 때 역행렬이 존재하지 않을 수도 있다는 것을 배웠었다(Non-invertible/Singular). 하지만 Regularized Normal Equation을 사용하면 역행렬이 항상 존재하게 된다.

 

 

 

[Regularized Logistic Regression]

- Cost Funtion

 

 

Logistic Regression에서의 Cost Function은 위와 같다. 우리는 이제 Reguralization을 한 비용함수를 고려할 것이고, Generalized된 Logistic Regression의 비용함수는 다음과 같다.

$$J(\theta) = - \left [ \frac{1}{m}\sum_{i = 1}^{m}y^{(i)}logh_\theta(x^{(i)}) + (1 - y^{(i)})log(1 - h_\theta(x^{(i)})) \right ] + {\color{red} \frac{\lambda}{2m}\sum_{j = 1}^{n}\theta_j^2}$$

 

- Gradient Descent

Repeat until convergence {

     \(\theta_0 := \theta_0 - \alpha\frac{1}{m}\sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)}\)

     \(\theta_j := \theta_j(1 - \alpha\frac{\lambda}{m}) - \alpha\frac{1}{m}\sum_{i = 1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}\)

} simultaneously update for every \(j = 0, 1, ..., n\)

Gradient Descent는 일반식은 Linear Regression과 동일하다. 하지만, 가설함수 \(h_\theta(x)\) 가 다르기 때문에 다르게 동작한다.

댓글