【八股学习】自回归语言模型 || Teacher Forcing || BERT和GPT的比较

自回归语言模型的训练目标是什么?交叉熵损失如何计算?

自回归语言模型的核心训练目标,是最大化下一个词(token)的预测概率。它的本质是让模型学会根据上文,准确预测接下来会出现什么。

交叉熵损失是衡量这个预测准确度的工具,损失值越小,意味着模型预测的分布越接近真实数据。

训练目标:最大化似然估计

给定一个文本序列 x=(x1,x2,...,xT),自回归模型会按顺序估计每个位置 t的条件概率 P(xt∣x<t),整个序列的联合概率就是所有条件概率的乘积:

训练的目标是最大化所有训练样本的似然函数 。为方便计算,通常会取对数,等价于最小化负对数似然(Negative Log-Likelihood, NLL):

而交叉熵损失,就是对这个优化目标的另一种表达形式。

交叉熵损失的计算步骤

实际计算中,模型输出的是每个位置对所有词表的"打分"(logits),然后通过交叉熵损失来优化。整个过程可以分为四步:

1. 模型输出 Logits

输入序列前 T个词,模型会预测后 T个词。在第 t步,模型输出一个长度为词表大小 V的向量 zt,每个值代表对应词的原始得分。

2. Softmax 转换为概率

对 zt使用 softmax 函数,得到词表上的概率分布:

这里的

就是模型预测的下一个词是词 ii 的概率 P(xt∣x<t)

3. 构造真实分布(One-Hot 标签)

真实的词 xt用一个独热向量 yt表示,它在真实词索引处的值为 1,其余为 0。

4. 计算交叉熵,取平均

第 t步的交叉熵损失计算为:

因为 yt是独热向量,这等价于只取真实词概率的负对数:

总损失是对序列中所有预测位置的损失取平均:

例子:

假设词表只有3个词:"猫"(0)、"狗"(1)、"坐"(2)。对于输入序列"猫 在",模型需预测下一个词是"坐"的损失:

  • Logits:模型输出 2.0, 1.0, 0.5
  • Softmax概率:计算后得到 ≈ 0.59, 0.22, 0.19
  • 真实标签:下一个词是"坐"(索引为2),独热向量为 0, 0, 1
  • 交叉熵损失:直接取预测概率中"坐"对应项的对数,再取反。

总结:

  • 训练方式 :计算时采用Teacher Forcing策略,即模型每步的输入都来自真实的"标准答案"文本,而不是自己上一步的预测,这能加快收敛。
  • 计算对象 :损失是计算所有时间步 上,模型对真实下一个词预测概率的负对数,然后取平均。
  • 与目标的关系 :你会发现,这里的交叉熵损失公式,和前面最大化似然推导出的负对数似然公式,在形式上是一致的。因此,最小化交叉熵,就是在最大化语言模型的训练目标

什么是Teacher Forcing?为什么训练和推理时的输入方式不同?

Teacher Forcing 是训练自回归模型时的一种策略,它强制模型在每一步都使用"标准答案"中的上一个词作为输入,而不是模型自己预测的词。这正是训练和推理时输入方式截然不同的根源。

什么是 Teacher Forcing?

在训练一个自回归语言模型时,目标是预测序列 y_1, y_2, ..., y_T。如果我们不使用 Teacher Forcing,模型会是这样运作的:

  1. 输入起始符,预测出 y_1'(可能是错的)。
  2. 把这个预测的 y_1' 作为输入,去预测 y_2'。
  3. 以此类推,一步一步串行预测。

但 Teacher Forcing 的做法完全不同:它不管模型预测出了什么,直接将真实的 y_t 作为下一步 t+1 的输入

就像一个老师在学生每做完一题后,立刻告诉他正确答案是什么,让他基于正确答案继续往下做题,而不是让他基于自己的错误答案越走越偏。

具体例子:假设要学习翻译 "I love you" 为 "我 爱 你"。

  • 不使用 Teacher Forcing:输入 "I love you",第一步预测出了 "我",第二步把 "我" 输进去预测下一个词,可能得到 "爱",第三步把 "爱" 输进去预测得到 "你"。
  • 使用 Teacher Forcing :输入 "I love you",第一步计算预测 "我" 的损失;第二步强制将真实的词 "我" 作为解码器输入,去预测 "爱";第三步强制将真实的词 "爱" 作为输入,去预测 "你"。

