news 2026/8/25 12:49:50

torch.autograd.grad的使用及内部原理理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
torch.autograd.grad的使用及内部原理理解

1.使用方法

torch.autograd.grad如何使用

torch.autograd.grad(outputs,# 需要求导的目目标张量(如 Q 值),必须是标量或向量。inputs,# 需要对其求导的源张量(如动作 a),可以是任意形状grad_outputs=None,# 关键!当 outputs 是向量时,需要提供外部梯度(链式法则的初始值)retain_graph=None,# 是否保留计算图以供后续反向传播。默认 False,调用后释放图create_graph=False# 是否构建高阶导数图(用于二阶梯度)。默认 False)

其中,如果是标量(如总损失),则grad_outputs可省略(默认为 1.0);如果是向量(如多个 Q 值组成的张量),则必须通过grad_outputs指定每个输出分量的权重系数,以完成向量-雅可比乘积(VJP)计算。

2. 通过例子理解

假如Y=f(X)Y = f(X)Y=f(X)
形状:Y[N,K]Y[N, K]Y[N,K]X[N,M]X[N, M]X[N,M]

torch.autograd.grad(outputs=Y,inputs=X,grad_outputs=torch.ones_like(Y))[0]

在使用torch.autograd.grad函数求梯度时,我的理解:

函数里填:
outputs=Y,
inputs=X,
grad_outputs=torch.ones_like(Y)

从函数外部的理解

其中grad_outputs=torch.ones_like(Y)代表对Y中每个元素求偏导后的加权。
最后得到的结果是:Y中每行,对X对应的行的元素,求偏导,再根据grad_outputs求加权和,得到的矩阵,形状是[N,M][N, M][N,M].

从函数内部的理解


函数里面的具体流程:

  1. grad_outputs代表对Y中每个元素的加权。
  2. 然后把Y每行的每个元素,对X对应的行的分量分别求偏导(Y和X全部展开,对应求导),得到一个形状是[N∗K,N∗M][N*K, N*M][NK,NM]雅可比矩阵 J(块对角矩阵)。
  3. grad_outputs=torch.ones_like(Y),和输出形状一样[N,K][N, K][N,K],经过内部展开成[N∗K,1][N*K, 1][NK,1],也就是vvv,代表对Y中所有元素对X求偏导之后的加权系数,实际上计算vT⋅Jv^{T} · JvTJ,得到的是形状为[1,N∗M][1, N*M][1,NM]雅可比向量积(JVP),再由内部 reshape 变换成和输入XXX一样的形状[N,M][N, M][N,M]



总结

经过这个函数,XXXYYY的梯度并没有改变,而是输出了一个YYYXXX求导的矩阵,是一个“无副作用的梯度查询器”绝不污染任何变量的.grad属性

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 12:48:01

评测prompt效果

可以把评测拆成三件事: 是否遵守提示词要求是否忠实于原始文档周报本身是否完整、清晰、可用 不要只用“整体看起来不错”这种单一主观评分。更可靠的方法是:规则检测 LLM 裁判 人工抽检。 一、先把提示词转成可检查项 假设提示词是:根据文…

作者头像 李华
网站建设 2026/8/25 12:46:21

二元Logit回归结果解读:系数估计、OR值与ROC曲线

二元Logit回归分析结果解读一、方法概述二元Logit回归(Binary Logistic Regression)是研究二分类因变量与一个或多个解释变量之间关系的经典统计方法。其核心思想是通过Logit变换将事件发生概率映射到实数域,建立线性预测模型:ln(…

作者头像 李华
网站建设 2026/8/25 12:45:39

孩子驼背有什么办法矫正

前两天在道馆接待了一位焦虑的妈妈,她带着12岁的儿子来咨询。孩子写作业时总是弓着背,肩膀内扣,脖子前伸,看起来特别没精神。这位妈妈说:“我在网上买了好几种矫正带,孩子戴着不舒服,效果也不明…

作者头像 李华
网站建设 2026/8/25 12:39:04

AI Agent协同开发实战:Claude Code与Codex的本地化集成与工作流设计

最近在折腾本地开发环境时,我遇到了一个挺有意思的场景:一边开着 Claude Code 在 VSCode 里写代码,另一边又需要调用 Codex 的 API 来处理一些特定的任务。结果就是,我得在两个工具、两个界面之间来回切换,复制粘贴&am…

作者头像 李华
网站建设 2026/8/25 12:38:34

Claude Code运行逻辑拆解:从API调用到批量代码分析实战

这次我们来看一个关于Claude Code运行逻辑的技术拆解。Claude Code作为Anthropic推出的代码生成与理解模型,其核心价值在于能够深入解析代码库、理解复杂逻辑并生成高质量的代码。对于开发者而言,理解其内部运行机制,不仅能更好地利用其能力&…

作者头像 李华
网站建设 2026/8/25 12:35:54

Android 自动化开发方案(基于本地接口文档)

Android 自动化开发方案(基于本地接口文档) 本方案适用于:使用 Android Studio CC GUI 插件 android-context-builder,通过本地 Markdown 接口文档实现从设计到代码的自动化开发流程。 📋 目录 环境准备项目初始化配…

作者头像 李华