A4 · REPRESENTATIONS & SEQUENCES

从可视化到序列记忆

审计 autograd、style loss、RNN/LSTM/attention,并把历史实现连到 Transformer。

Autograd reasoningSequence stateAttention transfer

Review Lab,不是作业答案。阅读现有实现,先预测,再运行小实验并解释证据;原始仓库快照是代码事实来源。

阶段 01

自动微分的边界

辨认哪些 tensor 需要 gradient,哪些只是固定输入或 target。

为什么需要它

错误的 requires_grad 边界会浪费显存或切断优化链。

开始前应该已经会回答

  • 能解释 leaf tensor
  • 知道 zero_grad 与 detach 不同

输入、输出与契约

输入
image/features/targets
输出
scalar objective + selected gradients
不变量
  • 只优化目标对象
  • loss 由可微路径连接到目标
不成立的假设
  • 对 target 累积无用 gradient
  • 在中途 detach 优化对象

用最小例子检查

用 x² 的两步优化观察 gradient accumulation,然后显式清零。

如果你看到……

第二步 gradient 异常变大

优先检查:是否清零

loss 变化但目标不更新

优先检查:optimizer 参数与 leaf

预测 → 实验 → 证据

先预测
若只优化输入图像,模型权重应固定而图像有 gradient。
做实验
记录一次 backward 后各类 tensor 的 grad 是否存在。
留证据
  • requires_grad
  • is_leaf
  • grad norm

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先列优化对象

提示 2

检查 optimizer param list

提示 3

沿 grad_fn 回溯

闭卷检查 · 自动微分的边界

  • gradient 边界正确
  • 无意外参数更新
  • 能解释累积
阶段 02

循环状态

沿时间追 hidden state 与 shared weights。

为什么需要它

RNN 的参数共享跨时间,但 activation 和梯度路径随 T 增长。

开始前应该已经会回答

  • 会手推两步 recurrence
  • 能区分 h_t activation 与 Wh parameter

输入、输出与契约

输入
x [N,T,D], h0 [N,H]
输出
h [N,T,H]
不变量
  • 同一 Wx/Wh 每步共享
  • 第 t 状态只依赖过去
不成立的假设
  • 为每个时间步创建新参数
  • 把 time 与 batch 轴互换

用最小例子检查

N=1,T=2,D=H=1,给定标量权重手算 h1,h2。

如果你看到……

不同 T 参数量改变

优先检查:是否错误创建 per-step weight

未来 token 影响过去

优先检查:时间方向或 mask

预测 → 实验 → 证据

先预测
T 增大参数量不变,但串行路径和 memory 增长。
做实验
比较 T=8/16 的参数量、activation 数和 latency。
留证据
  • 参数量
  • shape
  • 运行时间

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先展开两步

提示 2

打印每步 h

提示 3

确认 weight identity

闭卷检查 · 循环状态

  • toy recurrence 对
  • 参数跨步共享
  • 能解释串行瓶颈
阶段 03

LSTM 与注意力

区分门控记忆路径与基于内容的动态读取。

为什么需要它

LSTM 改善梯度通路,attention 改变信息访问方式。

开始前应该已经会回答

  • 能解释 sigmoid gate 范围
  • 会从 score 得到 weighted sum

输入、输出与契约

输入
sequence states + query
输出
updated state or weighted context
不变量
  • attention weights 在 key 轴归一化
  • LSTM cell/hidden 身份不混淆
不成立的假设
  • 把 attention 当固定平均
  • 认为 LSTM 消除全部长程问题

用最小例子检查

给三个 scalar values 和权重 [0.2,0.3,0.5] 手算 context,再改变 query 解释权重变化。

如果你看到……

权重和不为 1

优先检查:softmax axis

所有 query 得到同一 context

优先检查:score 是否依赖 query

预测 → 实验 → 证据

先预测
attention 可并行比较位置;RNN/LSTM 必须沿 recurrence 顺序产生 state。
做实验
固定表示,比较 recurrent update 与 attention read 的依赖图和 latency 趋势。
留证据
  • 依赖图
  • 权重分布
  • T 增长趋势

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先区分 state update 与 memory read

提示 2

检查 softmax 轴

提示 3

用两个不同 query

闭卷检查 · LSTM 与注意力

  • context 手算正确
  • 能解释两种机制边界
  • 连接到 Transformer QKV
阶段 04

序列模型的证据

用 teacher forcing、mask 与 generation trace 解释序列模型。

为什么需要它

训练 loss 正确不代表自回归生成路径正确。

开始前应该已经会回答

  • 会解释 teacher forcing
  • 能画 causal dependency

输入、输出与契约

输入
tokens/mask/targets
输出
loss + generated sequence
不变量
  • target shift 一致
  • 生成时不能读取未来 token
不成立的假设
  • 训练和生成使用不同 token convention
  • 用完整 target 泄漏未来

用最小例子检查

构造长度 3 序列,逐位置写 input、target 与允许 attention 的位置。

如果你看到……

训练极好生成崩坏

优先检查:shift/mask/解码路径

第一个 token loss 异常

优先检查:BOS 与 label 对齐

预测 → 实验 → 证据

先预测
正确 causal mask 下,改变未来 token 不应影响过去 logits。
做实验
复制输入只改最后 token,比较前面位置 logits。
留证据
  • mask
  • logit max diff
  • token convention

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先画三角 mask

提示 2

逐位置对齐 labels

提示 3

检查 generation 第一步

闭卷检查 · 序列模型的证据

  • future-invariance 通过
  • shift 可解释
  • 训练与推理路径一致

复盘与迁移