为什么训练和推理时的输入方式不同?

这个不同源于条件限制工程目的的根本差异。

训练时:使用 Teacher Forcing
  • 输入源:来自真实标注数据(Ground Truth)。
  • 目标最大效率、最稳定地让模型学会在给定正确上文的情况下,最大化下一个正确词的概率。
  • 核心优势
    1. 并行计算:因为每一步的输入都不依赖上一步的预测,整个序列的所有时间步可以一次性并行计算。这是现代Transformer模型能高效训练的关键。
    2. 收敛稳定:避免了模型在初始胡乱预测的"垃圾"输入上越训越歪,引导损失函数平滑下降。
推理(生成)时:使用自回归生成
  • 输入源:来自模型自己上一步生成的词。
  • 目标 :在没有标准答案的情况下,从头生成一个连贯的序列。
  • 为什么必须不同 :推理时根本没有"标准答案"可用。模型必须依赖自己的输出来推进,这是自回归这个名称的本意。

这种差异带来的核心问题:曝光偏差

Teacher Forcing 虽然让训练变得高效,但也埋下了一个隐患,称为 曝光偏差(Exposure Bias)

  • 训练时,模型永远只见过"完美"的输入(真实的词)。
  • 推理时,模型面对的却是自己生成的、可能包含错误的上文。一旦某一步生成了一个不太合理的词,这个"错误"的词就成了下一步的输入,而模型从未在训练中学习过如何从自己的错误中恢复,这会导致错误像滚雪球一样越滚越大。
缓解曝光偏差的策略

为了解决这个问题,研究者提出了一些折中方案,核心思想是在训练时偶尔让模型"看看"自己的错误输出:

  • 计划采样(Scheduled Sampling):训练时,以一定的概率选择是否使用真实词作为输入。这个概率会随着训练进程逐渐衰减,后期更多地使用模型自己的预测,让模型逐步适应有噪声的输入。
  • 课程学习(Curriculum Learning):开始用 Teacher Forcing,之后逐渐引入更难的任务。

什么是Scaling Law?模型规模、数据量和计算预算应如何匹配?

Scaling Law 是近年来大模型发展中最重要的指导法则之一。它揭示了模型的最终性能与****模型参数量(N)、训练数据量(D)以及用于训练的总计算量(C)****之间,存在着可预测的幂律关系。

Scaling Law 试图回答:给定一个固定的计算预算,应该如何分配模型大小和数据大小,才能让模型性能达到最优?

什么是 Scaling Law?

Scaling Law 的核心发现是:当其他因素不构成瓶颈时,模型在测试集上的交叉熵损失(Loss),会随着模型规模、数据量和计算量的增加,按照幂律形式稳定下降。也就是说,只要持续增大规模,性能就会可预测地提升。

这个领域主要有两个里程碑式的定律:

  1. OpenAI 的早期定律(Kaplan et al.) :主要强调,在计算预算固定的情况下,应优先增大模型尺寸,数据量的增加相对次要。这直接影响了 GPT-3 等早期超大模型的设计思路。
  2. DeepMind Chinchilla 定律(Hoffmann et al.) :这是目前更受认可的观点,它提出了一个关键的"计算最优"概念。DeepMind 发现,之前的许多大模型(如 GPT-3 的 175B 版本)其实都严重训练不足。它们的参数量很大,但训练数据量太少,白白浪费了计算资源。

模型规模、数据量和计算预算如何匹配?

这里重点介绍更具现实指导意义的 Chinchilla 定律及其"计算最优"原则。

核心公式:计算预算的分配

计算预算 CC 可以近似为: C≈6×N×DC ≈6×N ×D

其中 NN 是模型参数量,DD 是训练词元数。这一定义将三者牢牢绑定。

最优分配策略

DeepMind 的研究得出了一个关键的结论:要想用给定的计算量 CC 练出最小 Loss 的模型,必须让模型参数量 NN 和训练数据量 DD 等比例地同步增长

具体比例关系如下:

  • 模型规模
  • 数据规模

这意味着,计算预算每扩大 10 倍,模型参数和训练数据的规模都应各自扩大约 3.16 倍。

