4. 경사 하강법 Gradient Descent, 파이썬 코드, 머신 러닝

2022. 2. 8. 22:45코딩/AI

* 경사 하강법 (Gradient Descent)

 


경사 하강법 (Gradient Descent)이란 쉽게 말하면, Training set (funtion)의 극솟점을 찾는 알고리즘이다. a는 Step size (또는 learning rate)로 수렴 속도를 결정한다. Cost function을 설정하고, 모델의 Cost function 최솟값을 찾아 그 값을 구할 때 쓰인다.

w : data point
J(w) : Cost function




반복 알고리즘을 통해, w를 계속 업데이트 한다.

 

* 경사 하강법 파이썬 코드

from numpy import asarray
from numpy import arange
from numpy.random import rand
from matplotlib import pyplot

def objective(x):
    return -(x**2.0) + 4.0*x
def derivative(x):
    return 2.0 * (-x) + 4.0
def step_size(x):
    return 2**(-x)

def gra_des(objective, derivative, bounds,n_iter, step_size):
    solutions, scores = list(),list()
    solution = 5.0
    solutions.append(solution)
    scores.append(objective(solution))
    for i in range(n_iter):
        gradient = derivative(solution)
        solution = solution + step_size(i+1)*gradient
        solution_eval = objective(solution)
        solutions.append(solution)
        scores.append(solution_eval)
    return [solutions,scores]

bounds = asarray([[-8.0,10.0]])
n_iter = 30
solutions,scores = gra_des(objective,derivative,bounds,n_iter,step_size)
inputs = arange(bounds[0,0], bounds[0,1]+0.1, 0.1)
results = objective(inputs)
pyplot.plot(inputs,results)
pyplot.plot(solutions,scores,".-",color='red')
pyplot.show()


- 결과



* 경사하강법 활용 예시

RNN의 학습에 경사 하강법을 이용한다.