-
[Regression]회귀(Regression)와 경사하강법(Gradient Descent)Engineering/AI 2021. 4. 17. 15:10
1. 회귀(Regression)
머신러닝의 회귀는 어떤 특징 값 하나를 숫자로 추정하여 출력하는 과정이다. 최초로 회귀 분석이라는 용어를 사용한 사람은 영국의 유전학자 프랜시스 골턴으로 부모와 자녀 키 사이의 상관관계를 연구하며 '두 값 사이에 깊은 상관관계가 있지만 세대가 지남에 따라 키가 계속 커지거나 작아지려고 하기보다는 조사 집단의 평균값으로 돌아가려는 경향이 있다.'라는 가설을 세웠고 이 같은 분석 방법을 회귀(Regression) 분석이라고 불렀다.
2. 경사하강법(Gradient Descent)
이러한 머신러닝을 활용한 회귀에서는 최소가 0이 되는 계수를 바로 찾는 것보다 최소가 되는 계수를 향해 계수를 일정하게 수렴하게 만드는 경사하강법(Gradient Descent)을 사용한다. 경사하강법은 최적의 파라미터를 갱신해가는 방법으로 활용된다. 그렇다면 예시를 통해서 살펴보자.
Figure 1. f(x) $$f(x) = (x - 1)^2 = x^2 - 2x + 1$$
$$f'(x) = 2x - 2$$
경사하강법의 경우 $x$에 일정한 값을 대입하여 $f(x)$가 최솟값이 되는 $x$를 찾아가는 과정이다. 최적화할 함수가 $f(x)$라고 하면 시작점 $x_0$를 정한다. $x_i$가 갱신된 $x$값이라고 할 때 그다음 이동할 점 $x_{i + 1}$은 다음과 같이 정의된다.
$$x_{i + 1} = x_i - \eta \frac{\partial f(x)}{\partial x}$$
$$x := x - \eta \frac{\partial f(x)}{\partial x}$$
이때 $\eta$는 학습률(Learning Rate)이라고 하는 양의 정수이다. 학습률의 크기에 따라 최솟값에 도달하는 갱신 속도가 달라지기 때문에 적절한 학습률의 선정이 중요하다고 볼 수 있다.
3. 시작점과 학습률 선정의 중요성
기본적인 경사하강법은 학습률과 시작점에 따라 발산과 느린 수렴 속도라는 문제점이 있다. 우선 발산하는 경우를 살펴 보면, 위에서 사용했던 예제에서 학습률을 1로 정하고 시작점을 $x_0 = 3$으로 정할 때 발산한다는 것을 알 수 있다.
Figure 2. Divergence $$x := 3 - 1(2x - 2)$$
$$x := 3 - 1(2\times3 - 2) = -1$$
$$x := 3 - 1(2\times-1 - 2) = 3$$
$$x := 3 - 1(2\times3 - 2) = -1$$
$$\dots$$
이번에는 수렴 속도에서 문제가 생긴 예제를 살펴보자. 학습률을 0.1로 정하고 마찬가지로 3에서 시작해본다.
Figure 3. Slow Convergence $$x := 3 - 0.1(2x - 2)$$
$$x := 3 - 0.1(2\times3 - 2) = 2.6$$
$$x := 3 - 0.1(2\times2.6 - 2) = 2.3$$
$$x := 3 - 0.1(2\times2.3 - 2) = 2.1$$
$$x := 3 - 0.1(2\times2.1 - 2) = 1.9$$
$$\dots$$
학습률을 너무 작은 값으로 설정하게 되면 꽤 정확한 최솟값을 찾는 것은 가능하겠지만, 갱신 횟수가 증가하게 된다는 단점이 있다. 따라서 이러한 점을 해결하기 위해 적절한 학습률과 시작점을 선정하는 것은 매우 중요한 문제이다. 나중에 살펴볼 Adam 기법은 이 학습률을 적절하게 갱신해주는 효율적인 방법 중 하나이다.
4. 매개변수 갱신식
이제 이 매개변수 갱신식이 실제 머신러닝에서 어떻게 쓰이는지 관찰해보자. 우선 목적 함수를 아래와 같이 정의한다.
$$ f_{\theta}(x) = \theta_0 + \theta_1x$$
$$ E(\theta) = \frac{1}{2}\sum_{k=1}^{n} {(y_k - f_{\theta}(x_k))^2}$$
이때 $\theta_0$와 $\theta_1$의 갱신식은 아래와 같다.
$$\theta_0 := \theta_0 - \eta \frac{\partial E}{\partial \theta_0}$$
$$\theta_1 := \theta_1 - \eta \frac{\partial E}{\partial \theta_1}$$
$\theta_0$에 대해 $E$를 미분하는 과정은 합성함수 미분법을 활용한다.
$$\frac{\partial E}{\partial \theta_0}=\frac{\partial E}{\partial f_{\theta}} \frac{\partial f_{\theta}}{\partial \theta_0}$$
식을 왼쪽, 오른쪽으로 나누었을 때 우선 왼쪽 식을 먼저 구해보기로 한다.
$$\frac{\partial E}{\partial f_{\theta}}=\frac{\partial}{\partial f_{\theta}}(\frac{1}{2}\sum_{k=1}^{n}(y_k-f_{\theta}(x_k))^2)$$
$$=\frac{1}{2}\sum_{k=1}^{n}(\frac{\partial}{\partial f_{\theta}}(y_k^2-2y_kf_{\theta}+f_{\theta}^2))$$
$$=\frac{1}{2}\sum_{k=1}^{n}(-2y_k+2f_{\theta})$$
$$=\sum_{k=1}^{n}(f_{\theta}-y_k)$$
다음은 오른쪽을 계산해보자.
$$\frac{\partial f_{\theta}}{\partial \theta_0}=\frac{\partial }{\partial \theta_0}(\theta_0+\theta_1x) = 1$$
결론적으로 이를 합쳐보면 아래와 같다.
$$\frac{\partial E}{\partial \theta_0}=\sum_{k=1}^{n}(f_{\theta}(x_k)-y_k)$$
그렇다면 두 번째 매개변수 갱신식인 $\theta_1$의 갱신식을 살펴보자.
$$\frac{\partial E}{\partial \theta_1}=\frac{\partial E}{\partial f_{\theta}} \frac{\partial f_{\theta}}{\partial \theta_1}$$
달라지는 부분은 매개변수의 오른쪽 부분이 $\theta_1$로 편미분 하는 과정이다. 따라서 이 부분만 계산해서 곱해주기로 하자.
$$\frac{\partial f_{\theta}}{\partial \theta_1}=\frac{\partial }{\partial \theta_1}(\theta_0+\theta_1x) = x$$
이 식은 아래와 같이 갱신된다.
$$\frac{\partial E}{\partial \theta_1}=\sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_k)$$
이에 대한 값들을 갱신식에 직접 대입해주면 최종 갱신식은 아래와 같다.
$$\theta_0 := \theta_0 - \eta \sum_{k=1}^{n}(f_{\theta}(x_k)-y_k)$$
$$\theta_1 := \theta_1 - \eta \sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_k)$$
4. 다항식 회귀
우리는 1차 함수 관점에서 회귀 그래프를 구해봤지만, 때로는 2차 함수와 같은 곡선의 형태가 적합한 결과물도 존재할 것이다. 이때 더 큰 차수를 가진 식을 통해 회귀를 정의해도 괜찮다. 어떠한 식이 가장 적합하게 그래프를 표현하는지는 실험해가면서 정하면 된다. 그러나 무작정 차수를 늘려가게 된다면 과적합(Overfitting) 문제를 겪게 된다. 데이터의 입출력 관계를 잘 규명했더라도 특정 케이스에서만 완벽하게 들어맞는 상황이기 때문에, 여러 다른 케이스에 적용할 때 문제가 발생할 수 있다. 이는 나중에 다시 이야기해보기로 하고, 본문에서는 갱신식의 관점에서만 살펴보자. n차 다항식일 때 우리가 $\theta_1$을 구했던 방식처럼 특정 변수에 대한 합성함수 미분 부분만 계산해주면 된다.
$$ f_{\theta}(x) = \theta_0 + \theta_1x + \dots + \theta_nx^n$$
$$\frac{\partial E}{\partial \theta_n}=\frac{\partial E}{\partial f_{\theta}} \frac{\partial f_{\theta}}{\partial \theta_n}$$
앞은 동일하므로 뒤의 식만 살펴보면 된다.
$$\frac{\partial f_{\theta}}{\partial \theta_n}=\frac{\partial }{\partial \theta_n}(\theta_0 + \theta_1x + \dots + \theta_nx^n) = x^n$$
$$\therefore \frac{\partial E}{\partial \theta_n}=\sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_k^n)$$
따라서 최종 갱신식은 아래와 같다.
$$\theta_0 := \theta_0 - \eta \sum_{k=1}^{n}(f_{\theta}(x_k)-y_k)$$
$$\theta_1 := \theta_1 - \eta \sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_k)$$
$$\dots$$
$$\theta_n := \theta_n - \eta \sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_k^n)$$
5. 다중 회귀
마지막으로 다중 회귀에 대해서 관찰해보자. 다중 회귀는 기존의 $x$라는 하나의 변수가 아닌 여러 변수를 사용하는 회귀이다. 일반적으로 열 벡터를 활용하여 아래와 같이 정의했다고 하자.
$$\theta = \begin{bmatrix}
\theta_0\\
\theta_1\\
\theta_2\\
\dots\\
\theta_n
\end{bmatrix}
,X = \begin{bmatrix}
x_0=1\\
x_1\\
x_2\\
\dots\\
x_n
\end{bmatrix}$$그렇다면 다음과 같이 정의할 수 있다.
$$ f_{\theta}(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \dots + \theta_nx_n$$
$$f_{\theta}(x) = \theta^T\cdot X$$
이때 앞서 진행한 방식과 비슷하게 합성 함수를 통해 다중 회귀의 매개변수 갱신식을 구할 수 있다. 일반화하기 위해 다중 매개변수 식의 특정 항 $i$를 기준으로 편미분 해보자.
$$\frac{\partial E}{\partial \theta_i}=\frac{\partial E}{\partial f_{\theta}} \frac{\partial f_{\theta}}{\partial \theta_i}$$
합성함수의 왼쪽은 우리가 매개변수 갱신식에서 구한 것과 같기 때문에 오른쪽 결과만 확인하면 된다.
$$\frac{\partial f_{\theta}(x)}{\partial \theta_i} = \frac{\partial}{\partial \theta_i}(\theta^T\cdot X)$$
$$=\frac{\partial}{\partial \theta_i}(\theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \dots + \theta_ix_i + \dots + \theta_nx_n)$$
$$=x_i$$
따라서 최종 특정 $i$번째 갱신 식은 아래와 같다.
$$\theta_i := \theta_i - \eta \sum_{k=1}^{n}((f_{\theta}(x_k)-y_k)\times x_{k_{i}})$$
- Reference
경사 하강법 설명 참고 : ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95
Figure 1, 2, 3 및 설명 참고 : Likelion k-digital training 2nd
반응형'Engineering > AI' 카테고리의 다른 글
[Fundamentals]원-핫 인코딩(One-Hot Encoding) (0) 2021.04.18 [Regression]확률적 경사하강법(Stochastic Gradient Descent)과 미니배치 경사하강법(Mini-Batch Gradient Descent) (0) 2021.04.17 [Regression]최소제곱법(Least-Square Method)과 목적함수(Objective Function) (0) 2021.04.17 [Fundamentals]파라미터(Parameter)와 하이퍼파라미터(Hyperparameter) (0) 2021.04.15 [Fundamentals]단층 퍼셉트론(Single-Layer Perceptron) (0) 2021.04.15