머신 러닝에서 선형 회귀

머신 러닝에서 선형 회귀


🚧 이 포스트는 아직 이관 작업이 완료되지 않았습니다 🚧

머신 러닝에서 선형 회귀 란 주어진 작업에 대한 실제 함수를 가장 잘 근사하는 선형 함수를 찾는 알고리즘이다.

어떤 트레이닝 샘플 $D=\left\{ (\mathbf{x}_{1},y_{1}),\dots,(\mathbf{x}_{n},y_{n }) \right\}$가 있다고 하자. 이때 인풋 $x_{i}$에 대해서 아웃풋 $y_{i}$를 주는 함수를 $f$라고 하자. $$ f(\mathbf{x}_{i})=y_{i}\quad (i=1,\dots,n) $$ 즉 $f$는 모든 데이터 $\mathbf{x}_{i}$에 대한 정답을 맞추는 함수이다. 우리가 찾고자 하는 이러한 함수 $f$를 타겟 함수$(\text{target function})$라고 한다. 타겟 함수를 아래와 같이 선형으로 근사하는 것을 선형 회귀 라고 한다. $$ y_{i}\approx \hat{y}_{i}=\hat{f}(\mathbf{x}_{i})=\mathbf{w}^{T}\mathbf{x}_{i} $$ 여기서 $\hat{}$은 [햇]이라고 읽으며 머신 러닝에서 추정치에 대한 표기법으로 사용된다. 따라서 통계학의 회귀 분석에서의 선형 회귀와는 조금 다르다. 많은 경우에서 비선형 모델 $f$가 선형 회귀로 간단히 해결될 수 있기 때문에 단순하면서도 중요하다.1.PNG 보통의 경우 $w_{1},\dots,w_{n}$이 가중치, $x_{1},\dots,x_{n}$이 인풋 데이터, $\hat{y}$가 모델의 아웃풋일 때 바이어스를 $w_{0}=b$, $x_{0}=1$라고 두고 다음과 같이 간단히 표현한다. $$ \hat{y}=\sum \limits _{i=1} ^{n} w_{i}x_{i}+b=\mathbf{w}^{T}\mathbf{x} $$ 이때 $\mathbf{w}=\begin{bmatrix} b&w_{1} & \cdots & w_{n} \end{bmatrix}^{T}$, $\mathbf{x}=\begin{bmatrix} 1 & x_{1} & \cdots & x_{n} \end{bmatrix}^{T}$이다. 실제 정답인 $y_{i}$와 추정치인 $\hat{y}_{i}$의 차이가 최소가 되게하는 $\mathbf{w}$를 찾는 것이 목적이므로 손실 함수 $J$를 다음과 같이 둔다. $$ J(\mathbf{w})=\frac{1}{2}\sum \limits _{i=1}(y_{i}-\mathbf{w}^{T}\mathbf{x}_{i})^{2} $$ 위와 같이 오차의 제곱이 최소가 되도록 하는 것을 최소평균제곱법 $(\text{least mean square rule, LMS rule})$, 혹은 위드로우-호프 학습 방법 $(\text{Widrow-Hoff learning rule})$이라 한다. 차이를 최소화하려는 것이 목적이면 절댓값을 써도 되는데 어째서 제곱을 쓰느냐 하는 의문이 들 수도 있다. 이는 바로 경사하강법 때문이다. $J$를 최소화하는 $\mathbf{w}$를 찾기 위해서 경사하강법을 쓰려면 $J$가 미분 가능해야하는데 절댓값 함수는 미분이 불가능하기 때문이다. 같은 이유로 미분해서 생기는 상수 $2$를 약분해주기 위해서 앞에 $\frac{1}{2}$이 붙은 것이다. 또한 2차 함수는 볼록 함수이므로 경사하강법을 통해 찾은 $\mathbf{w}$가 글로벌 미니멈이라는 것이 보장된다. 4.PNG 손실 함수의 그래디언트1를 계산하면 다음과 같다. $$ \begin{align*} \frac{ \partial J(\mathbf{w})}{ \partial \mathbf{w} } &= \frac{ \partial }{ \partial \mathbf{w} }\frac{1}{2}\sum \limits_{i} \left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)^{2} \\ &= \sum \limits _{i=1} \left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right) \frac{ \partial }{ \partial \mathbf{w} }\left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right) \\ &= \sum \limits _{i=1} \left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)\mathbf{x}_{i} \end{align*} $$ 두번째 줄은 연쇄 법칙에 의해 성립한다. 따라서 경사하강법을 통한 가중치의 업데이트를 다음과 같이 표현할 수 있다. $$ \begin{align*} && &\mathbf{w} \gets \mathbf{w}-\alpha\frac{ \partial J(\mathbf{w})}{ \partial \mathbf{w} } \\ \implies&& &\mathbf{w} \gets \mathbf{w}-\alpha\sum \limits _{i=1} \color{blue}{\left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)}\mathbf{x}_{i} \end{align*} $$ 여기서 $\color{blue}{\left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)}$가 오차이기 때문에 가중치의 업데이트는 오차에 의존해서 이루어진다. 오차가 적을 때 가중치는 조금 바뀌고, 오차가 클 때 가중치가 많이 바뀐다. 가중치를 업데이트하는 방법은 크게 두 가지로 나눌 수 있다. 그 중 하나는 배치 러닝 $(\text{batch learning})$으로 전체 트레이닝 셋에 대한 오차를 한꺼번에 적용하는 것이다. $$ \mathbf{w} \gets \mathbf{w}-\alpha\sum \limits _{i=1}^{n} \left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)\mathbf{x}_{i} $$ 이때 한 번에 업데이트 하지 않고 임의의 횟수로 나누어서 업데이트 하는 것을 미니 배치 러닝이라고 한다. 다른 하나는 온라인 러닝 $(\text{online learning})$으로 하나의 데이터 셋에 대해서 바로바로 업데이트 하는 것을 말한다. $$ \begin{align*} \text{For i=1 to n}:& \\ & \mathbf{w} \gets \mathbf{w}-\alpha\left( \mathbf{w}^{T}\mathbf{x}_{i}-y_{i} \right)\mathbf{x}_{i} \end{align*} $$


  1. 내적의 그래디언트 참고 ↩︎

댓글