Lecture 05 · 参考前缀、预测与共享参数的训练

S09 · 参考前缀、预测与共享参数的训练

完整生成已建立。训练需要同时回答两个问题:当前预测合法地看见什么,以及译文标签如何影响共享参数。

状态 b0

训练输入BOS I gave her a book yesterday .,标签I gave her a book yesterday . EOS;gave列预测her。

我 / 昨天 / 给了 / 她 / 一本 / 书Teacher forcing:已知参考前缀 → 下一个目标输入标签BOSIIgavegaveherheraabookbookyesterdayyesterday..EOSgave 这一列:可见 BOS I gave,预测 her。

状态 b1

独立输出头给定logits(0,ln2,ln3),目标book概率1/2,CE为ln2≈.6931。

我 / 昨天 / 给了 / 她 / 一本 / 书输出接口算例:前缀 I gave her a,目标 bookher01/6aln 21/3bookln 31/2候选logitsoftmaxL = −ln p(book) = ln 2 ≈ 0.6931

状态 b2

多个目标位置分别得到损失,沿词表、decoder与源表示回传,累积到共享参数。

我 / 昨天 / 给了 / 她 / 一本 / 书每个目标位置都提供一次监督IL1gaveL2herL3aL4bookL5共享参数 θ:累积梯度词表头 → Decoder → 源摘要/Encoder → embedding

状态 b3

训练用已知参考前缀;生成用已选词,不读取未知未来,直到EOS。

我 / 昨天 / 给了 / 她 / 一本 / 书训练:参考前缀生成:自己的选择Decoder + 源条件下一词未来目标未知;选出后接回,直到 EOS。

公式与算例详情

完整训练输入为BOS I gave her a book yesterday .,逐位置标签为I gave her a book yesterday . EOS。源句$x$在所有预测中可见。预测her的列只接收到BOS、I、gave形成的目标历史;参考her用于损失,不能送给同一次预测节点。teacher forcing使用正确已知前缀,并不授权读取当前标签或未来目标。

本页输出接口手算刻意另取前缀I gave her a,三候选her / a / book的logits设为$(0,\ln2,\ln3)$,不宣称由前页二维RNN真实运行所得。softmax为$(1/6,1/3,1/2)$;标签book的损失$L=-\ln(1/2)=\ln2\approx.6931$ nats,logit梯度$p-y=(1/6,1/3,-1/2)$。训练沿链式法则回到输出头、循环参数和embedding;共享参数汇总多个位置的影响。

对不同长度序列用padding时,只在有效目标token上汇总损失,EOS计入而PAD排除。完整NLL、PPL与训练/验证划分在主题正文和LAB01。teacher-forced NLL与自由生成整句精确匹配回答不同问题,不能把一次argmax命中或训练loss下降直接当作翻译忠实保证。

生成时没有正确未来译文可接,只能接回自己的选择;早先选择会影响后续前缀分布。这个区别为后面的搜索与错误诊断保留了具体问题,而不是预先认定所有错误都源于自馈。

继续学习

把预测、训练与评价摊在同一张样本表上 · LAB01:B · 同一预测目标,三个模型;训练一次,生成多次

状态在流动,梯度可以停在边界 · LAB01:C · 共享参数的梯度到底加了几次?

路径 A:分数进步了,为什么这一句仍然错 · LAB02:路径A · 分数进步了,为什么这一句仍然错

保留的完整推导:R10 · R11 · R12 · R13 · R16 · R17 · R26。