生成类训练任务以及大模型
生成类训练任务以及大模型
前面我们以及学到了transformer模型的Encoder部分,其功能就是从一组token中提取特征。
而生成模型,使用的是Decoder。
生成任务的训练:自回归

Encoder(编码器):把输入的语音波形 “機器學習”,压缩成一个上下文向量 r,代表这段语音的语义信息。
Decoder(解码器):负责从 r 和 “已经生成的文字” 里,一步步吐出下一个字。
START token:一个特殊的 “开始信号”,告诉模型:“现在要开始生成了,前面还没有任何字”。
从 START 开始,每一步都用 “已经生成的文字 + 上下文信息” 预测下一个字,把新字加回输入,再预测下一个,直到输出结束符。
但是这会带来一个问题,如果过程中有一些字预测错误,那么后面的预测就会受到影响,容易”一步错,步步错“。此外,这种预测只能串行,效率极低。
如果将训练数据的标签直接作为Decoder的输入呢(即:”[START]+Label“)。显然准确率是百分百,但是这样通过”作弊“训练出的模型质量很差。
因此不能直接让模型一次性看到Label的完整信息,需要Mask掉一部分。
self-attention到Masked self-attention

在 Transformer 里,self-attention 是让每个词(token)都能 “看到” 句子里的其他词,计算它们之间的关联程度,从而更好地理解语义。
比如在 “機器學習” 里:
“機” 会关注 “器”,因为它们是 “機器” 这个词;
“學” 会关注 “習”,因为它们是 “學習” 这个词;
同时,每个词也会关注整个句子的上下文。
但在 Decoder 生成任务 里,这个 “全看” 的特性会出大问题:如果模型在预测 “機” 的时候,已经能看到后面的 “器”“學”“習”,那它就不是在 “预测”,而是在 “抄答案” 了。
为了让 Decoder “老实”地自回归,就需要 Masked self-attention:它在 self-attention 的基础上,加了一个 下三角掩码矩阵(lower triangular mask)。
这个掩码会把 “未来位置” 的注意力分数直接设为 -∞,这样经过 softmax 之后,这些位置的权重就变成了 0。
换句话说:模型在计算注意力时,只能看到当前位置及左边的所有词,右边的词被完全遮住,看不见。
我们继续用 “機器學習” 的例子直观演示:
假设我们正在生成到第二步,输入是 START 機,现在要预测下一个词 “器”:
1.注意力分数矩阵(未掩码前):
2.加上掩码后(- 表示被遮住):
当计算 “機” 这个词的注意力时,它只能看到 START 和自己,完全看不到 “器”“學”“習”。
这样就保证了:模型在预测 “器” 的时候,只能依赖已经生成的 START 和 “機”,而不能作弊偷看后面的词。
为什么Masked self-attention对自回归这么重要?
如果没有 Masked self-attention,Decoder 就会变成 “全知全能”,在生成第一个词的时候,就已经知道整句话是什么了,生成过程就不是 “预测”,而是 “复读”,完全失去了意义。
有了它之后,每一步的预测都严格依赖于已经生成的历史内容,完美符合自回归 “用前文推后文” 的规则,这就是为什么 Transformer Decoder 能可靠地完成翻译、写诗、对话等生成任务的核心原因。
如何停下来?
如果没有任何限制,自回归模型会像图里写的 “Never stop!” 一样,一直生成下去(比如 “機→器→學→習→惯→…”)。
在实际应用中,我们通常用以下几种方式来决定生成的长度:
1.结束符(EOS token):最核心的终止信号。
模型在训练时,会学习到一个特殊的结束标记(通常叫 或 ),它代表 “这句话已经说完了”。
在生成过程中,一旦模型输出了这个 token,我们就立即停止生成。
2.最大长度限制(Max Length)
预先设置一个最大生成 token 数(比如 64、128 或 512)。当模型生成的 token 数量达到这个上限时,无论它有没有输出 ,都会被强制停止。
防止模型因为某些原因(比如训练不足、输入模糊)陷入无限循环,生成无穷无尽的内容。
3.束搜索(Beam Search)终止(放到下面讲解)
生成任务的推断(对测试集进行预测,就是“测试”)
为啥要单独拿出来讲解:因为生成类任务的Testing过程比较特殊。
生成任务的 “训练” 和 “测试” 为什么不一样?
先看 “平常任务”(比如图像分类):
训练时:输入图片,模型输出类别,和真实标签对比算损失。
测试时:输入新图片,模型直接输出类别。
训练和测试的流程完全一样,就像 “学开车” 和 “开车上路”,操作逻辑没区别。
但生成任务(比如翻译、写诗、语音转文字)完全不同:
生成任务的训练阶段像是一场开卷考试,它有 “标准答案”(真实标签),比如要生成 “機器學習”,Decoder 的输入就是完整的 START 機 器 學 習。
虽然有 Masked self-attention(只能看左边的词),但所有词都是已知的,所以可以一次性并行计算每个位置的输出,然后和真实标签对比算损失。
就像老师给你范文,你照着抄,虽然不能提前看后面的句子,但所有字都摆在眼前,写得又快又准。
而测试阶段则是闭卷考试没有标准答案了,只能从 START 开始,一个字一个字生成:
没有标准答案了,只能从 START 开始,一个字一个字生成:
输入 START → 生成第一个字 “我”
输入 START 我 → 生成第二个字 “爱”
输入 START 我 爱 → 生成第三个字“你”
直到输出 停止
每一步的输出,都会作为下一步的输入,是严格串行的,这就是自回归。
那么,在测试阶段,我们怎么选下一个字?
1.假如使用贪心搜索:只看眼前。每一步只选当前概率最高的那个字,比如生成 “機器學習” 时:
第一步:START → 选 “機”(概率 0.8)
第二步:START 機 → 选 “器”(概率 0.7)
第三步:START 機 器 → 选 “學”(概率 0.6)
只看一步最优,可能错过整体更优的句子。比如 “機” 之后 “場” 的概率略高,贪心会选 “機場”,后面就跑偏成 “機場學習”,完全不通顺。
2.Beam Search:多条路并行
Beam Search 不赌 “一步到位”,而是每一步保留前 k 个最有希望的 “句子片段”(k 叫 “束宽”,比如 k=2):
1.第一步:从 START 出发,保留前 2 个候选:[“機”(0.8), “習”(0.1)]
2.第二步:分别扩展这两个候选:
扩展 “機”:得到 [“機器”(0.7), “機場”(0.2)]
扩展 “習”:得到 [“習慣”(0.05), “習題”(0.03)]
从 4 个新片段里,再挑前 2 个最可能的:[“機器”(0.7), “機場”(0.2)]
3.第三步:再分别扩展这两个片段,再挑前 2 个……
当所有候选片段都输出了 (结束标记),说明所有有希望的句子都说完了;或者达到最大长度限制,强制停止。
从所有完成的候选里,选出整体概率最高的句子,比如 “機器學習”。
为啥 Beam Search 更好?
贪心是 “走一步看一步”,容易跑偏;Beam Search 是 “多条路并行探索”,最后选整体最顺的句子,生成的内容更流畅、更符合语义。
Cross-attention

