Lecture 05 · 每个预测位置,都向共享参数贡献梯度

R16 · 每个预测位置,都向共享参数贡献梯度

递归状态已经可以运行,但同一参数在多个位置被使用。现在把下一词损失接回展开图,解释这些使用怎样共同影响一次参数更新。

状态 b0

补回BOS后,输入与下一词目标重新对齐。状态使用符号标记,当前图不续接前页二维数值。

一次前向,多个监督目标;一次反向,汇总共享参数梯度输入目标BOSh1我我h2昨天昨天h3给了给了h4她

状态 b1

每个位置新增分布与局部loss,多个loss汇入总目标;正确下一词仍不进入同列输入。

一次前向,多个监督目标;一次反向,汇总共享参数梯度输入目标BOSh1我p1ℓ1我h2昨天p2ℓ2昨天h3给了p3ℓ3给了h4她p4ℓ4L = −Σ log pₜ[正确下一词]

状态 b2

反向路径沿时间展开回传,并在共享θ处汇总各次使用的贡献。状态各不相同,参数却共同更新。

一次前向,多个监督目标;一次反向,汇总共享参数梯度输入目标BOSh1我p1ℓ1我h2昨天p2ℓ2昨天h3给了p3ℓ3给了h4她p4ℓ4L = −Σ log pₜ[正确下一词]共享参数 θBPTT:沿时间回传;每次使用的贡献相加。

公式与算例详情

本页补回BOS后改用符号状态;没有指定BOS向量,因此不能续用R14–R15省略BOS的数值。

对语言模型,训练输入为 BOS、我、昨天、给了,监督目标为我、昨天、给了、她。读入前一个 token 后预测下一个,避免把当前答案直接输入同一个预测节点。写作

$$a_t=W_hh_{t-1}+W_xe_t+b,\quad h_t=\tanh(a_t),\quad z_t=W_oh_t+b_o,$$ $$p_t=\operatorname{softmax}(z_t),\qquad L=\sum_{t=1}^{T}-\log p_t[y_t].$$

$y_t$ 是这一列的正确下一 token。若使用平均损失,则最后除以有效目标数 $T$,padding 不应计入。之前介绍的困惑度同样适用:在相同分词和测试集口径下 $\mathrm{PPL}=\exp(L/T)$;更换递推骨架不会更换评价定义。

令 $\delta_t=\partial L/\partial a_t$,则完整 BPTT 的一条递推是

$$\delta_t=\left(W_o^\top(p_t-\operatorname{onehot}(y_t))+W_h^\top\delta_{t+1}\right)\odot(1-h_t^2),\quad\delta_{T+1}=0,$$ $$\frac{\partial L}{\partial W_h}=\sum_t\delta_t h_{t-1}^\top,\qquad \frac{\partial L}{\partial W_x}=\sum_t\delta_t e_t^\top.$$

当前位置既接收本地输出的梯度,也接收未来状态传来的梯度。共享参数的梯度是各次使用贡献的总和,不是任选某一时刻的梯度。embedding 表相应 token 的行也收到梯度;同一个 token 多次出现时贡献累加。反向传播后,优化器才更新参数。

截断 BPTT 可以让状态数值继续跨段传递,却在段边界停止梯度追溯;因此它改变可用于信用分配的路径。验证一个小实现时,可用双精度中心差分 $[L(\theta+\epsilon)-L(\theta-\epsilon)]/(2\epsilon)$ 检查少量参数,避免在裁剪等非光滑操作之后做梯度检查。参考:N-RNN PDF p26–35,尤其 p35。

原课页采用记录:M10 RNN怎样训练、M11 训练与生成如何不同。页码均按PDF物理页计。

继续学习

本页自学核对:将四个监督连到同一 W,区分激活和梯度贡献;整理成一次前向/反向路径图。

若不知道未来loss怎样影响早先调用,可进入《状态在流动,梯度可以停在边界》;动手时打开LAB01的“C · 共享参数的梯度到底加了几次?”:核对手写梯度与中心差分,并区分跨段继续传状态与停止梯度两项操作。 状态模型训练另见实验路线B。