Torch 自动求导

Torch 自动求导

一、链式求导法则

1.1 原理

标量链式法则:

y = f ( u ) , u = g ( x ) , ∂ y ∂ x = ∂ y ∂ u ∂ u ∂ x y=f(u),u=g(x),\frac{\partial y}{\partial x} =\frac{\partial y}{\partial u}\frac{\partial u}{\partial x} y=f(u),u=g(x),xy=uyxu

扩展到向量:

∂ y ∂ x ⃗ 1 × n = ∂ y ∂ u ∂ u ∂ x ⃗ m × n ∂ y ∂ x ⃗ 1 × n = ∂ y ∂ u ⃗ 1 × m ∂ u ⃗ ∂ x ⃗ m × n ∂ y ⃗ ∂ x ⃗ m × n = ∂ y ⃗ ∂ u ⃗ m × k ∂ u ⃗ ∂ x ⃗ k × n \begin{array}{l} \frac{\partial y}{\partial \vec{x}}_{1\times n} =\frac{\partial y}{\partial u}\frac{\partial u}{\partial \vec{x}} _{m\times n} \\ \frac{\partial y}{\partial \vec{x}}_{1\times n} =\frac{\partial y}{\partial \vec{u}} _{1\times m}\frac{\partial \vec{u}}{\partial \vec{x}} _{m\times n} \\ \frac{\partial \vec{y}}{\partial \vec{x}}_{m\times n} =\frac{\partial \vec{y}}{\partial \vec{u}} _{m\times k}\frac{\partial \vec{u}}{\partial \vec{x}} _{k\times n} \\ \end{array} x y1×n=uyx um×nx y1×n=u y1×mx u m×n

### PyTorch 自动求导机制 #### 计算图构建与自动求导原理 在PyTorch中,`autograd`包提供了对张量上所有操作的自动求导支持[^1]。每当执行涉及可微分的操作时,这些操作会被动态地加入到计算图中,并且每个参与运算的Tensor都会更新其`grad_fn`属性来指向创建它的函数对象[^3]。 对于具体的实现方式,在定义模型参数时可以通过设置`requires_grad=True`使得该变量成为叶子节点并开启梯度追踪功能;当完成一次前向传播过程后,通过调用`.backward()`可以触发整个网络从输出端往回逐层计算各个权重对应的偏导数值即梯度信息[^4]。 需要注意的是,默认情况下只有标量可以直接调用`y.backward()`来进行反向传播以获取损失相对于各参数的变化率。如果是非标量,则需指定关于哪个维度求和作为最终的目标值用于传递给`backward()`方法内的`gradient`参数[^2]。 #### 使用示例 下面展示了一个简单的线性回归案例,其中包含了如何利用PyTorch内置工具完成数据准备、建立简单神经元连接关系以及训练循环内迭代优化的过程: ```python import torch # 定义输入特征x (batch_size=1, feature_num=5),目标标签y(batch_size=1,label_num=3) x = torch.tensor([1., 1., 1., 1., 1.]) y = torch.tensor([0., 0., 0.]) # 初始化权重w(5*3) 和 偏置项b(3), 同时声明它们需要跟踪梯度变化 w = torch.randn((5, 3), dtype=torch.float, requires_grad=True) b = torch.randn((3,), dtype=torch.float, requires_grad=True) # 执行前向传播得到预测结果z=x*w+b z = torch.matmul(x, w) + b # 应用二分类交叉熵损失函数评估当前状态下的误差程度 loss = torch.nn.functional.binary_cross_entropy_with_logits(z, y) # 反向传播计算梯度 loss.backward() print(w.grad) # 输出权重w的梯度 print(b.grad) # 输出偏置b的梯度 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海探幽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值