Computer Science/Machine learning

[Machine learning] 6. Proof of normal equation

  • -
728x90
반응형

Linear equation

Linear equation은 $$\hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2+ \cdots +\theta_nx_n$$로 나타낼 수 있다.
(단, $\hat{y}$는 예측값, $n$은 특성의 수, $x_i$는 i번재 특성값, $\theta_j$는 j번째 모델 파라미터)

수식이 표현된 형태를 잘 보면, 2개의 vector의 dot product형태로 표현할 수 있음을 쉽게 관찰할 수 있다. 따라서 조금 더 간단하게 해당 수식을 표현하면 다음과 같다.
$$\hat{y} = h_{\theta}(x) = \theta \cdot x$$

그런데, $\theta$와 $x$는 모두 열벡터끼리의 dot product이므로 Linear mathematics에서 배운 것처럼 Transpose 형태로 변환하여 행렬의 곱으로 바라볼 수 있다.

 

따라서 $$\hat{y} = \theta^T x = x^T \theta$$이다.

Root mean square error

모델을 훈련한다는 것의 의미는 Train set에 가장 잘 맞도록 모델 파라미터를 설정하는 것이다. 이를 위해, 모델의 적합도를 판단하기 위한 기준이 필요하다.

 

이때, 일반적으로 많이 사용되는 지표 중에 하나가 RMSE(Root mean square error)이다. 위 결과가 작게 나올수록 더 적합하다고 판단할 수 있다.

 

그런데, $$RMSE = \sqrt x \circ MSE$$합성 형태로 바라볼 수 있고 $\sqrt x$는 극소를 가지지 않는 증가함수이므로 RMSE의 극값은 MSE(Mean square error)에 의해 결정된다.

 

따라서 MSE값이 낮을수록 RMSE가 낮게 나올 수 밖에 없다. 이때, MSE의 식을 표현하면 다음과 같다.

$$MSE(x, h_\theta) = \frac{1}{m} \sum_{i = 1}^m ((x^{(i)})^T \theta - y^{(i)})^2$$

Normal equation

앞에서 대략 언급했지만, 목표는 비용 함수의 값이 최소가 되게끔 하는 $\theta$를 구하는 것이 목표이다.
따라서 위의 MSE를 $\theta$에 대해서 미분하고 0을 만족하게끔 하는 상황을 파악해주면 된다.

 

먼저 m은 $\theta$와 무관한 변수이므로 무시해줘도 된다.

 

이때, 훈련 세트를 $X$, 에측값의 모음을 $y$라고 했을 때 $$X = \begin{bmatrix} x_1 \\ \vdots \\ x_m \end{bmatrix}, y = \begin{bmatrix} y_1 \\ \vdots \\ y_m \end{bmatrix}$$로 나타낼 수 있다.

 

따라서 $$\sum_{i = 1}^m ((x^{(i)})^T \theta - y^{(i)})^2 = (X\theta  - y)^2$$로 표현할 수 있다.

 

그런데, $X\theta  - y$가 $R^m$인 vector이므로 행렬 곱을 활용해서 위 식을 표현할 수도 있다.

즉, $$\sum_{i = 1}^m (\theta^T x^{(i)} - y)^2 = (X\theta  - y)^T(X\theta  - y)$$

 

이때, Transpose의 성질을 이용하면

$$(X\theta  - y)^T(X\theta  - y) = (\theta^TX^T - y^T)(X\theta - y)$$

 

따라서 이를 전개하면 다음과 같다.

$$L = y^Ty - y^TX\theta - \theta^TX^Ty + \theta^TX^TX\theta$$

 

위의 식을 편미분하기 전에, 스칼라를 행렬에 대해서 미분하는 방법을 알아보면 다음과 같다.

(자세한 내용은 https://darkpgmr.tistory.com/141 이나 https://en.wikipedia.org/wiki/Matrix_calculus 참고)

$$\nabla_w(w^Ta) = \nabla_w(a^Tw) = a$$

Proof


$w^Ta$ and $a^Tw$ are scalar values. On the other hand w is matrix.
Therefore, $$\nabla_w(w^Ta) = \begin{bmatrix} \frac{\partial{w^T}}{\partial w_1}\\ \vdots \\ \frac{\partial{w^T}}{\partial w_n} \end{bmatrix} =
\begin{bmatrix} a_1\\ \vdots \\ a_n \end{bmatrix} = a
$$

By the same way
$$ \nabla_w(a^Tw) = a$$

위의 내용을 활용해서 theta에 대해서 편미분해주면 다음과 같다.

$$\frac{\partial L}{\partial \theta} = 0 - X^Ty - X^Ty + X^TX\theta + (\theta^TX^TX)^T$$

현재 위 식의 결과가 0이 되는 $\theta$를 구하는 것이 목표이고, Transpose 성질에 의하여 $X^TX\boldsymbol{\theta} = (\theta^TX^TX)^T$를 만족한다. 따라서 $$2 X^Ty = 2 X^TX\theta $$를 만족한다.

 

이를 $\theta$에 대해 정리하면

$$ \hat{\theta} = (X^TX)^{-1}X^Ty$$이다. (단, $\hat{\theta}$는 비용 함수를 최소화하는 $\theta$이다.)

 

위의 식을 정규방정식(Normal equation)이라고 한다.

다만, $X^TX$가 반드시 역행렬을 가지지는 않으므로 주의해야 한다. sklearn의 LinearRegression에서는 정규방정식을 직접적으로 사용하지 않고 특잇값 분해(SVD)라고 부르는 표준 행렬 분해 기법을 사용해 개선한다. 이 경우, 역행렬이 없어도 유사역행렬을 구할 수 있다.

 

Another approach

vector와 matrix, scalar 사이의 미분 관계를 알고 있으면, 조금 쉽게 위의 계산식을 처리할 수 있다.

앞에서 $$\sum_{i = 1}^m ((x^{(i)})^T \theta - y^{(i)})^2 = (X\theta  - y)^2$$를 언급하였는데 수식을 잘 보면 $$X\theta  - y$$는 $R^m$인 vector form이다.

따라서 Transpose하지 않아도 위 식은 dot product로 해당 vector의 제곱 형태로 이해할 수 있다.

 

이때, $$\frac{\partial(\begin{Vmatrix} Ax + b \end{Vmatrix} ^2)}{\partial x} = 2A^T(Ax-b)$$임이 알려져 있다.

(증명하는 방법은 정의를 바탕으로 partial derivative를 수행해주면 된다. 또한 vector끼리의 곱이므로 dot product가 동일하다는 점을 통해 매개시키면, 상수항을 제외한 항을 Transpose시킨 결과와 동일함을 쉽게 증명할 수 있다.)

 

따라서 $$ \frac{\partial L}{\partial \boldsymbol{\theta}} = \frac{2}{m}X^T(X\theta - y)$$

 

위 방법을 통해서도 $$  \hat{\theta} = (X^TX)^{-1}X^Ty$$임을 증명할 수 있다. 이 방식의 경우에는 결과적으로 나오는 값이 vector임을 이용하여 제곱 형태로 바꾸고 partial derivative 공식을 활용한 것이다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.