01|计算图、反向传播与训练循环

研究定位

计算图就是一张“变量之间如何计算”的账本;前向传播计算结果,反向传播沿着账本用链式法则计算梯度。

计算图

数据流与机制

设两层模型:

z1 = w1x + b1,  h = f(z1),  ŷ = w2h + b2

L = (ŷ − y)2

前向是 x → z₁ → h → ŷ → L。反向则从损失开始:

$$
\frac{\partial L}{\partial w_1}
=\frac{\partial L}{\partial \hat y}
\frac{\partial \hat y}{\partial h}
\frac{\partial h}{\partial z_1}
\frac{\partial z_1}{\partial w_1}
$$

PyTorch 中完整训练步骤是:

optimizer.zero_grad()
logits = model(x)
loss = criterion(logits, y)
loss.backward()
optimizer.step()
  • backward() 计算梯度,不更新参数。
  • step() 才根据梯度更新参数。
  • 梯度默认累积,所以普通训练每轮先清零。
  • CrossEntropyLoss 通常接收原始 logits,不先做 Softmax。
  • model.eval() 只改变部分层行为;推理还应使用 no_grad() 或 inference_mode()。

资料中的 FigureCanvasInterAgg 报错属于 IDE 绘图后端与 Matplotlib 版本契约问题,不能直接归因于模型。先验证脚本是否可以 savefig(),再检查 IDE、插件和后端版本。

研究小结

数据 → 模型 → logits → loss → backward → gradient → step 是后续所有深度学习模型共同的训练骨架。模型再复杂,也没有跳出这条主线。

研究延伸

计算图不仅是训练步骤说明,也是分析深度学习系统的统一工具。后续可以补充三类实验:梯度消失/爆炸的数值观察、不同优化器对同一 loss surface 的路径差异、no_grad() 与 inference_mode() 对显存和速度的影响。

读论文时也可以沿着计算图追问:哪些张量需要保存给反向传播?哪些操作阻断梯度?显存峰值来自激活、参数、梯度还是优化器状态?

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