GPT 的骨架其实只保留了 Transformer 的一部分——解码器,更准确地说,是解码器里带掩码的自注意力那部分。这个选择不是偷懒,而是和它的任务直接挂钩:一个 token 一个 token 地生成文本。
要看清这件事,得先把 Transformer 的三种结构摆在一起。它们共用两块积木:注意力层和前馈层,区别在于谁能看到谁。
- 仅编码器:一次性读完整段输入,为每个词生成一份内部摘要。BERT 是代表。分类、抽取细节这类任务适合它,因为每个 token 都能同时看到左右两边。
- 仅解码器:生成文本时,每个位置只能看到自己和它之前的 token,看不到后面的。这套设定叫自回归生成。给个句子开头,模型预测下一个词,再用这个词去预测再下一个,从左往右推进。
- 编码器-解码器:编码器先把输入压成摘要,解码器再基于这份摘要逐 token 生成输出。翻译、摘要这类输出直接依赖输入的任务离不开它,T5 和多数翻译模型都是这个结构。
问题来了:既然编码器能看全句,为什么 GPT 不用?因为在生成场景里,看到未来等于允许模型“作弊”——它可以直接从提示里抄后面的词。仅解码器的设计把这条路堵死,模型只能基于过去和现在去预测下一个词。
编码器-解码器在翻译这类需要输入输出紧密对应的任务上更合适。但如果是纯粹的语言生成,仅解码器更快、更省。
一个解码器块里发生了什么
GPT 把多个解码器块堆起来生成文本。每个块走三步:
- 掩码自注意力:每个 token 回看自己和之前的 token,绝不看后面的,这样只收集已有上下文,不让未来信息漏进来。
- 前馈网络:用一个小神经网络细化每个 token 的表示,各 token 在这里独立变换。
- 残差连接与层归一化:稳定网络、让训练更容易。
具体流向是:输入 token 先转成向量(嵌入),每个 token 过掩码自注意力,掩码保证没人能看到未来;结果经归一化平滑;向量再由前馈网络细化,再归一化一次,同时用一条捷径(残差连接)接回输入。若干解码器块之后,最顶层的输出用来预测下一个 token。堆得越多,模型在逐 token 生成时能识别的模式越复杂。
因果掩码怎么卡住“未来”
因果自注意力保证模型只关注到当前 token 为止的信息。每个位置能看到自己和左边的一切,右边的一概不行。
拿输入序列“I enjoy sushi”举例:预测“enjoy”时,模型能访问“I”和“enjoy”,但碰不到“sushi”;轮到“sushi”时,“I”“enjoy”“sushi”都在视野内。
这条限制靠注意力掩码实现。它是一个矩阵,把未来位置标成“禁区”,这些位置被压得极低,经过注意力运算后不贡献任何东西。于是每个 token 真的只看到自己和之前的 token。作为对照,编码器模型(如 BERT)用的标准自注意力允许每个 token 看到任意位置的其他 token。
从提示到输出,一步一个 token
以“The weather is”为提示,GPT 这类仅解码器模型这样产出文本:
- 把每个词转成内部向量(嵌入)。
- 过解码器块:每个 token 的掩码自注意力合并自身与左侧上下文的信息,前馈层进一步细化向量。
- 预测下一个 token:模型给词表里每个词分配概率,挑最可能的(或从靠前的候选里采样)。
- 把新 token 加进输入,重复上述过程,得到再下一个词。
这套逐 token 的流程就是自回归生成。模型始终回看已经写下的内容,绝不往前看。
用 PyTorch 搭一个因果掩码
下面是一段可运行的示例,用 PyTorch 的nn.MultiheadAttention为自注意力构建因果掩码:
- 设定序列长度为 4,嵌入维度为 8,构造形状为(序列长度、批大小、嵌入维度)的随机数据。
- torch.triu生成掩码:对角线以上的位置全部置为 True,表示这些未来位置要被屏蔽。
- 前向传播时传入该掩码,被屏蔽位置的注意力权重会被忽略。
打印出来的注意力权重会显示,每个 token 只对自身及左侧位置有权重,右侧一律为零,正好符合从左到右的因果模式。这个机制保证每个生成的 token 只依赖“到目前为止”的信息,从不依赖后面出现的内容——这正是 GPT 式自回归语言建模的要求。
想亲手验证,可以把掩码改成 None,让每个 token 关注所有其他 token,再跑一遍,对比两次的注意力权重差异。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.