神经网络之计算图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 节点的梯度合并
与分支节点关系 本质上相似,常常同时存在
相关推荐
美酒没故事°1 天前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
简简单单做算法1 天前
基于GA遗传优化的Transformer-LSTM网络模型的时间序列预测算法matlab性能仿真
深度学习·matlab·lstm·transformer·时间序列预测·ga遗传优化·电池剩余寿命预测
AI攻城狮1 天前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
鸿乃江边鸟1 天前
Nanobot 从onboard启动命令来看个人助理Agent的实现
人工智能·ai
lpfasd1231 天前
基于Cloudflare生态的应用部署与开发全解
人工智能·agent·cloudflare
俞凡1 天前
DevOps 2.0:智能体如何接管故障修复和基础设施维护
人工智能
comedate1 天前
[OpenClaw] GLM 5 关于电影 - 人工智能 - 的思考
人工智能·电影评价
财迅通Ai1 天前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
liliangcsdn1 天前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索