前言:初步学习梯度下降, 不断根据梯度修改我们的参数,经过多次轮次得到使得我们损失函数最小的时候参数,后续我们可以通过类似的道理,更新我们的参数


假设我们的损失函数是 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)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部