pytorch的自动微分学习笔记

自动微分的b站视频
学习的教程网址
问题解决方法的博客
符号微分
数值微分
自动微分(AD),包括前向自动微分和后向自动微分两种模式
在这里插入图片描述
在这里插入图片描述
上图的推导如下:
v ‾ 5 = ∂ y ∂ v 5 = ∂ y ∂ y = y ‾ \begin{aligned} \overline{v}_5 &=\frac{\partial{y}}{\partial{v_5}}=\frac{\partial{y}}{\partial{y}}=\overline{y} \end{aligned} v5=v5y=yy=y
根据链式法则
v ‾ 4 = ∂ y ∂ v 4 = ∂ y ∂ v 5 ∂ v 5 ∂ v 4 = v ‾ 5 ∂ v 5 ∂ v 4 \begin{aligned} \overline{v}_4 &=\frac{\partial{y}}{\partial{v_4}}=\frac{\partial{y}}{\partial{v_5}}\frac{\partial{v}_5}{\partial{v_4}}=\overline{v}_5\frac{\partial{v}_5}{\partial{v_4}} \end{aligned} v4=v4y=v5yv4v5=v5v4v5
因此反向传播(BP)可以用于更新网络参数(参考文章)[https://blog.csdn.net/bitcarmanlee/article/details/78819025]

grad在反向传播过程中是累加的(accumulated),这意味着每一次运行反向传播,梯度都会累加之前的梯度,所以一般在反向传播之前需把梯度清零。

我们不允许张量对张量求导,只允许标量对张量求导,求导结果是和自变量同形的张量。所以必要时我们要把张量通过将所有张量的元素加权求和的方式转换为标量,举个例子,假设y由自变量x计算而来,w是和y同形的张量,则y.backward(w)的含义是:先计算l = torch.sum(y * w),则l是个标量,然后求l对自变量x的导数

上图的计算过程用代码实现如下:

import torch
from torch.autograd import Variable
x1 = Variable(2 * torch.ones(1), requires_grad=True)
x2 = Variable(5 * torch.ones(1), requires_grad=True)

y = torch.log(x1) + x1*x2 - torch.sin(x2)

y.backward()

print(x1.grad)
print(x2.grad)
print(y)


计算结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值