【LLM】从零开始学大语言模型 | 6 | Encoder-Decoder和掩码
Encoder-Decoder 架构与 Mask 机制:从翻译模型到自回归生成 在理解了 Attention、Multi-Head Attention、FFN 以及 Transformer Block 之后,我们已经拥有了一个可以反复堆叠的基础模块。下一步要回答的问题是:这些模块如何组成一个完整的模型?在 2017 年的论文《Attention Is All You Need》中,Transformer 被设计成一个 Encoder-Decoder 架构,最初主要用于机器翻译这样的序列到序列任务。也就是说,输入是一段序列,输出也是一段序列,而且输入和输出长度可以不同。 这篇文章将从整体架构、Decoder 的特殊结构、Mask 机制、训练时的 Loss 与反向传播,以及多层 Decoder 中 Cross-Attention 的 KV 来源几个方面,把 Encoder-Decoder Transformer 的工作方式完整梳理一遍。 一、从单个 Transformer Block 到 Encoder-Decoder 架构 1. Encoder 与 Decoder 的分工 可以把 Encoder-Decoder 结构理解成一个翻译官的工作台。 左侧是 Encoder,也就是编码器。它的任务是深度阅读源语言。例如输入一句中文:“我 / 爱 / AI”,Encoder 会通过多层网络逐步理解这些词之间的关系:谁是主语,谁是谓语,哪个词修饰哪个词,整句话的整体语义是什么。经过若干层 Encoder Block 之后,模型得到的不是一串孤立的词向量,而是一组包含上下文信息的特征向量。可以把它看作 Encoder 对源语言句子进行抽象压缩后得到的“语义表示”。 右侧是 Decoder,也就是解码器。它的任务是逐字生成目标语言。例如它要生成英文:“I / love / AI”。Decoder 不能像 Encoder 那样一次性随意看完整句目标语言的全部内容,因为在真正生成文本时,模型只能依赖已经生成的内容。Decoder 需要一边参考 Encoder 对源语言的理解,一边根据当前已经生成的词预测下一个词。 ...