pytorch 梯度算法介绍

梯度下降算法推导

假设有一个序列xn, 对应目标是yn, 通过模型预测得到的结果是\hat{y_{n}}, 则MSE损失函数有

cost= \frac{1}{N}\sum_{n=1}^{N}(\hat{y_{n}} - y_{n})^{2}

优化问题变成求min(loss)

对于求min(loss), 本质是要梯度的负方向,所以更新梯度的问题变成

w = w - \alpha * \frac{\partial cost}{\partial w} 

其中,a是学习率。

 python的实现代码:

 w = 1.0

def forward(x):
    return  x*w

# 定义MSE损失函数
def cost(xs, ys):
    cost = 0
    for x,y in zip(xs, ys):
        y_pred = forward(x)
        cost += (y_pred - y) **2

    return cost / len(xs)


# 定义梯度下降算法
def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2*x*(x*w -y)
    return grad / len(xs)

随机梯度下降

\hat{y_{n}}很长的时候,计算整个梯度需要耗时比较多,所以从N个cost中随机选择一个cost作为整体的优化,这也是随机梯度的由来。

梯度算法和随机梯度算法的比较:

  • 梯度算法并行度好,时间短,但可能出现不收敛问题
  • 随机梯度算法的下一个梯度,会以来上一个梯度,串行执行,但是收敛性好;
  • 折中:NN中一般采用batch方式。

梯度反向传播算法

举例一个2 layer的网络

链式求导法则:

\hat{y} = W_{2}W_{1}X + W_{2}b_{1} + b_{2} = WX+b

 链式求导计算图:

参考:05.用PyTorch实现线性回归_哔哩哔哩_bilibili

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值