前言:初步学习梯度下降, 不断根据梯度修改我们的参数,经过多次轮次得到使得我们损失函数最小的时候参数,后续我们可以通过类似的道理,更新我们的参数
假设我们的损失函数是 y = x 1 2 + x 2 2 y = x1^2 + x2^2 y=x12+x22,我们的 x 1 x1 x1 和 x 2 x2 x2 取什么值的时候能够让 y y y 最小值
def fun(x):
return x[0]**2 + x[1]**2
这是我们的损失函数
def numerical_gradient(fun,x):
h = 1e-4
grad = np.zeros_like(x)
for i in range(len(x)):
tmp = x[i]
x[i] = tmp + h
fxh1 = fun(x)
x[i] = tmp - h
fxh2 = fun(x)
grad[i] = (fxh1 - fxh2)/(h*2)
x[i] = tmp
return grad
这是计算梯度
def gradient_descent(f,init_x,lr=0.001,step_num=100):
x = init_x
for i in range(step_num):
grad = numerical_gradient(f,x)
x -= lr * grad
return x
上面是通过梯度进行数据的更新,朝着梯度的反方向进行改进
下面我们进行测试
最后我们的答案无限接近
(
0
,
0
)
( 0 , 0 )
(0,0)