부스트캠프 ai tech 1주차에 배운 내용을 정리하는 글입니다.
- Gradient Descent란?
함수의 기울기를 구하고 기울기의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 방법
https://ko.wikipedia.org/wiki/경사_하강법
예시)
f(x,y)=x2+2y2의
gradient vector
는 ∇f=(∂xf,∂yf)=(2x,4y)임
시작점이 (1,2)이고 learning rate = 0.1이라면
다음 점은 (1−0.1∗2∗1,2−0.1∗4∗2)=(0.8,1.2)
이러한 과정을 반복
- 선형회귀분석
데이터에 제일 적합한 선형모델을 찾아보자.
어떻게?
선형식을 하나 만든 뒤 선형식과 데이터 사이 error를 계산 → error를 줄이는 방향으로 선형식을 바꿔줌
error를 어떻게 줄임?
Gradient descent를 이용해서 줄임
예시)
초기 선형식: y=w0x0+w1x1+w2x2+b
우리가 가지고 있는 데이터([x0,x1,x2]): [1,1,1],[1,1,2],[1,2,2],[2,2,3],[2,3,3],[1,2,3]
위 [x0,x1,x2]에 따른 y: 16,21,24,30,33,29
error: MSE 사용
learning rate: 0.01
w0,w1,w2,b는 β=[1,1,1,1]으로 초기화(random initialize)
위 error를 식으로 나타내면
error=n1i=1∑n(yi−j=1∑dXijβj)2
우리가 찾고 싶은 것은 w0,w1,w2,b로 이루어진 β임
따라서 β에 대해 편미분
∂β∂error=−n2XT(y−Xβ)
계산)
expand_x=⎝⎜⎜⎜⎜⎜⎜⎜⎛111221112232122333111111⎠⎟⎟⎟⎟⎟⎟⎟⎞
β=⎝⎜⎜⎜⎛1111⎠⎟⎟⎟⎞
y=⎝⎜⎜⎜⎜⎜⎜⎜⎛162124303329⎠⎟⎟⎟⎟⎟⎟⎟⎞
y^=expand_x⋅β
βnew=β+0.01∗62⎝⎜⎜⎜⎛111111211221223123311231⎠⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎛121618222422⎠⎟⎟⎟⎟⎟⎟⎟⎞
위 과정 반복
- 경사하강법은 만능일까?
목적식이 볼록하지 않을 경우 수렴이 보장되지 않을 수 있음
- 확률적 경사하강법
확률적 경사하강법
: 모든 데이터를 사용하여 β를 업데이트하는 것이 아닌 데이터 한개 또는 일부만을 활용해 β를 업데이트하는 방법(위의 expand_x의 행이 줄어들겠지)
- 목적식이 볼록이 아니어도 최적화할 수 있음(만능은 아니지만 경사하강법보다 더 낫다고 검증됨)
- 데이터의 일부만을 가지고 파라미터를 업데이트하기 때문에 자원을 효율적으로 활용할 수 있음