预训练任务与目标
预训练任务类型
大语言模型的预训练任务主要分为以下几种类型:
1. 因果语言建模(Causal Language Modeling, CLM)
因果语言建模也称为自回归语言建模,是当前主流大模型(如GPT系列、LLaMA等)采用的预训练任务。其核心思想是:根据上文预测下一个token,模型只能看到当前位置之前的tokens,不能看到未来的tokens。
-
特点:
- 严格的因果掩码,每个位置只能 attend 到前面的位置
- 符合文本生成的自回归特性
- 训练目标就是最大化真实下一个词的对数概率
- 天然适合开放式文本生成任务
-
公式:
P(x1,x2,...,xn)=i=1∏nP(xi∣x1,...,xi−1)
2. 掩码语言建模(Masked Language Modeling, MLM)
掩码语言建模是BERT提出的预训练任务,随机掩盖输入中的一些token,让模型预测被掩盖的token。这种方式允许模型看到双向的上下文信息。
- 特点:
- 双向注意力机制,模型可以看到完整的输入序列
- 适合理解类任务(分类、命名实体识别、问答等)
- 预训练时随机mask 15%的tokens
- 由于mask tokens在预训练和微调时不一致,存在一定的分布偏移
3. 前缀语言建模(Prefix LM)
前缀语言建模结合了CLM和MLM的特点,前缀部分可以双向注意力,而生成部分只能使用单向因果注意力。这种方式常用在Encoder-Decoder架构中。
- 区别于Causal LM:
- Prefix LM:前缀部分双向,生成部分单向
- Causal LM:全部单向,只能看前面的内容
- Prefix LM适合基于前缀的生成任务,如摘要、翻译等
4. Span Corruption
Span Corruption是T5提出的预训练任务,随机掩盖连续的文本span,让模型生成被掩盖的内容。这种方法更关注长文本的连续生成,而非单个token预测。
- 核心思想:
- 选择多个不重叠的文本span进行mask
- 每个mask span用一个特殊mask token代替
- 让模型自回归生成被mask掉的原始内容
- 相比单个token预测,更考验模型的长程建模能力
5. 其他预训练任务
- 排列语言建模(Permutation Language Modeling):XLNet提出,通过对输入序列进行不同排列,让模型学习双向上下文依赖同时保留自回归特性
- 对比学习:通过构造正负样本对,学习句子层面的表示
- 多任务预训练:同时学习多个任务,提升模型的通用能力
预训练目标函数
标准语言建模损失
对于因果语言建模,标准损失是交叉熵损失:
L=−N1i=1∑NlogP(xi∣x1,...,xi−1;θ)
其中 N 是序列长度,θ 是模型参数。
为什么使用交叉熵损失?
- 概率解释:交叉熵直接对应于最大化对数似然概率
- 梯度特性:交叉熵在梯度计算时具有更好的数学性质,优化更稳定
- 对概率差异敏感:交叉熵对预测概率和真实分布的差异更敏感,有助于模型更快学习
其他可能的目标函数
- 对比损失:用于对比学习,拉近相似样本,推远不同样本
- 知识蒸馏损失:将大模型知识蒸馏到小模型
- 动态损失:根据样本难度调整权重,解决数据不平衡问题
预训练数据构建
数据来源
常见的开源预训练数据集包括:
- RedPajama-Data-1T:高质量、大规模、高覆盖度的预训练数据集,包含七个子集,压缩后3TB,解压后5TB
- The Pile:多样化的大规模预训练数据集,包含多种数据源
- WuDao 200G:中文预训练数据集
- Common Crawl:从互联网爬取的大规模原始数据,需要大量清洗
数据清洗要点
-
去重:去除重复内容,减少数据冗余
- 基于相似度进行去重,可使用语义向量 + 聚类方法
- 数据去重对最终模型效果有显著正向增益
-
过滤低质量内容:
- 去除广告、垃圾内容、恶意代码
- 过滤重复、生成重复率过高的文本
- 基于PPL(困惑度)过滤模型难以学习的数据
-
质量控制:
- 优先保留高质量内容(书籍、论文、专业网站)
- 领域预训练时,增加领域相关语料比例
- 控制数据集多样性,避免分布偏移
数据预处理流程
原始数据 → 去重 → 清洗过滤 → 分词 → 截断/拼接 → 形成训练批次
数据量选择
- 通用预训练:至少需要数十亿token,最好达到万亿级别
- 增量预训练/领域适配:至少几B token,否则效果不明显
- 如果数据量很小,更推荐直接做微调,而非增量预训练
涌现能力的原因分析
涌现能力(Emergent Abilities)是指当模型规模、数据量、训练量达到一定阈值后,突然出现的复杂能力,这些能力在小模型中并不存在。
主要原因
-
数据量的增加
- 更多的数据提供了更丰富、更广泛的语言知识和语境
- 模型能够学习到更多低频但重要的语言模式和知识
-
计算能力的提升
- 使得训练更大、更复杂的模型成为可能
- 可以容纳更多参数,从而存储更多知识
-
模型架构的改进
- Transformer引入自注意力机制,更好地捕捉长距离依赖
- 归一化、激活函数等改进提升了训练稳定性
- 更好的位置编码方式扩展了上下文窗口
-
预训练方法的有效性
- 在大规模无标签数据上进行自监督预训练
- 使模型从大规模数据中学习到丰富的语言知识和世界知识
- 微调阶段能够快速迁移到下游任务
涌现的本质
目前学界对涌现的本质还在持续研究,主要观点:
- 一种观点认为涌现是"量的积累导致质的飞跃",足够多的参数和数据让模型能够学习到复杂的组合性泛化
- 另一种观点认为部分涌现能力是评估方法造成的错觉,小模型其实也有能力只是没有被正确触发
面试常见问题
-
Prefix LM 和 Causal LM 区别是什么?
Prefix LM(前缀语言模型)和Causal LM(因果语言模型)的主要区别在于注意力机制的使用:
- Causal LM:是自回归模型,每个位置只能看到前面的tokens,不能看到未来的tokens,适合文本生成任务,GPT系列都是这种方式。
- Prefix LM:前缀部分(给定上下文)使用双向注意力,生成部分使用单向因果注意力,适合给定前缀的生成任务,如翻译、摘要。
-
大模型的涌现能力是什么?涌现能力产生的原因有哪些?
涌现能力是指当模型规模、数据量、训练量达到一定阈值后,突然出现的复杂能力,这些能力在小模型中并不明显。主要原因包括:
- 数据量的大幅增加,提供更丰富的语言知识和语境
- 计算能力提升,使得训练更大模型成为可能
- Transformer等架构改进,更好捕捉长距离依赖
- 预训练+微调的训练策略,使模型从大规模无标签数据中学习通用知识
-
预训练和微调的区别是什么?各自的目的是什么?
- 预训练:在大规模通用语料上进行自监督学习,目的是让模型学习通用的语言表示和世界知识,作为后续任务的基础。
- 微调:在特定任务的标注数据上微调预训练模型,目的是将预训练学到的通用知识适配到特定下游任务,提升任务性能。
-
为什么预训练之后还要做微调?
预训练学习的是通用语言知识,而特定任务通常有不同的数据分布和任务要求。通过微调可以:
- 让模型适应特定任务的分布
- 学习任务特定的模式和知识
- 在预训练基础上快速收敛,相比从零开始训练节省大量计算
-
预训练阶段token重复对模型性能有什么影响?
过多的token重复会带来几个问题:
- 模型过拟合到重复模式,降低泛化能力
- 浪费计算资源,模型学习不到新知识
- 可能导致模型偏向重复内容,生成更多重复文本
因此,预训练数据去重是非常重要的预处理步骤。
-
常见的预训练任务范式有哪些?各自适用场景是什么?
- CLM(因果语言建模):适合开放式文本生成,当前主流大模型基座都采用这种方式
- MLM(掩码语言建模):适合文本理解类任务(分类、抽取等),BERT系列采用
- Span Corruption:适合T5等encoder-decoder架构,侧重文本生成任务
- 排列语言建模:XLNet采用,结合双向上下文和自回归特性