Skip to content

预训练定义

预训练(Pre-training)是指在大规模无监督数据上进行初步模型训练,使模型能够学习到通用的语言模式、知识表征和统计特征。这一阶段不依赖于特定任务,帮助模型建立基础的语言理解能力(通用能力)。通过预训练得到base模型,该模型可以在后续的特定任务上(如分类、生成、翻译等)以更快的速度和更高的准确性进行微调。

预训练的发展历程

预训练的发展可以分为以下几个关键阶段:

早期探索阶段(2013-2017)

2013年Mikolov等人提出的Word2Vec是预训练思想的早期实践,通过在大规模语料上学习词向量表示,为下游NLP任务提供了有效的特征输入。随后的GloVeFastText进一步丰富了静态词向量的方法。这一阶段的预训练局限于词级别,无法捕捉上下文信息。

预训练-微调范式兴起(2018-2019)

2018年是预训练语言模型爆发的一年:

  • ELMo(Embeddings from Language Models):首次提出上下文相关的动态词向量,通过双向LSTM语言模型生成,解决了多义词问题。

  • GPT-1(2018年6月):OpenAI提出,采用Transformer Decoder架构,通过自回归语言模型(Autoregressive LM)在大规模无标注语料上进行预训练,然后在下游任务上微调。GPT-1证明了生成式预训练在NLU任务上的有效性。

  • BERT(2018年10月):Google提出,采用Transformer Encoder架构,引入掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)两个预训练目标。BERT的出现彻底改变了NLP的范式,使得预训练-微调成为NLP的主流方法。

  • GPT-2(2019年2月):将模型参数扩展到15亿,展示了规模增长带来的零样本(Zero-shot)学习能力提升,首次提出"语言模型是无监督多任务学习者"的观点。

规模化与涌现阶段(2020-2023)

  • GPT-3(2020年5月):参数量达到1750亿,展示了Few-shotIn-context Learning能力,证明了大规模语言模型在不需要微调的情况下也能完成各种任务。这催生了提示工程(Prompt Engineering)的研究热潮。

  • T5(2019年10月):Google提出,将所有NLP任务统一为文本到文本(Text-to-Text)格式,采用编码器-解码器(Encoder-Decoder)架构,系统性地比较了不同预训练策略的效果。

  • LLaMA(2023年2月):Meta发布,采用仅解码器(Decoder-only)架构,包含RoPE旋转位置编码、GQA分组查询注意力、RMSNorm和SwiGLU激活函数等优化。LLaMA证明了在开源数据上训练的小模型可以匹配甚至超越闭源大模型,推动了开源大模型生态的繁荣。

  • LLaMA 2(2023年7月):在LLaMA基础上扩展了训练数据量和上下文长度,并引入了GQA(Grouped Query Attention)机制,进一步提升了模型性能。

持续演进阶段(2024至今)

  • Mistral(2023年9月):引入滑动窗口注意力(Sliding Window Attention)和分组查询注意力,以更小的参数量实现了优异的性能。

  • DeepSeek(2024年):采用MoE(Mixture of Experts)混合专家架构,在保持计算效率的同时大幅扩展模型能力。

  • Qwen(2024年):阿里云发布的开源大模型系列,支持中英双语,在多项基准测试中表现优异。

预训练范式

因果语言模型(CLM)

因果语言模型(Causal Language Model, CLM)是最常见的自回归预训练范式,以GPT系列为代表。其核心思想是根据前文预测下一个token:

P(xn|x1,x2,,xn1)

在训练时,每个token只能看到其左侧的上下文,通过自注意力掩码(Causal Mask)实现。CLM天然适合文本生成任务,是当前大语言模型的主流预训练范式。

掩码语言模型(MLM)

掩码语言模型(Masked Language Model, MLM)以BERT系列为代表。其核心思想是随机遮盖输入文本中的部分token,然后根据上下文预测被遮盖的内容:

P(xi^|x1,,xi^1,xi^+1,,xn)

BERT通常随机遮盖15%的token,其中80%替换为[MASK]、10%替换为随机词、10%保持不变。MLM能更好地理解上下文语义,但不适合文本生成任务。

前缀语言模型(PrefixLM)

前缀语言模型(Prefix Language Model, PrefixLM)以T5UniLM为代表,结合了CLM和MLM的特点。在给定前缀(Prefix)的条件下,对后续部分采用自回归方式生成:

P(x|p|+1,,xn|x1,,xp)

前缀部分可以使用双向注意力,而生成部分使用因果注意力。这种范式在序列到序列任务中表现优异。

范式对比

范式代表模型架构预训练目标适用场景
CLMGPT系列Decoder-only预测下一个token文本生成、对话
MLMBERT系列Encoder-only预测被遮盖的token文本理解、分类
PrefixLMT5、UniLMEncoder-Decoder前缀条件下自回归生成翻译、摘要

训练目标

预训练采用自监督的方式训练,对于CLM(当前主流),训练目标为预测下一个token的对数似然损失

L=n=1Nlogp(xnx1,,xn1;θ)

在计算loss的时候会计算prompt和response两部分的loss值。

对于MLM,训练目标为预测被遮盖位置的真实token:

L=iMlogp(xixM;θ)

其中 M 是被遮盖位置的集合。

开源大模型的意义

在开源大模型数量爆炸的时代,预训练模型的意义在何处?

  • 核心要素缺失:许多大模型没有开源训练框架、训练数据等核心要素,仅通过评估无法确定大模型对知识的掌握程度,导致在模型对齐阶段无法对症下药。例如我要微调一个写诗的大模型,采用的大模型在预训练阶段可能根本没在诗歌数据集上训练过,仅通过微调训练出的大模型写出来诗肯定难以直视。

  • 领域适配需求:通用模型在特定领域的表现远不如domain模型,而要训练出好的domain模型,仅靠微调是不够的,需要做继续预训练,而继续预训练与预训练的技术栈基本一致。

  • Tokenizer可控性:开源模型的tokenizer不可控,导致解码速度不可控。比如llama模型做意图识别任务,有个意图叫 ai.listen.music,会被映射成 5 个 token,但如果使用自己训练的大模型,便会在一开始就设置成 1 个 token,极大节省了生成速度。