gradient descent
경사법
- 함수의 미분값(기울기)을 바탕으로 최솟값 등의 탐색을 시행하는 알고리즘
경사하강법
- 경사법 일종으로 함수 값이 낮아지는 방향으로 독립 변수 값을 변형시켜가면서 최종적으로는 최소 함수 값을 갖도록 하는 독립 변수 값을 찾는 방법
- 학습률(학습계수)를 통해 독립 변수 값을 찾는 갱신 속도 지정
$$ x_{i+1} = x_i - \alpha {\operatorname{dy}\over\operatorname{dx}} $$
구현
$$ f(x) = x_2 - 2x $$ 최솟 값 구하기
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def my_func(x): # 최솟값을 구하는 함수
return x**2 - 2*x
def grad_func(x): # 도함수
return 2*x - 2
def grad_update(a=0.1,epoch=20):
x = 4.0 # x에 초깃값을 설정
record_x = [] # x의 기록
record_y = [] # y의 기록
for i in range(epoch): # epoch회 x를 갱신한다
y = my_func(x)
record_x.append(x)
record_y.append(y)
x -= a * grad_func(x) # (식1)
x_f = np.linspace(-2, 4) # 표시 범위
y_f = my_func(x_f)
plt.plot(x_f, y_f, linestyle="dashed") # 함수를 점선으로 표시
plt.plot(record_x, record_y, 'ro') # x와 y의 기록을 표시
plt.title(f'({a}, {epoch})')
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid()
plt.show()
학습률에 따른