Gradient Descent

원준식·2022년 9월 23일
0

부스트캠프 ai tech 1주차에 배운 내용을 정리하는 글입니다.



  1. Gradient Descent란?

함수의 기울기를 구하고 기울기의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 방법

https://ko.wikipedia.org/wiki/경사_하강법


예시)

f(x,y)=x2+2y2f(x,y) = x^2+2y^2

gradient vectorf=(xf,yf)=(2x,4y)\nabla f = (\partial_xf, \partial_yf) = (2x, 4y)

시작점이 (1,2)(1,2)이고 learning rate = 0.1이라면

다음 점은 (10.121,20.142)=(0.8,1.2)(1 - 0.1 * 2*1, 2 - 0.1 * 4* 2) = (0.8, 1.2)

이러한 과정을 반복



  1. 선형회귀분석

데이터에 제일 적합한 선형모델을 찾아보자.


어떻게?

선형식을 하나 만든 뒤 선형식과 데이터 사이 error를 계산 → error를 줄이는 방향으로 선형식을 바꿔줌


error를 어떻게 줄임?

Gradient descent를 이용해서 줄임


예시)

초기 선형식: y=w0x0+w1x1+w2x2+by = w_0x_0 + w_1x_1 + w_2x_2 + b

우리가 가지고 있는 데이터([x0,x1,x2][x_0, x_1, x_2]): [1,1,1],[1,1,2],[1,2,2],[2,2,3],[2,3,3],[1,2,3][1,1,1], [1,1,2], [1,2,2], [2,2,3], [2,3,3], [1,2,3]

[x0,x1,x2][x_0, x_1, x_2]에 따른 yy: 16,21,24,30,33,2916, 21, 24, 30, 33, 29

error: MSE 사용

learning rate: 0.01

w0,w1,w2,bw_0, w_1, w_2, bβ=[1,1,1,1]\beta = [1, 1, 1, 1]으로 초기화(random initialize)



위 error를 식으로 나타내면

error=1ni=1n(yij=1dXijβj)2error = \frac{1}{n}\sum^n_{i=1}(y_i - \sum^d_{j=1}X_{ij}\beta_j)^2

우리가 찾고 싶은 것은 w0,w1,w2,bw_0, w_1, w_2, b로 이루어진 β\beta

따라서 β\beta에 대해 편미분

errorβ=2nXT(yXβ)\frac{\partial error}{\partial \beta} = -\frac{2}{n}X^T(y-X\beta)

계산)

expand_x=(111111211221223123311231)expand\_x = \begin{pmatrix} 1 & 1 & 1 & 1 \\ 1 & 1 & 2 & 1 \\ 1 & 2 & 2 & 1 \\ 2 & 2 & 3 & 1 \\ 2 & 3 & 3 & 1 \\ 1 & 2 & 3 & 1 \\ \end{pmatrix}
β=(1111)\beta = \begin{pmatrix} 1 \\ 1 \\ 1 \\ 1 \\ \end{pmatrix}
y=(162124303329)y = \begin{pmatrix} 16 \\ 21 \\ 24 \\ 30 \\ 33 \\ 29 \\ \end{pmatrix}

  • 예측값
y^=expand_xβ\hat{y} = expand\_x \cdot \beta

  • 새로운 β\beta는?
βnew=β+0.0126(111221112232122333111111)(121618222422)\beta_{new} = \beta +0.01*\frac{2}{6} \begin{pmatrix} 1 & 1 & 1 & 2 & 2 & 1 \\ 1 & 1 & 2 & 2 & 3 & 2 \\ 1 & 2 & 2 & 3 & 3 & 3 \\ 1 & 1 & 1 & 1 & 1 & 1 \\ \end{pmatrix} \begin{pmatrix} 12 \\ 16 \\ 18 \\ 22 \\ 24 \\ 22 \\ \end{pmatrix}

위 과정 반복



  1. 경사하강법은 만능일까?

목적식이 볼록하지 않을 경우 수렴이 보장되지 않을 수 있음



  1. 확률적 경사하강법

확률적 경사하강법: 모든 데이터를 사용하여 β\beta를 업데이트하는 것이 아닌 데이터 한개 또는 일부만을 활용해 β\beta를 업데이트하는 방법(위의 expand_xexpand\_x의 행이 줄어들겠지)

  • 목적식이 볼록이 아니어도 최적화할 수 있음(만능은 아니지만 경사하강법보다 더 낫다고 검증됨)
  • 데이터의 일부만을 가지고 파라미터를 업데이트하기 때문에 자원을 효율적으로 활용할 수 있음

0개의 댓글