[DeepLearning] 선형 회귀
선형 회귀
실수 벡터 입력이 주어졌을 때 선형적 관계를 지닌 출력 실수 벡터 값을 예측하는 문제
- 위 그림은 N개의 n차원의 입력 벡터와 N개의 m차원의 출력 벡터로 이루어져있다.
- n차원의 입력 벡터를 선형 회귀 모델을 통과(feed forwarding)하면 m차원의 출력 벡터가 나온다.
- 손실 함수의 y 값은 손실값(loss), x축은 가중치(weight)값이다. feed forwarding하여 얻은 출력값과 실제 타깃 벡터와 비교하여 얻은 값이 손실값이다.
- 손실값을 가중치 파라미터로 미분하게 되면 손실 값을 낮추는 방향으로 가중치 파라미터 업데이트가 가능하다.
- 선형 회귀의 손실 함수는 주로 MSE 손실 함수를 활용하여 계산한다.
선형 회귀 수식
$$ x_{1:N} = \begin{bmatrix}
x_{1, 1} & \cdots & x_{1, n} \\
\vdots & \ddots & \vdots \\
x_{N, 1} & \cdots & x_{N, n} \\
\end{bmatrix}$$
$$ y_{1:N} = \begin{bmatrix}
y_{1, 1} & \cdots & y_{1, m} \\
\vdots & \ddots & \vdots \\
y_{N, 1} & \cdots & y_{N, m} \\
\end{bmatrix}$$
N개의 n차원 입력벡터와 N개의 m차원 출력 벡터를 행렬로 표현한 것이다.
우리는 출력과 실제 정답의 차이가 최소화가 되도록 손실 함수를 정의하고, 손실 함수를 최소화시키는 가중치 파라미터를 찾아야 한다. 가중치는 다음과 같이 정의할 수 있다.
$$\hat{\theta} = \underset{\theta\in \Theta}{\textrm{argmin}}\sum_{i=1}^N \left\|y_i-f_{\theta}(x_i) \right\|_2^2,\\
\textrm{where}\; \theta = {W, b} \;\textrm{and} \; f_{\theta}(x) = x\cdot W+b.$$
입력 샘플과 출력 샘플들을 따로 계산하는 것이 아니라 아래와 같이 행렬로 계산한다.
$$\hat{y}_{1:N} = x_{1:N} \cdot W+b$$
선형 회귀의 손실 함수는 주로 MSE 손실함수를 활용하여 다음과 같이 전개된다.
$$L(\theta) = \sum_{i=1}^N\left\| y_i-\hat{y}_i \right\|_2^2 \\
= \sum_{i=1}^N \sum_{j=1}^m(y_{i,j} - \hat{y}_{i,j})^2 \\
= \sum_{i=1}^N \sum_{j=1}^m y_{i,j}^2 - 2y_{i,j} \cdot \hat{y}_{i,j} + \hat{y}_{i,j}^2, \\
\textrm{where} \; \hat{y}_{i,j} = \sum_{k-1}^n x_{i,k} \times W_{k,j} + b_j. $$
여기서 k단위는 샘플 한개 단위로 이해하였다.
가중치 파라미터($\theta$)를 업데이트 하는 것은 W와 b로 각각 손실함수를 편미분한 후 경사하강법을 통해 업데이트하는 것과 같다. 수식은 아래와 같다.
$$\theta \leftarrow \theta - \eta \triangledown_{\theta} L(\theta) \\
\downarrow \\
W \leftarrow W - \eta \triangledown_{W} L(\theta) \\
b \leftarrow b - \eta \triangledown_{b} L(\theta) \\
\downarrow \\
W_{k,j} \leftarrow W_{k,j}-\eta\cdot\frac{\partial L(\theta)}{\partial W_{k,j}} \\
b_j \leftarrow b_j -\eta\cdot\frac{\partial L(\theta)}{\partial b_j} $$
출처 : 김기현의 딥러닝 부트캠프 chapter 7