链接:https://llmbook-zh.github.io/
前言:
- GPT发展:GPT-1 2018 -->GPT-2&GPT-3(扩大预训练数据和模型参数规模)–> GPT-3.5(代码训练、人类对齐、工具使用等)–> 2022.11 ChatGPT(对话形式)–> 2023.3 GPT-4 --> GPT-4V(多模态能力)
- 两个要点
- Transformer 架构能够拓展到百亿、千亿甚至万亿参数规模,并将预训练任务统一为预测下一个词这一通用学习范式 ;
- 数据质量与数据规模的重视
大语言模型发展的时间线:
背景与基础知识
一、引言
1.1 何为大语言模型(Large Language Model, LLM)
- 通过规模扩展(如增加模型参数规模或数据规模)通常会带来下游任务的模型性能提升,大规模的预训练语言模型(175B 参数的GPT-3 和540B 参数的PaLM)在解决复杂任务时表现出了与小型预训练语言模型(例如330M 参数的BERT 和1.5B 参数的GPT-2)不同的行为,GPT-3 可以通过“上下文学习”(In-Context Learning, ICL)的方式来利用少样本数据解决下游任务,这种大模型具有但小模型不具有的能力通常被称为“涌现能力”(Emergent Abilities)。
- 语言模型发展的四个阶段:
1.2 大语言模型的能力特点
- 较为丰富的世界知识:超大规模的文本数据训练,充分学习到丰富的世界知识,无需微调
- 较强的通用任务解决能力:基于大规模无标注文本的下一个词元预测任务本质上可以看作一个多任务学习过程
- 较好的复杂任务推理能力:回答知识关系复杂的推理问题,解决涉及复杂数学推理过程的数学题目
- 较强的人类指令遵循能力:提示学习
- 较好的人类对齐能力:安全性,目前广泛采用的对齐方式是基于人类反馈的强化学习技术,通过强化学习使得模型进行正确行为的加强以及错误行为的规避,进而建立较好的人类对齐能力
- 可拓展的工具使用能力:会受到所采用的归纳假设以及训练数据的限制,无法有效回答涉及到预训练数据时间范围之外的问题,并且对于数学中的数值计算问题也表现不佳;可以通过微调、上下文学习等方式掌握外部工具的使用,如搜索引擎与计算器
- 长程对话的语义一致性、对于新任务的快速适配、对于人类行为的准确模拟等
1.3 大语言模型关键技术概览
- 规模扩展:超大规模语言模型能够展现出一些小型语言模型不具备的能力特点,如上下文学习能力、思维链能力等
- 数据工程:GPT-2给出通过在海量文本上进行下一个词预测的优化,使得模型能够学习到丰富的语义知识信息,进而通过文本补全的方式解决各种下游任务。
- 全面的采集,拓宽高质量的数据来源
- 精细的清洗,尽量提升用于大模型训练的数据质量
- 高效预训练,大规模分布式训练算法优化大语言模型的神经网络参数,并行策略及效率优化方法【(3D 并行(数据并行、流水线并行、张量并行)、ZeRO(内存冗
余消除技术)等】,分布式优化框架:DeepSpeed&Megatron-LM。由于大语言模型的训练需要耗费大量的算力资源,通常需要开展基于小模型的沙盒测试实验,进而确定面向大模型的最终训练策略,提升训练稳定性和优化效率,如混合精度训练 - 能力激发,设计合适的指令微调以及提示学习进行激发或诱导
- 指令微调:使用自然语言表达的任务描述以及期望的任务输出对于大语言模型进行指令微调,提升模型在未见任务上的泛化能力(无法向大模型注入新的知识,训练大模型学会利用自身所掌握的知识与信息进行任务的求解)
- 提示学习:设计合适的提示策略去诱导大语言模型生成正确的问题答案,上下文学习、思维链提示,可以通过逐步求解提升模型在复杂任务上的表现
- 人类对齐:经过海量无标注文本预训练的大语言模型可能会生成有偏见、泄露隐私甚至对人类有害的内容。3H 对齐标准,即Helpfulness(有用性)、Honesty(诚实性)和Harmlessness(无害性)。与人类主观感知相关,很难直接建立形式化的特定优化目标。提出基于人类反馈的强化学习算法(Reinforcement Learning from Human Feedback, RLHF),将人类偏好引入到大模型的对齐过程中。
- 训练奖励模型 :区分模型输出质量好坏
- 强化学习算法来指导语言模型输出行为的调整,让大语言模型能够生成符合人类预期的输出,不过由于强化学习算法优化复杂,出现使用监督微调的对齐方式,从而简化RLHF 优化过程的算法(DPO)。
- 工具使用:受限于预训练数据所提供的信息,无法有效推断出超过数据时间范围以及覆盖内容的语义信息;工具调用能力主要是通过指令微调以及提示学习两种途径实现,而未经历过特殊训练或者缺乏有效提示的大语言模型则很难有效利用候选工具
二、基础介绍
2.1 大语言模型的构建过程
- 大规模预训练
- 指令微调与人类对齐
- “指令微调”(也叫做有监督微调,Supervised Fine-Tuning, SFT),使用任务输入与输出的配对数据进行模型训练,可以使得语言模型较好地掌握通过问答形式进行任务求解的能力。一般需要数十万到百万规模的指令微调数据。对于算力资源的需求相对较小。
- 基于人类反馈的强化学习对齐方法RLHF(Reinforcement Learning from Human Feedback),在指令微调后使用强化学习加强模型的对齐能力,需要训练一个符合人类价值观的奖励模型(Reward Model)。需要标注人员针对大语言模型所生成的多条输出进行偏好排序,并使用偏好数据训练奖励模型,用于判断模型的输出质量。
2.2 扩展法则
可预测的扩展(Predictable Scaling)::使用小模型的性能去预估大模型的性能,或者使用大模型的早期训练性能去估计训练完成后的性能
- KM 扩展法则:模型规模(𝑁)、数据规模(𝐷)和计算算力(𝐶)之间的幂律关系
N、D、C分别对应于非嵌入参数数量、训练数据数量和实际的算力开销。 - Chinchilla 扩展法则
2.3 涌现能力
定义:当模型扩展到一定规模时,模型的特定任务性能突然出现显著跃升的趋势,远超过随机水平。 - 代表性的涌现能力:
- 上下文学习:在提示中为语言模型提供自然语言指令和多个任务示例,无需显式的训练或梯度更新,仅输入文本的单词序列就能为测试样本生成预期的输出。
- 指令遵循:通过指令微调,大语言模型可以在没有使用显式示例的情况下按照任务指令完成新任务,有效提升了模型的泛化能力。
- 逐步推理:用思维链(Chain-of-Thought, CoT)提示策略来加强推理性能。可以在提示中引入任务相关的中间推理步骤来加强复杂任务的求解。
- 涌现能力与扩展法则的关系
两种不同的模型性能提升趋势(持续改进v.s. 性能跃升)- 扩展法则使用语言建模损失来衡量语言模型的整体性能,整体上展现出了较为平滑的性能提升趋势,具有较好的可预测性
- 涌现能力通常使用任务性能来衡量模型性能,整体上展现出随规模扩展的骤然跃升趋势,不具有可预测性
2.4 GPT 系列模型的技术演变
- 早期探索:
- GPT-1(Generative Pre-Training):预测下一个Token任务,无监督预训练和有监督微调相结合的范式。与BERT同期,与BERT-Base参数相当,性能没有优势,未引发关注;
- GPT-2:沿用GPT-1架构,参数规模扩大至1.5B,使用大规模网页数据集WebText 进行预训练,GPT-2 旨在探索通过扩大模型参数规模来提升模型性能,并且尝试去除针对特定任务所需要的微调环节。使用无监督预训练的语言模型来解决各种下游任务,进而不需要使用标注数据进行显式的模型微调。𝑃(output|input, task)——根据输入和任务信息来预测输出。输入、输出、任务信息均通过自然语言描述,后续求解则是任务方案(或答案)的文本生成问题。“如果无监督语言建模经过训练后具有足够的能力复原全部世界文本,那么本质上它就能够解决各种任务”。
- 规模扩展
- GPT-2可看成是无监督多任务学习器,效果逊色于有监督微调
- GPT-3对模型参数规模进行大幅扩展至175B,在下游任务中初步展现出了一定的通用性(通过上下文学习技术适配下游任务),为后续打造更为强大的模型确立了关键的技术发展路线。
- GPT-3提出上下文学习,上下文学习可以指导大语言模型学会“理解”自然语言文本形式描述的新任务,从而消除了针对新任务进行微调的需要。模型预训练是在给定上下文条件下预测后续文本序列,模型使用则是根据任务描述以及示例数据来推理正确的任务解决方案。
- 能力增强
- 代码数据训练:GPT-3对编程问题和数学问题求解不好,推出Codex,在大量GitHub 代码数据集合上微调的GPT 模型。GPT-3.5模型是在基于代码训练的GPT 模型(即code-davinci-002)基础上开发 ,对于可用于预训练的数据范围的扩展,可能并不局限于自然语言形式表达的文本数据。
- 人类对齐:InstructGPT旨在改进GPT-3 模型与人类对齐的能力,建立了基于人类反馈的强化学习算法,即RLHF 算法。这对安全部署非常重要。
- 性能跃升
- ChatGPT:沿用了InstructGPT训练技术, 对于对话能力进行了针对性优化。并支持了插件机制
- GPT-4:由单一文本模态扩展到了图文双模态,为期六个月的迭代对齐(在基于人类反馈的强化学习中额外增加了安全奖励信号),GPT-4 对恶意或挑衅性查询的响应更加安全。
- GPT-4V、GPT-4 Turbo,讨论了与视觉输入相关的风险评估手段和缓解策略。GPT-4 Turbo 扩展了知识来源(拓展到2023 年4 月),支持更长上下文窗口(达到128K),优化了模型性能(价格更便宜),引入了若干新的功能(如函数调用、可重复输出
等)。
三、大语言模型资源
3.1 公开可用的模型检查点或API
- 公开可用的通用大语言模型检查点
- LLaMA 和LLaMA-2:LLaMA 2023.2,包括7B、13B、30B 和65B ,开源。13B超越了175B的GPT-3。65B模型在2,048 张80G 显存的A100 GPU 上训练了近21 天。由于开源且性能优秀,以其为基座模型进行微调或继续预训练,衍生出了众多变体模型。7月,LLaMA-2诞生,7B、13B、34B(未开源)和70B,可用于商用。扩充了预训练的词元量(1T到2T),上下文长度翻了一倍(达到4,096 个词元),引入了分组查询注意力机制。LLaMA-2 作为基座模型 + 预训练-有监督微调-基于人类反馈的强化学习 = LLaMA-2 Chat(面向对话),更好的模型性能,也更加安全。
- ChatGLM【智谱AI+清华】:现在已经迭代到了ChatGLM-3,参数量均为6B,
四、数据准备
4.1 数据来源
- 网页:大规模网页文本数据进行预训练,有助于大语言模型获取多样化的语言知识,并增强其自然语言理解和生成的能力
- 书籍:内容更正式与详实,篇幅较长,模型可以积累丰富的语言知识,还能加强其长程语义关系的建模
- 多语文本:在多语言语料库上训练过的大语言模型能够更好地建立多语言间的语义关联,为跨语言理解与对话任务提供支持
- 科学文本:构建科学文本语料的常用方法是收集arXiv 论文、科学教材、数学网页等科学资源,特殊符号需要预处理
- 代码:Stack Exchange 等编程问答社区的数据& GitHub 等开源项目仓库
4.2 数据预处理(消除低质量、冗余、无关甚可能有害的数据)
-
质量过滤:
- 基于启发式规则的方法:语种、简单统计指标(语料中标点符号分布、符号与单词比率、句子长度)、困惑度(Perplexity)等文本生成的评估指标来检测和删除表达不自然的句子、关键词(重复文本模式)
- 基于分类器的方法:训练用于判别数据质量的文本分类器,进行预训练语料的清洗;为了减少数据的误筛(训练样本中低资源),可以使用多个分类器进行联合过滤或召回;轻量级模型(FastText)、可微调的预训练语言模型、闭源大模型API。
- 基于启发式的方法,规则简洁,能够迅速过滤10M 乃至100M 级别的庞大文档集。基于分类器有更高的精确度,但需要消耗更多的计算资源。为了平衡效率与准确性,可以针对具体数据集合进行清洗策略的灵活组合。初筛&精筛。
-
敏感内容过滤(有毒内容或隐私信息)
- 过滤有毒内容:基于分类器,训练数据如Jigsaw 评论数据集合,包括“有毒”、“严重有毒”、“有威胁”、“侮辱性”、“暴力”以及“身份仇恨”等六个类别,需要在精确度和召回率之间平衡
- 过滤隐私内容:直接且有效的方法是使用启发式方法,如关键字识别,来检测和删除这些私人信息,邮箱地址、IP 地址以及电话号码
-
数据去重:大语言模型具有较强的数据拟合与记忆能力,很容易习得训练数据中的重复模式,可能导致对于这些模式的过度学习。这些数据也可能导致训练过程的不稳定(训练损失震荡),可能导致训练过程崩溃。
- 计算粒度:句子级别、文档级别和数据集级别。a. 删除包含重复单词和短语的低质量句子。b. 依靠单词或𝑛 元词组的重叠这类表层特征,来衡量文档的重叠比率,进而检测和删除包含相似内容的重复文档。c.去除那些具有高度相似甚至完全一致内容的文档
- 用于去重的匹配方法:精确匹配(完全相同)与近似匹配算法(基于相似性度量),
-
数据对预训练效果的影响 - 含有噪音、有毒和重复数据的低质量语料库进行预训练,会严重损害模型性能
- 如果模型在包含事实性错误的、过时的数据上进行训练,那么它在处理相关主题时可能会产生不准确或虚假的信息,这种现象被称为"幻象"。
- 重复数据影响巨大:将语料中0.1% 的数据重复100 次后,基于这些包含重复数据语料训练的800M 参数模型,其性能仅能达到在无重复语料上训练的400M 参数模型的相同表现。“双下降现象”:模型训练损失先经历下降然后出现升高再下降的现象
- 有偏、有毒、隐私内容:
- 数据集污染:训练集与测试集重叠
4.3 词元化
-
BPE:BPE 算法从一组基本符号(例如字母和边界字符)开始,迭代地寻找语料库中的两个相邻词元,并将它们替换为新的词元,这一过程被称为合并。合并的选择标准是计算两个连续词元的共现频率,也就是每次迭代中,最频繁出现的一对词元会被选择与合并。合并过程将一直持续达到预定义的词表大小。
字节级别的BPE(Byte-level BPE, B-BPE)是BPE 算法的一种拓展,实现更细粒度的分割,且解决了未登录词问题(GPT-2 、BART 和LLaMA)。GPT-2 的词表大小为50,257 ,包括256 个字节的基本词元、一个特殊的文末词元以及通过50,000 次合并学习到的词元。通过使用一些处理标点符号的附加规则,GPT2 的分词器可以对文本进行分词,不再需要使用“<UNK>” 符号 -
WordPiece 分词: BERT,与BPE类似,通过迭代合并连续的词元,但是合并的选择标准略有不同。会首先训练一个语言模型,并用这个语言模型对所有可能的词元对进行评分。然后,在每次合并时,它都会选择使得训练数据的似然性增加最多的词元对。
-
Unigram:从语料库的一组足够大的字符串或词元初始集合开始,迭代地删除其中的词元,直到达到预期的词表大小。T5 和mBART,pretrained一元语言模型,EM算法优化该模型,使用动态规划算法高效地找到语言模型对词汇的最优分词方式。
-
SentencePiece支持BPE 分词和Unigram 分词,分词器特性:无损重构(准确无误地还原为原始输入文本),高压缩率(经过分词处理后的词元数量应尽可能少,从而实现更为高效的文本编码和存储)
4.4 数据调度 - 混合比例&训练顺序
- 数据混合:
- 数据混合策略(配比):增加数据源的多样性;优化数据混合(手动/可学习方式);优化特定能力
- 数据课程:指按照特定的顺序安排预训练数据进行模型的训练:代码能力,数学能力.长文本能力.