Chinchilla 定律的实践指引

这个定律给出了一个非常具体的参考标准:对于一个指定大小的模型,训练它所需的最优数据量大约是它参数量的 20

举个例子,一个 70B 参数的模型,其"计算最优"的训练数据量应该是 70B×20=1.4T个词元。

但反观当时的许多大模型:

  • GPT-3 (175B):参数量 175B,却只在约 300B 词元上训练。模型大,数据量远低于 20 倍标准,属于典型的训练不足。
  • Chinchilla (70B):参数量 70B,但它在约 1.4T 词元上训练。虽然模型小了,数据量却非常充足,最终用更少的计算预算,实现了超越 GPT-3 的性能。
  • LLaMA (7B~65B):Meta 的 LLaMA 系列正是遵循了这一定律,在 1T~1.4T 的词元上训练相对较小的模型,性能表现极佳。

这条定律深刻地改变了行业共识:在计算预算固定的情况下,盲目堆高参数量而不相应增加高质量数据,是低效的。更优解是让模型和数据遵循约 1:20 的比例同步扩展。

现代 Scaling Law 的进化

Scaling Law 本身也在发展,尤其是在算力充裕的今天,出现了新的策略:

  1. 过度训练(Over-training):Chinchilla 定律追求"计算最优",是花最少的钱达到最好的效果。但如果预算充足,不在乎"最高性价比",而是追求极限性能,就可以用远超 20 倍的数据(比如 50-100 倍)去训练一个小一点的模型。这样推理成本更低,性能也可能更强。例如,有些小模型的数据量是其参数量的 40-60 倍。
  2. 数据重复与质量 :原始的 Scaling Law 假设数据不重复。但现实是,高质量数据很稀缺。现在的实践表明,数据的质量远比数量更重要。与其用低质数据填满 20 倍,不如在高质量数据上进行少量但有策略的重复训练。这意味着,在高质量数据上"过度训练"一个模型,正成为一种主流。

Encoder-only、Decoder-only和Encoder-Decoder架构分别适合哪些任务?

这三种架构的核心区别在于注意力机制对上下文的利用方式,这直接决定了它们天然擅长的任务类型。

  • Encoder-only :能同时看到上下文,是理解专家。
  • Decoder-only :只能看到上文,是生成专家。
  • Encoder-Decoder :兼具两者特点,是转换专家。

Encoder-only 架构

代表模型:BERT、RoBERTa、DeBERTa

设计特点

它使用双向自注意力,每个词都可以直接关注到序列中的所有其他词,没有任何方向上的遮蔽。这使得模型能深度融合全局上下文,获得丰富的语义表示。

天然适合的任务

几乎所有****自然语言理解(NLU)****任务,核心是"看完整个句子,再做判断"。

  • 文本分类:如情感分析、主题分类。输入整段文本,输出一个标签。
  • 词级标注:如命名实体识别(抽取出人名、地名)、词性标注。需要结合一个词的左右上下文来确定它的类别。
  • 抽取式问答:如SQuAD任务,给定问题和一篇文章,从文章中找出答案片段。需要深度匹配问题和文章的双向信息。
  • 句子关系推断:如判断两句是否同义、是否存在蕴含关系等。

一句话总结:所有需要"先读懂全文"的任务,都是Encoder-only的强项。

Decoder-only 架构

代表模型:GPT系列、LLaMA、Claude、Gemini等几乎所有主流大语言模型

设计特点

使用单向(因果)注意力,即每个词只能看到它自己和它之前的上文,不能看到未来的词。这种设计的本意就是模拟"下一个词预测"这个行为,所以天然是一个自回归生成器。

天然适合的任务

所有****自然语言生成(NLG)****任务,以及在统一文本到文本框架下的各种理解任务。

  • 文本生成:写文章、故事续写、代码生成、写邮件等。
  • 开放式对话:多轮聊天、虚拟角色。
  • 基于指令的任务 :如今,通过提示工程上下文学习,Decoder-only模型也可以出色地完成传统意义上的理解任务。比如给它一段文本,让它以"分类结果是:"开头生成答案,它就能做情感分析。这种"万物皆可生成"的统一范式,正是它目前统治大模型领域的重要原因。

