前言:初步学习梯度下降, 不断根据梯度修改我们的参数,经过多次轮次得到使得我们损失函数最小的时候参数,后续我们可以通过类似的道理,更新我们的参数
假设我们的损失函数是 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-4grad = np.zeros_like(x)for i in range(len(x)):tmp = x[i]x[i] = tmp + hfxh1 = fun(x)x[i] = tmp - hfxh2 = fun(x)grad[i] = (fxh1 - fxh2)/(h*2)x[i] = tmpreturn grad
这是计算梯度
def gradient_descent(f,init_x,lr=0.001,step_num=100):x = init_xfor i in range(step_num):grad = numerical_gradient(f,x)x -= lr * gradreturn x
上面是通过梯度进行数据的更新,朝着梯度的反方向进行改进
下面我们进行测试
最后我们的答案无限接近 ( 0 , 0 ) ( 0 , 0 ) (0,0)