Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

13.3 编码器—解码器模型详解

MT 的标准架构是编码器—解码器 Transformer。图 13.5 从高层展示了其直观结构。该架构由两个 Transformer 构成:编码器与第 7 章的基本 Transformer 相同;解码器则增加了称为交叉注意力层(cross-attention layer)的特殊新层。编码器接收源语言输入词元 X=x1,,xn\mathbf X=\mathbf x_1,\ldots,\mathbf x_n,通过编码器块堆栈将其映射成输出表示 Henc=h1,,hn\mathbf H^{enc}=\mathbf h_1,\ldots,\mathbf h_n

解码器本质上是一个关注编码器表示、逐个生成目标词的条件语言模型。在每个时间步,它以源句和此前生成的目标语言词为条件生成一个词元。解码可以采用第 7 章讨论的贪心、温度采样或核采样等任意方法,但 MT 最常用的是 13.4 节将介绍的束搜索。

图 13.5 用于机器翻译的编码器—解码器 Transformer 架构。编码器使用第 7 章介绍的 Transformer 块;解码器使用更强的块,其中额外的交叉注意力层可以关注全部编码器词元。

不过,该架构的组件与此前所见 Transformer 块略有不同。为了关注源语言,解码器中的 Transformer 块多了一个交叉注意力层。回顾第 7 章,Transformer 块由自注意力层及前置层归一化组成,随后是另一个层归一化和前馈层。解码器 Transformer 块则多出一个使用特殊注意力的层——交叉注意力,有时也称编码器—解码器注意力或源注意力。它与普通 Transformer 块中的多头注意力形式相同;区别在于,查询仍来自解码器前一层,而键和值来自编码器输出。

标准多头注意力中,每个注意力层的输入均为 x\mathbf{x};交叉注意力的输入则包括编码器最终输出 Henc=h1,,hn\mathbf H^{enc}=\mathbf h_1,\ldots,\mathbf h_n,其形状为 [n×d][n\times d],每行表示一个输入词元。为了把来自编码器的键和值与解码器前一层的查询连接起来,将编码器输出 Henc\mathbf H^{enc} 分别乘以交叉注意力层的键权重 WK\mathbf W^K 与值权重 WV\mathbf W^V。查询来自解码器前一层输出 Hdec[1]\mathbf H^{dec[\ell-1]},再乘以交叉注意力层的查询权重 WQ\mathbf W^Q

Q=Hdec[1]WQ;K=HencWK;V=HencWV(13.11)\mathbf { Q } = \mathbf { H } ^ { \mathrm { dec } [ \ell - 1 ] } \mathbf { W } ^ { Q }; \quad \mathbf { K } = \mathbf { H } ^ { \mathrm { enc } } \mathbf { W } ^ { K }; \quad \mathbf { V } = \mathbf { H } ^ { \mathrm { enc } } \mathbf { W } ^ { V }\tag{13.11}
CrossAttention(Q,K,V)=softmax(QKTdk)V(13.12)\operatorname { CrossAttention } (\mathbf { Q }, \mathbf { K }, \mathbf { V }) = \operatorname { softmax } \left(\frac {\mathbf { Q } \mathbf { K } ^ { T }}{\sqrt {d _ { k }}}\right) \mathbf { V }\tag{13.12}

因此,解码器可关注投影到编码器全部最终输出表示中的每个源语言词。每个解码器块中的另一个注意力层——多头注意力层——与第 7 章相同,采用因果(从左到右)注意力。编码器中的多头注意力则可前瞻查看完整源语言文本,因此不使用掩码。

图 13.6 编码器与解码器的 Transformer 块,以残差流视角展示。编码器最终输出 Henc=h1,,hn\mathbf H^{\mathrm{enc}}=\mathbf h_1,\ldots,\mathbf h_n 是解码器使用的上下文。解码器是标准 Transformer,但多了一个交叉注意力层;该层接收编码器输出 Henc\mathbf H^{\mathrm{enc}},用它形成 K\mathbf KV\mathbf V 输入。

训练编码器—解码器模型时,我们向网络提供源文本,再从分隔词元开始,使用交叉熵损失以自回归方式训练它预测下一词元。回顾语言建模中的交叉熵损失,它由模型赋给正确下一词的概率决定。因此,时间 t 的 CE 损失是模型赋给训练序列中下一词的概率之负对数:

LCE(y^t,yt)=logy^t[wt+1](13.13)L _ {\mathrm{CE}} (\hat {\mathbf {y}} _ {t}, \mathbf {y} _ {t}) = - \log \hat {\mathbf {y}} _ {t} [ w _ {t + 1} ]\tag{13.13}

在这种情况下,解码器使用教师强制(teacher forcing)。也就是说,在解码的每个时间步,强制系统把训练数据中的金标准目标词元作为下一个输入 xt+1x_{t+1},而不是让它依赖可能有误的解码器输出 y^t\hat y_t