一句话总结:所有需要"一个词一个词往外蹦"的生成任务,本质都是Decoder-only的活儿。

Encoder-Decoder 架构

代表模型:T5、BART、原始Transformer、多模态模型如ViT+GPT等

设计特点

这是Transformer的原初形态,由两部分组成:

  • 编码器 :和Encoder-only一样,用双向注意力来完整理解输入序列,提炼出高密度的语义表示。
  • 解码器 :和Decoder-only一样,用单向自注意力+交叉注意力来关注编码器输出的语义表示,并自回归地生成输出序列。

天然适合的任务

有明确输入-输出对应关系 且通常输入和输出长度不同的任务,即序列到序列(Seq2Seq)任务。

  • 机器翻译:输入一种语言(双向理解),输出另一种语言(自回归生成)。
  • 文本摘要:输入长文(理解全文),输出精炼摘要(生成)。
  • 语音识别:编码器处理音频特征,解码器输出文本。
  • 基于理解的生成:如阅读理解后生成摘要,或给定知识图谱三元组生成自然语言描述。

一句话总结:当任务的输入和输出是"两种不同的序列",且都需要精细建模时,Encoder-Decoder是最自然的选择。

Decoder-only架构被证明在大规模扩展上更加友好和高效:

  • 统一的预训练目标:整个网络只需一个"下一个词预测"损失函数。
  • 复用性强:它把所有任务都转换成"根据上文生成下文"的格式,无需为不同任务设计不同的结构头。
  • 应用广泛:直接用提示就能驱动,极容易适配各种场景。

而Encoder-only模型通常在特定的理解任务上可以做得更轻量、效果更好,但在开放生成上受限。Encoder-Decoder模型则在需要严格遵循输入信息(如摘要不偏离原意)的生成任务上仍有独特优势。

BERT的MLM训练目标如何计算?为什么不能把所有待预测词都直接替换成MASK

MLM:掩码语言模型

BERT 的 MLM(掩码语言模型)训练目标,本质上是一个去噪自编码任务。它在输入层对文本进行随机"破坏",然后要求模型在输出层利用双向上下文信息,重建出被破坏的原始词。

MLM训练目标如何计算?

计算过程可以分为三步:

1. 构造掩码输入

从输入序列中随机选取 15% 的词元作为待预测位置。对这些选中的位置,BERT 并不是直接全都替换成 MASK,而是采用了下面这个 80/10/10 的混合策略:

  • 80% 替换为 MASK 标记:让模型学会"填空"。
  • 10% 替换为一个随机词:给模型增加"改错"的压力,强制它不能完全信任输入。
  • 10% 保持不变:将真实词原样保留,要求模型判断"这个词在这里是否恰当",让模型学到更鲁棒的上下文表示。

2. 模型预测

将破坏后的序列输入 Transformer 编码器,模型会为每个输入位置输出一个隐状态向量。对于那 15% 的被选中位置,会将其输出隐状态通过一个共享的全连接层和 Softmax,映射为词表上的概率分布 Pmodel(x∣context)

3. 计算交叉熵损失

损失仅计算那 15% 被选中位置,忽略未选中的位置。对每个被选中的位置 i:

这里 xitrue是那个位置原始的、未被破坏的真实词。最终的 MLM 损失是所有选中位置损失的平均值。

为什么不能把所有待预测词都直接替换成 MASK

如果简单粗暴地 100% 替换为 MASK,会引发一个严重的预训练-微调不一致问题,这与Teacher Forcing 所造成的"曝光偏差"非常类似。

  • 训练时:满是 MASK 的世界
    模型在预训练时,每个需要预测的地方看到的都是那个特殊的 MASK 标记。它会学到:只要出现 MASK,我就需要去猜一个词。模型可能过度依赖 MASK 这个符号本身的存在,而不是纯粹靠上下文来推断。
  • 微调/推理时: MASK 消失了
    在下游任务(如文本分类、命名实体识别)中,输入的是纯净的自然语言文本,根本不存在 MASK 标记。这会导致模型遇到巨大的输入分布偏移,它从未学过如何处理不带"损坏标记"的正常句子,性能会大打折扣。

