Linear Regression의 개념
Predicting exam score
- 아래 표의 데이터를 가지고 supervised learning을 한다고 해보자
- x : 예측을 하기 위한 기본적인 자료, training data 또는 learning data 또는 feature
- y : 예측하려는 값
- regression : 0~100 사이의 값을 예측하는 것
- training : 데이터로 학습을 시키는 것
- 학습이 끝나면 어떤 모델이 만들어진다.
- regression을 사용한다는 것
- 시험을 치르기 전에 x라는 값(7시간 공부한 학생)을 주고 y(몇 점을 맞을 수 있을까?)는 얼마인가 인공지능에게 물어본다.
- 인공지능은 regression을 사용해 약 65점 정도 나올 것으로 예측을 한다.
Linear Regression 모델을 만들어 어떻게 동작하는지 알아보자.
- 아래 그림 표의 데이터를 가지고 그래프에 표시하면 다음과 같다.
- Linear Regression 모델을 만들기 위해서는 가설(hypothesis)을 세울 필요가 있다.
- 가설(Hypothesis) 세우기 : 우리가 가지고 있는 데이터는 linear한 모델이 맞을 것이다.
- 세상의 많은 데이터나 현상들이 linear한 모델로 설명할 수 있는 것이 많다
- 학습(learning) 하기 : 아래 그림과 같이 우리가 가지고 있는 데이터에 잘 맞는 직선을 찾는 것
- 1단계 : 아래 그림과 같은 직선을 수학식으로 표현한다.
$$H(x) = Wx+b$$
- \(H(x)\) : 가설, 예측 값
- \(W\) : weight
- \(b\) : bias
- \(W\)와 \(b\)에 따라 여러 가지 직선이 만들어질 수 있다.
- 다음과 같은 직선의 방정식을 얻었다고 해보자.
- 2단계 : 여러 직선 중에서 우리 데이터에 가장 잘 맞는 직선을 찾는다.
- 가설로 세운 직선 위의 점과 실제 데이터와의 거리가 짧으면 좋고, 멀면 나쁘다.
- 그래서 직선과 실제 데이터와의 거리를 구한다.
- 3단계 : 거리를 구한다.
- cost function 또는 loss function : 거리를 구하는 함수
- 우리가 세운 가설이 실제 데이터가 얼마나 다른가를 알 수 있다.
- 가장 쉬운 방법은 \(H(x)-y\)를 구하는 것
- 그러나 거리가 음이나 양이 될 수 있기에 잘 사용하지 않는다
- 그래서 차이(거리)를 제곱 \((H(x)-y)^2\)한 후 평균을 구한다.:
- 항상 양의 값을 가진다.
- 거리가 멀어지면 값이 커지기 때문에 페널티를 줄 수 있다.
- 페널티를 줌으로서 거리를 작게 만들 수 있다.
- 위의 데이터에 대하여 cost(loss) function 값을 구하면 다음과 같다.
- 그래서 cost(loss) function의 식은 다음과 같다.
- \(m\)은 학습 데이터의 개수
- 여기서 \(H(x)=Wx+b\)이고 위 식에 대입하면 cost(loss) function은 \(W\)와 \(b\)의 함수가 된다.
Linear Regression 학습의 목표: cost(loss) 함수의 값이 최소가 되는 \(W\)와 \(b\)를 찾는 것이다.
-
이미 만들어져 있는 많은 알고리즘들이 있다.
- 가장 대표적인 알고리즘은 경사 하강법(Gradient Descent Algorithm)이다.
Gradient Descent Algorithm(경사 하강법) 개념 (출처: 위키피디아)
- 경사 하강법은 1차 근삿값 발견용 최적화 알고리즘이다.
- 기본 아이디어는 함수의 기울기(경사: gradient)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복하는 것
- 최적화할 함수 \(f(\mathbf{x})\)에 대하여 먼저 시작점 \(\mathbf{x}_0\)를 정한다.
- 현재의 점 \(\mathbf{x}_i\)가 주어졌을 때, 그 다음으로 이동할 점인 \(\mathbf{x}_{i+1}\)을 다음과 같이 계산한다.
- \(\gamma_i\)는 이동할 거리를 조절하는 매개변수이다.
\begin{equation}\mathbf{x}_{i+1}=\mathbf{x}_i - \gamma_i\nabla f(\mathbf{x}_i)\tag{1}\end{equation}
- 아래 그림은 경사 하강법을 실행하는 모습으로 \(\mathbf{x}_0\)에서 시작하여, 경사가 낮아지는 쪽으로 이동하여 차례대로 \(\mathbf{x}_1,\mathbf{x}_2,\mathbf{x}_3,\mathbf{x}_4\)를 얻게된다.
- 이 알고리즘의 수렴 여부는 \(f\)의 성질과 \(\gamma_i\)의 선택에 따라 달라진다.
- 이 알고리즘은 극소점(local minimum)으로 수렴한다.
- 따라서 구한 값이 전역적인 최적해라는 것을 보장하지 않는다. -> 극소값이 아닌 최소값을 찾을 수 있는 방법이 필요
- 시작점 \(\mathbf{x}_0\)의 선택에 따라 달라진다.
- 따라서 다양한 시작점에 대해 여러 번 경사 하강법을 적용하여 그 중 가장 좋은 결과를 선택할 수도 있다.
예제를 통한 경사 하강법 설명
- 설명의 편의를 위해 가설을 다음과 같이 bias \(b\)를 없애 간단하게 만든다.
- 가설 : \(H(x)=Wx\)
- cost(loss) 함수는 \(W\)의 함수로 다음과 같이 표현된다.
\begin{eqnarray}\textrm{cost(loss)}(W) &=& \frac{1}{m}\sum_{i=1}^{m}(H(x_i)-y_i)^2\\&=&\frac{1}{m}\sum_{i=1}^{m}(W\cdot x_i-y_i)^2\end{eqnarray}
- 아래와 같은 데이터에 대하여 위의 cost(loss) 함수 값을 구해보자
- \(W=1\)일 때,
- \begin{eqnarray}\textrm{cost(loss)}(1) &=& \frac{1}{3}\big( (1\times 1 - 1)^2 + (1\times 2 - 2)^2 + (1\times 3 - 3)^2\big)\\&= &\frac{1}{3}(0^2+0^2+0^2)\\&=&0\end{eqnarray}
- \(W=0\)일 때,
\begin{eqnarray}\textrm{cost(loss)}(0) &=& \frac{1}{3}\big( (0\times 1 - 1)^2 + (0\times 2 - 2)^2 + (0\times 3 - 3)^2\big)\\&=&\frac{1}{3}(1^2+2^2+3^2)\\&=&\frac{14}{3}\\&\fallingdotseq &4.67\end{eqnarray}
- \(W=2\)일 때,
\begin{eqnarray}\textrm{cost(loss)}(2) &=& \frac{1}{3}\big( (2\times 1 - 1)^2 + (2\times 2 - 2)^2 + (2\times 3 - 3)^2\big)\\&=&\frac{1}{3}(1^2+2^2+3^2)\\&=&\frac{14}{3}\\&\fallingdotseq &4.67\end{eqnarray}
- 위에서 구한 값을 토대로 \(\textrm{cost(loss)}(W)\) 함수를 그래프로 그려보면 다음과 같이 2차 함수의 그래프로 표현된다.
\begin{eqnarray}\textrm{cost(loss)}(W) &=& \frac{1}{m}\sum_{i=1}^{m}(H(x_i)-y_i)^2\\&=&\frac{1}{m}\sum_{i=1}^{m}(W\cdot x_i-y_i)^2\end{eqnarray}
- 여기서 우리의 목표는 cost(loss) 함수가 최소가 되는 점을 찾는 것이다.
- 우리가 데이터를 가지고 위의 그래프와 같은 형태의 cost(loss) 함수를 만들어 낼 수 있다면 최소값은 어떻게 찾아낼 수 있을까? -> 미분계수가 최소가 되는 점!!!!
- 기계적으로 최소가 되는 점을 찾아내야 한다!
- 최소가 되는 점을 찾아내는 알고리즘 -> 경사를 따라 내려가는 알고리즘
- 실제로는 구간에서의 극소값을 찾는 것이다!!!
- Gradient Descent Algorithm
- \(\textrm{cost(loss)}(W,b)\) 함수를 최소화하는데 많이 사용됨
- 많은 기계 학습 뿐만 아니라 다른 최소화 문제에 사용됨
- 주어진 \(\textrm{cost(loss)}(W,b)\) 함수에 대하여 최소가 되는 \(W\)와 \(b\)를 찾을 수 있다.
- 매개변수 \(W\)와 \(b\)를 바꿔가면서 최소가 되는 점을 찾는 방법
- 보다 일반적인 함수 \(\textrm{cost(loss)}(w_1, w_2, \ldots, b)\)에 대해서도 적용이 가능
어떻게 극소값을 찾을 수 있을까?
- 임의의 초기값에서 시작한다.
- \((0,0)\)(또는 다른 값)에서 시작한다.
- \(W\)와 \(b\)를 조금씩 바꿔가면서 \(\textrm{cost(loss)}(W,b)\)의 값을 줄여나간다.
- 매개변수 \(W\)와 \(b\)를 바꿀 때마다 \(\textrm{cost(loss)}(W,b)\)를 줄일 수 있는 경사(gradient)를 선택한다.
- 위의 1~2번을 반복한다.
- 극소값(local minimum)으로 수렴할 때까지 반복한다.
- 이 알고리즘의 장점
- 어떤 점에서 시작하더라도 예외가 있기는 하지만 항상 극소점에 도달할 수 있다.
경사도(gradient)를 찾는 방법 -> 미분(differential)
- 미분을 이용하여 경사도(기울기)를 구한다.
- 계산을 편하게 하기 위하여 cost(loss) 함수를 약간 변형한다.
- cost(loss) 함수의 최소값을 구할 때 \(\frac{1}{m}\) 대신 \(\frac{1}{2m}\)을 사용하더라도 같은 의미를 지니기에 큰 문제가 없다.
\begin{eqnarray}\textrm{cost(loss)(W)} = \frac{1}{2m}\sum_{i=1}^{m}(W\cdot x_i-y_i)^2\tag{2}\end{eqnarray}
- 식 (2)를 GDA의 정의(식 (1))를 따라 식을 전개하면 다음과 같다.
- \(\alpha\)는 learning rate이다.
\begin{eqnarray} W &=& W - \alpha\frac{\partial}{\partial W}\textrm{cost(loss)}(W)\\&=&W - \alpha\frac{\partial}{\partial W}\Bigg(\frac{1}{2m}\sum_{i+1}^m\big(W\cdot x_i-y_i\big)^2\Bigg)\\&=&W - \alpha\frac{1}{2m}\sum_{i+1}^m2\big(W\cdot x_i-y_i\big)\cdot x_i\\&=&W - \alpha\frac{1}{m}\sum_{i=1}^m\big(W\cdot x_i-y_i\big)\cdot x_i\tag{3}\end{eqnarray}
- 식 (3)이 완성된 Gradient Descent Algorithm이다.
- 식 (3)을 여러 번 실행하여 \(W\)의 값이 변화하면 그 값이 cost(loss) 함수를 극소화하는 값이 된다.
- 식 (3)을 기계적으로 실행만 시키면 cost(loss) 값을 최소화하는 \(W\) 값을 구할 수 있다.
- 이 과정을 linear regression의 핵심인 모델을 학습시킨다고 한다.
경사 하강법의 문제점
- 아래 그림과 같이 2개의 시작점으로 출발을 하면 도착점이 다르다.
- 각각 서로 다른 극소점에 도달하게 된다.
- 그러나 우리가 가설로 세웠던 cost(loss) 함수는 아래 그림과 같은 볼록 함수(convex function)이다.
- 따라서 어느 점에서 출발하더라도 최소값에 도달하게 된다.
- linear regression을 적용하기 전에 반드시 cost(loss) 함수가 볼록 함수인지 확인한한다.
- 확인만 된다면 편안하게 경사 하강법을 사용할 수 있다.
'모두를 위한 머신러닝' 카테고리의 다른 글
Lesson 3 연습 : Multi-variable Linear Regression (1) | 2017.04.16 |
---|---|
Lesson 3 : Multi-variable Linear Regression (0) | 2017.04.16 |
Lesson 2 연습 : Linear Regression의 Hypothesis와 cost의 개념 (0) | 2017.04.11 |
Lesson 1 연습 : TensorFlow의 개념 (0) | 2017.04.03 |
Lesson 1 : 기계학습의 기본 개념 (3) | 2017.04.03 |