<NAVER boostcourse>
에서 수강한 강의를 바탕으로 정리한 내용입니다.변수 값의 변화에 따른 함수 값의 변화를 측정하기 위한 도구
simpy.diff()
로 미분을 계산할 수 있음함수 값이 극솟값에 도달하면 움직임을 멈춤
Input
- gradient : 미분 계산 함수
- init : 시작점(초기값)
- lr : 학습률
- eps : 알고리즘 종료조건 #미분값이 정확하게 0이 되는것은 불가능하기 때문
Output
- var
------------------------------------------------------------------------------
var = init
grad = gradient(var)
while (abs(grad) > eps):
var = var - lr * grad
grad = gradient(var)
import sympy as sym
from sympy.abc import x
# define polynominal function
def func(val):
polynominal = sym.poly(x**2 + 2*x + 3)
return func.subs(x, val), polynominal
def func_gradient(fun, val):
_, function = fun(val)
diff = sym.diff(function, x)
return diff.sub(x, val), diff
def gradient_descent(fun, init_point, lr_rate=1e-2, epsilon=1e-5):
cnt = 0
val = init_point
diff, _ = func_gradient(fun, init_point)
while np.abs(diff) > epsilon:
val = val - lr_rate*diff
diff = func_gradient(func, val)
cnt+=1
gradient_descent(fun=func, init_point=np.random.unifor(-2,2))
Input
- gradient : 미분 계산 함수
- init : 시작점(초기값)
- lr : 학습률
- eps : 알고리즘 종료조건 #미분값이 정확하게 0이 되는것은 불가능하기 때문
Output
- var
------------------------------------------------------------------------------
var = init
grad = gradient(var)
while (norm(grad) > eps):
var = var - lr * grad
grad = gradient(var)