正是为了解决这个 Gap,BERT 采用了上述的混合策略:

  • 保留 10% 原词:即使没有 MASK 标记,模型也必须为这个位置预测出正确的词。这相当于逼问模型:"这个词放在这里对吗?如果不对,应该是什么?"这极大地增强了模型对上下文本身的依赖,而非依赖 MASK 提示。
  • 替换 10% 随机词:进一步教会模型利用上下文来"纠错",提升其语义表示的纠错能力和鲁棒性。

这个精妙的 80/10/10 策略,确保了模型在预训练和微调时,看到的输入模式保持基本一致,让它能真正学到双向上下文的深层语义理解能力,而不仅仅是"在有 MASK 的地方填空"这个表层技巧。

BERT、GPT在注意力掩码、预训练目标和推理方式上有哪些核心差异?

BERT 和 GPT 代表了 Transformer 架构的两个极端方向,它们的核心差异源于对注意力机制的不同运用,这直接决定了各自的预训练目标和推理方式。

BERT 和 GPT 代表了 Transformer 架构的两个极端方向,它们的核心差异源于对注意力机制的不同运用,这直接决定了各自的预训练目标和推理方式。

BERT 是一个双向理解 模型,擅长"完形填空";而 GPT 是一个单向生成模型,擅长"文字接龙"。

以下是三个维度的核心差异:

注意力掩码机制

这是两者最底层的架构区别,决定了模型能"看到"什么信息。

  • BERT:双向全可见(全连接自注意力)
    BERT 的注意力掩码是全零矩阵 ,没有任何遮蔽。这意味着在处理一个序列时,每个词都可以毫无保留地关注到它左边和右边所有的词
    • 结果:这种方式能深度融合全局上下文,对语言的理解能力极强。输入 "我 在 喝 MASK" 时,模型可以同时看到 "喝" 这个动词和 "我" 这个主语,从而轻松推断出 MASK 是类似 "水" 或 "咖啡" 的名词。
  • GPT:单向因果掩码(因果自注意力)
    GPT 使用了一个下三角掩码矩阵 ,确保位置 tt 的词只能关注到位置 11 到 tt 的词,对 t+1t +1 及之后的位置完全屏蔽。
    • 结果:这完全模拟了文本的自然生成过程,保证了模型在预测下一个词时,不会"偷看"到未来的答案。输入 "我 在 喝" 预测下一个词时,模型只能基于这三个已生成的词,不能提前看到 "水"。

预训练目标

掩码机制的不同,直接导致了两者训练任务的本质不同。

  • BERT:掩码语言模型 (MLM)
    BERT 的目标是去噪重建 。它随机遮盖输入中的一部分词,然后要求模型利用双向上下文来预测被遮盖的原词。这相当于一道"完形填空"题,目的是强迫模型学习深层的双向语义依赖。
  • GPT:下一个词预测 (Next Token Prediction)
    GPT 的目标是因果预测 。它根据已生成的上文,预测文本序列中的下一个词。这是一种标准的自回归任务,等同于不断地做"文字接龙"。其训练目标就是最大化真实文本序列的似然估计。

推理方式与应用范式

这进一步导致了两者在实际使用时的输入方式、输出能力和应用生态上的巨大差异。

  • BERT:微调范式
    • 方式 :BERT 的核心是提取上下文相关的表示。推理时,通常是输入一个完整句子,它输出每个词的隐藏状态。
    • 应用 :这些丰富的向量表示不能直接"生成"文本,而需要作为特征输入到下游任务专用的分类器中。因此,BERT 必须经过微调才能在不同的理解任务上发挥作用,例如在输出层加一个分类器做情感分析,或加一个序列标注层做命名实体识别。
    • 局限:它不擅长文本生成,每个任务都需要特定适配和标注数据。
  • GPT:提示工程与上下文学习
    • 方式:GPT 本身就是训练好的生成器。推理时,它是一个真正的自回归过程,把上一步预测出的词接在输入末尾,再预测下一个词,循环往复生成完整序列。
    • 应用 :这种生成能力带来了范式上的统一。GPT 不再需要为每个任务设计新的网络头和微调,而是通过提示工程上下文学习,将分类、翻译、问答等所有任务都转化为"根据上文生成下文"的格式。用户只需用指令和示例作为输入,模型就能直接输出结果。
    • 优势:这使它成为一个任务通用的、互动式的生成式AI。