R16.md · 可读全文

这里保留原文的中文、公式标记、代码和链接。可直接交给 Agent 读取,也可选取下方原文复制。此入口返回 HTML;原始 .md / .py 文件仍保留,完整候选包同时包含 UTF-8 原件。

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

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

<span id="r16-b0"></span>

## 状态 b0

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

<span id="r16-b1"></span>

## 状态 b1

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

<span id="r16-b2"></span>

## 状态 b2

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

## 公式与算例详情

本页补回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怎样训练](sources.html#M10)、[M11 训练与生成如何不同](sources.html#M11)。页码均按PDF物理页计。

### 继续学习

[本页自学核对](lecture.html#read-R16):将四个监督连到同一 W,区分激活和梯度贡献;整理成一次前向/反向路径图。

若不知道未来loss怎样影响早先调用,可进入[《状态在流动,梯度可以停在边界》](https://codingai-lec05.pages.dev/course/knowledge/recurrent-state-and-credit.html);动手时打开[LAB01](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/Fall-26-Lecture-05-841ec8e7-e352-4840-b628-d3742b03d6d0/notebook/LAB-01-ec403d28cc2c400ba661cd270588669f?utm_content=ec403d28cc2c400ba661cd270588669f&utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_term=get_notebook)的“C · 共享参数的梯度到底加了几次?”:核对手写梯度与中心差分,并区分跨段继续传状态与停止梯度两项操作。 状态模型训练另见[实验路线B](experiments.html#experiment-B)。