Decoder 里有两层关键的注意力:
第一个是我们上面已经介绍过的Masked Multi-Head Attention即:Decoder 自己的词之间的注意力,保证 “不偷看未来”,实现自回归。
第二个就是Cross-attention,Decoder 和 Encoder 之间的注意力,让 Decoder 能 “参考” 输入的上下文。
Decoder 在生成每个词的时候,不能凭空瞎编,必须 “回头看” Encoder 处理过的输入信息(比如语音波形、源语言句子),这样生成的词才和输入相关。Cross-attention 就是这个 “回头看” 的机制。
Cross-attention的QKV输入从哪来?
Query(Q):来自 Decoder 上一层的输出,比如生成第一个词时是 START 的表示,生成第二个词时是 “機” 的表示。
Key(K)和 Value(V):来自 Encoder 的最终输出,也就是原始token被处理后得到的所有特征的表示(a¹, a², a³, a⁴),再映射成 K 和 V。
以生成第一个词 “機” 为例:
第一步:Decoder 先通过 Masked Self-attention 处理输入 START,得到 Query q(对应 “機” 的查询)。
第二步:q 和 Encoder 所有的 Key(k¹, k², k³, k⁴)计算相似度,得到注意力分数 α₁, α₂, α₃, α₄。
这些分数代表 “START 对语句中每个字的关注程度”。
第三步:对分数做 softmax,得到权重 α’₁, α’₂, α’₃, α’₄(注意:这里没有掩码,因为 Encoder 的所有词都是已知的,Decoder 可以自由关注任何位置)。
第四步:用权重 α’ 对 Encoder 的 Value(v¹, v², v³, v⁴)做加权求和,得到 Cross-attention 的输出 b。
b 就是 “START 参考了整个语音输入后,得到的上下文信息”。
为什么 Cross-attention 这么重要?
如果没有 Cross-attention:Decoder 生成的词就和输入完全无关,比如语音转文字可能生成和语音不搭边的句子,翻译任务可能把 “我爱你” 翻译成 “今天天气好”,生成的内容会变得毫无意义,完全脱离输入上下文。
Cross-attention 就是 Decoder 的 “参考机制”:在生成每个词时,回头 “看一眼” Encoder 处理好的输入信息,让生成的内容和输入上下文紧密对齐,而不是凭空瞎编。
总结
Decoder 就是 Transformer 的 “生成大脑”:它戴着 “不偷看未来” 的眼罩(Masked Self-attention),同时随时回头参考 “输入材料”(Cross-attention),通过自回归的方式,一步步把理解好的信息变成流畅的输出。
更多推荐

所有评论(0)