神经网络之计算图repeat节点

🌀 一、什么是 repeat 节点?

✅ 定义:

Repeat 节点 是指同一个变量/张量在计算图中被重复用作多个操作的输入,这些操作彼此独立运行,但都依赖这个变量的值。

换句话说,同一个值,被多次引用,每次引用都在构建不同的路径。


🎯 二、举个具体例子

考虑如下函数:

L=x⋅x+sin⁡(x) L = x \cdot x + \sin(x) L=x⋅x+sin(x)

分析:

  • (x⋅x)( x \cdot x )(x⋅x):使用了 ( x ) 两次
  • (sin⁡(x))( \sin(x) )(sin(x)):又使用了一次
  • 所以,( x ) 被重复使用了三次 → 它在计算图中就是一个 repeat 节点

🧠 三、repeat 节点 vs 分支节点

特性 repeat 节点 分支节点
含义 同一个变量重复用作输入 某个中间值的输出被多个操作引用
强调点 变量的引用次数 数据流的分叉
本质区别 在编程上是多次读取 在图结构上是输出分支
反向传播 所有使用路径的梯度都要合并 同上,使用 梯度累加

实际上,两者在梯度传播逻辑上是一样的。


🔁 四、反向传播中的作用

关键点:

  • 当一个变量被重复使用,它对最终损失 ( L ) 的梯度应当是所有使用路径的梯度之和

继续看上面的例子:

L=x2+sin⁡(x) L = x^2 + \sin(x) L=x2+sin(x)


步骤1:前向传播

  • (a=x⋅x)( a = x \cdot x )(a=x⋅x)
  • ( b = \\sin(x) )
  • (L=a+b)( L = a + b )(L=a+b)

步骤2:反向传播

我们想求(dLdx)( \frac{dL}{dx} )(dxdL)

dLdx=dadx+dbdx=2x+cos⁡(x) \frac{dL}{dx} = \frac{da}{dx} + \frac{db}{dx} = 2x + \cos(x) dxdL=dxda+dxdb=2x+cos(x)

这里 ( x ) 就是 repeat 节点:

  • 在 (x⋅x)( x \cdot x )(x⋅x) 中使用一次 → 导数是 ( 2x )
  • 在 (sin⁡(x))( \sin(x) )(sin(x)) 中使用一次 → 导数是 (cos⁡(x))( \cos(x) )(cos(x))
  • 最终对 ( x ) 的梯度是这两者之和

🧮 五、计算图结构图示

复制代码
     x
   / | \
x*x  |  sin(x)
  \  |   /
     + 
     |
     L

节点 x 被重复读取三次,它是一个 repeat 节点。


🧩 六、repeat 节点在编程中的体现

自动微分框架(如 PyTorch、TensorFlow)中:

  • 变量(如 x)被重复使用时,框架自动在后台构建一个"共享节点"
  • 在反向传播时,每条路径上计算出的梯度会自动累加
  • 用户不需要手动处理 repeat 节点,框架会合并所有路径上传回的梯度

PyTorch 示例代码

python 复制代码
import torch

x = torch.tensor(2.0, requires_grad=True)

# repeat: x 被用在两个地方
y = x * x + torch.sin(x)

y.backward()

print(x.grad)  # 输出 2x + cos(x) = 4 + cos(2)

✅ 输出:

复制代码
tensor(4.5839)

🧠 七、为什么理解 repeat 节点重要?

作用 说明
理解梯度累加机制 确保你知道为什么同一个变量会"收集"多个梯度
调试反向传播问题 在复杂图中追踪某个变量为何产生多个梯度源
构建自定义计算图 如果你用低层 API 实现反向传播,需要手动合并梯度
避免梯度误差 忽略 repeat 会导致梯度少算路径、模型无法收敛

✅ 八、总结

项目 描述
repeat 节点 一个变量/张量在计算图中被多次使用
在计算图中的表现 多条从变量发出的边
反向传播规则 所有路径上的梯度进行累加
框架支持 自动处理 repeat 节点的梯度合并
与分支节点关系 本质上相似,常常同时存在
相关推荐
NAGNIP6 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab7 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab7 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP11 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年11 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼11 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS11 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区13 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈13 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang13 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx