LLM涌现出的3大能力
- 上下文学习(ICL):在GPT-3中正式被提出。在不需要重新训练的情况下,通过自然语言指令,并带几个期望输出的样例,LLM就能够学习到这种输入输出关系,新的指令输入后,就能输出期望的输出。
- 指令遵循:通过在多种任务数据集上进行指令微调,LLM可以在没有见过的任务上,通过指令的形式表现良好,因此具有较好的泛化能力。
- 逐步推理:通过思维链(COT)提示策略,即把大任务分解成一步一步小任务,让模型think step by step得到最终答案
LLM的关键技术
- 扩展:更多的模型参数、数据量和训练计算,可以有效提升模型效果
- 训练:分布式训练算法,优化技巧
- 能力引导:设计合适的任务指令或具体的上下文学习策略可以激发LLM在庞大预料上学习到的能力。此外还可以使用自然语言表达的任务描述对LLM进行指令微调。
- 对齐微调:利用了基于人类反馈的强化学习技术。所有的能力都是模型本来就有的, 而不是通过RLHF 注入的。 RLHF 的作用是触发 / 解锁突现能力。
- 工具操作:利用外部工具来弥补LLM的不足
GPT-3.5 的进化历程
能力 | OpenAI模型 | 训练方法 |
GPT-3系列 | ||
语言生成 + 世界知识 + 上下文学习 | GPT-3初始版本 **大部分的能力已经存在于模型中,尽管表面上看起来很弱。 | 语言建模 |
+ 遵循人类的指令 + 泛化到没有见过的任务 | Instruct-GPT初始版本 | 指令微调 |
+ 代码理解 + 代码生成 | Codex初始版本 | 在代码上进行训练 |
GPT-3.5系列 | ||
++ 代码理解 ++ 代码生成 ++ 复杂推理 / 思维链 (为什么?) + 长距离的依赖 (很可能) | 现在的Codex **GPT3.5系列中最强大的模型 | 在代码+文本上进行训练 在指令上进行微调 |
++ 遵循人类指令 - 上下文学习 - 推理能力 ++ 零样本生成 | 有监督的Instruct-GPT **通过牺牲上下文学习换取零样本生成的能力 | 监督学习版的指令微调 |
+ 遵循人类价值观 + 包含更多细节的生成 + 上下文学习 + 零样本生成 | 经过RLHF训练的Instruct-GPT **和002模型相比,和人类更加对齐,并且更少的性能损失 | 强化学习版的指令微调 |
++ 遵循人类价值观 ++ 包含更多细节的生成 ++ 拒绝知识范围外的问题 (为什么?) ++ 建模对话历史的能力 -- 上下文学习 | ChatGPT ** 通过牺牲上下文学习的能力换取建模对话历史的能力 | 使用对话数据进行强化学习指令微调 |
- 语言生成能力 + 基础世界知识 + 上下文学习都是来自于预训练(davinci)
- 存储大量知识的能力来自 1750 亿的参数量。
- 遵循指令和泛化到新任务的能力来自于扩大指令学习中指令的数量(Davinci-instruct-beta)
- 执行复杂推理的能力很可能来自于代码训练(code-davinci-002)--假设
- 生成中立、客观的能力、安全和翔实的答案来自与人类的对齐。具体来说:
如果是监督学习版,得到的模型是text-davinci-002
如果是强化学习版 (RLHF) ,得到的模型是text-davinci-003
无论是有监督还是 RLHF ,模型在很多任务的性能都无法超过 code-davinci-002 ,这种因为对齐而造成性能衰退的现象叫做对齐税。
- 对话能力也来自于 RLHF(ChatGPT),具体来说它牺牲了上下文学习的能力,来换取:
建模对话历史
增加对话信息量
拒绝模型知识范围之外的问题
GPT-3.5不具备的某些重要属性:
- 实时改写模型的信念:当模型表达对某事的信念时,如果该信念是错误的,我们可能很难纠正它
- 形式推理:GPT-3.5系列不能在数学或一阶逻辑等形式严格的系统中进行推理
- 从互联网进行检索:GPT-3.5 系列(暂时)不能直接搜索互联网
GPT1,GPT2,GPT3
先通过在无标签的数据上学习一个生成式的语言模型,然后再根据特定热任务进行微调GPT1的问题:fine-tune只能用到特定任务中,如果fine-tune一个分类任务,不能用到句子相似度中去。我们能不能用一个模型做所有NLP的任务,能不能尽量加所有的task。
针对GPT1的问题,GPT2做了如下改进:GPT-2开启了prompting高于finetuning的时代"意味着在某些场景下,通过合理设计的提示信息和插入策略,GPT-2模型可以产生更具控制性和语义准确度的输出,超越传统的finetuning方法。
- 去掉了fine-tuning层:不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。
- Large Dataset
- Large Dataset
- Larger dictionary,larger sequnece length and larger batch size
- 调整transformer
虽然 GPT-2 主推的 zero-shot 在创新度上有比较高的水平,但是由于其在效果上表现平平,所以在业界并没有取得比较大的影响力,而 GPT-3 正是为了解决效果上的问题而提出的。GPT-3 不再去追求那种极致的不需要任何样本就可以表现很好的模型,而是考虑像人类的学习方式那样,仅仅使用极少数样本就可以掌握某一个任务
- 在模型结构上,GPT-3 延续使用 GPT 模型结构,但是引入了 Sparse Transformer 中的 sparse attention 模块(稀疏注意力)。
资源
- 公开可用的模型检查点或API
- 常用语料库
- 代码库资源
预训练
- 数据收集
- 数据来源
- 通用文本数据:网页,对话文本,书籍
- 专用文本数据:多语言文本,科学文本,代码
- 数据预处理
- 质量过滤:基于分类器的方法和基于启发式的方法。
- 去重
- 隐私去除
- 分词
- 预训练数据对大语言模型的影响
- 混合来源
- 预训练数据的数量
- 预训练数据的质量
架构
主流架构
- Causal Decoder:从左到右的单向注意力。自回归语言模型,预训练和下游应用一致,生成类任务效果好。训练效率高。Zero-Shot能力强,涌现能力。如GPT系列、LLaMA、BLOOM、OPT
- Encoder-Decoder:输入双向注意力,输出单向注意力。对问题的编码理解更充分,在偏理解的NLP任务上表现相对较好,缺点是在长文本生成任务上效果较差,训练效率低。如T5、Flan-T5、BART
- Prefix Decoder:输入双向注意力,输出单向注意力。前两者的折中。训练效率也低。如GLM、ChatGLM、U-PaLM
配置
为了有更强的泛化能力和训练稳定性,建议选择前置的RMS进行层标准化,并选择SwiGLU或GeGLU作为激活函数。此外,在位置编码方面,RoPE或ALiBi是更好的选择,因为它们在长序列上表现更好。
预训练任务
对于训练LLM,有两个常用的预训练任务,即语言建模和去噪自编码
模型训练
1,优化设置
- 批量训练:实证结果表明,动态调整批量大小的策略可以有效地稳定 LLM的训练过程
- 学习率:有的 LLM通常在预训练过程中采用类似的学习率调整策略,包括预热(warm-up)和衰减(decay)。
- 优化器:dam优化器 和 AdamW优化器 被广泛应用于 LLM(例如 GPT-3)的训练中,这些优化器使用了基于一阶梯度优化的低阶矩自适应估计。
- 稳定训练:广泛使用权重衰减(weight decay)和梯度裁剪(gradientclipping)
2,可扩展的训练技术
- 3D并行:数据并行,流水线并行,张量并行
- ZeRo:旨在仅在每个 GPU上保留部分数据,而当需要其余数据时可以从其他 GPU中检索。
- 混合精度训练
大语言模型的适配微调
指令微调(instruction tuning)和对齐微调(alignment tuning)。前一种方法旨在增强(或解锁)LLM的能力,而后一种方法旨在将 LLM的行为与人类的价值观或偏好对齐。
- 指令微调
指令微调指的是使用一些自然语言描述的指令形式样本去用监督学习的方式微调预训练大模型(base model),经过指令精调后,LLM能在一些未见过的任务上表现较好的能力,甚至是多语言场景。
指令形式的样本实例
- 包含:任务描述(即指令),示例输入(选择),输出,解释(选择)
- 指令样本的关键:扩大指令范围,格式的设计,邀请人去注释人类需要的任务
- 策略
- 增强指令的复杂度,比如增加更多任务要求和更多的推理步骤
- 增加指令话题的多样性
- 增加指令的数量,不一定有效
- 平衡指令的复杂程度。通过困惑度去除过于简单和复杂的指令
- 结合指令微调和预训练
- 对齐微调
- 人类反馈收集:标注方式可以分为基于问题的和基于规则的
- RLHF:需要被对齐精调的预训练LM、通过人类反馈学习的的奖励模型和强化学习训练LM。
- (可选)Supervised fine-tuning:将收集的有监督指令集,包含指令+人类回答作为预训练模型fine-tuning的数据,提升LM初始化能力
- Reward model training:采样指令(来自有监督指令集或者人工生成)输入LM,LM生成若干个结果,标注员对这些结果进行排序,从而训练奖励模型
- RL fine-tuning:将对齐过程视为一个强化学习过程,预训练LM作为policy,指令作为其输入,其输出指令的回答,action space是所有词表,state是当前已经生成的tokens序列,奖励reward由第二步的奖励模型给出。
- 高效微调
- 参数高效微调方法
参数高效微调旨在减少可训练参数的数量,同时尽可能保持良好的性能
- 适配器微调:在transformer模型中引入了小型神经网络模块(称为适配器)
- 前缀微调:在语言模型的transformer层前添加了一系列前缀
- 提示微调:在输入层中加入可训练的提示向量
- 低秩适配:通过添加低秩约束来近似每层的更新矩阵,以减少适配下游任务的可训练参数
- 大语言模型上的参数高效微调
大多数方法都是在小型PLM上进行测试的,而不是在LLM上进行的。到目前为止,有关不同高效微调方法对不同设置或任务下LLM的影响仍缺乏深入的研究。
使用
经过预训练或适配微调之后,使用LLM的主要方法是为解决各种任务设计适当的提示策略。一种典型的提示方法事将任务描述和(或)示范以自然语言文本的形式表达的上下文学习。此外利用思维链可以通过一系列中间推理步骤加入提示中来增强ICL。
上下文学习
上下文学习的形式
ICL使用一种由任务描述和(或)作为示范的几个任务样例构成的自然语言提示。首先以任务描述作为开始,从任务数据集中选择一些样例作为示范。然后,以特别设计的模板形式将它们按照特定的顺序组合成自然语言提示。最后,将测试样例添加到LLM的输入中以生成输出。
ICL还与指令微调有着密切的联系,因为它们都将任务或样例转化为自然语言的形式。然而,指令微调需要微调LLM来增强适配,而ICL仅仅是以提示的方式来使用LLM。此外,指令微调还可以提高LLM执行目标任务的ICL能力,尤其是在零样本设置时(仅使用任务描述)。
示范设计
- 示范选择:主要方法有两种启发式方法和基于LLM的方法
- 示范格式:
(1)一种直接的方法是用相应的输入输出来实例化预定义的模板
(2)为了构建更具信息量的模板,添加任务描述或者通过COT来增强LLM的推理能力(3)半自动化方法,通过使用由人工编写的任务描述组成的种子集合来指导LLM为新任务生成任务描述。
(4)自动生成高质量的示范格式。Auto-Cot利用LLM使用零样本提示来生成中间推理步骤,而least-to-most提示首先询问LLM来执行问题分解,然后利用LLM根据先前解决的中间答案依次解决子问题。
- 示范顺序:
- 早期的工作提出了一些启发式方法来快速地找到一个良好的顺序。
- 全局和局部熵度量可以用来给不同的示范顺序打分
- 收到信息论的启发,一些最近的研究提出最小化压缩和传输任务标签所需的码长来整合更多的任务信息
- 为了不需要额外的标记数据作为评估特定示范顺序性能的验证集,从LLM本身采用获得验证数据
思维链提示
不同于ICL中仅使用输入输出对来构造提示,CoT将可以导出最终输入的中间推理步骤纳入提示中。
通常情况下,CoT可以在小样本和零样本设置下与ICL一起使用。
- 小样本思维链:(1)思维链提示设计(2)增强的思维链策略
- 零样本思维链
能力评测
三种基本评估任务和高级任务
基础评测任务
高级能力评估
- 与人类对齐:让LLM更够很好地符合人类的价值和需求
- 与外部环境的互动
公开基准和经验性分析