1、语言模型进程
1.1、语言模型概述
语言模型从统计语言模型(SLM)逐步发展为神经语言模型(NLM);近年,通过在大规模语料库上对 Transformer 模型进行预训练,预训练语言模型(Pre-training Language Model, PLM)被提出,在自然语言处理(Natural Language Processing, NLP)任务方面表现出强大的能力。为提高模型能力,扩展模型的规模,提出了大语言模型(Large Language Model, LLM)。当参数规模超过一定水平时,语言模型表现出 一些小规模语言模型(例如 BERT)所不具备的特殊能力(例如上下文学习)。
1.2、语言模型分类
统计语言模型(SLM):其基本思想是基于马尔可夫假设建立词预测模型,例如根据最近的上下文预测下一个词。具有固定上下文长度 n 的 SLM 也称为 n 元语言模型,例如bigram 和 trigram 语言模型。缺点是具有维度灾难
神经网络语言模型(NLM):NLM通过神经网络, 如循环神经网络(RNN),来描述单词序列的概率,提出了分布式词向量的概念。例如word2vec,缺点是只能静态地表示词向量
预训练语言模型(PLM):通过预训练模型动态地表示词向量,确定了“预训练微调”的范式。例如BERT、BART、T5、gpt1、gpt2等。缺点是通常需要经过微调来适配下游任务。
大型语言模型(LLM):在PLM的基础上,增大模型参数,使得LLM出现PLM不具有的涌现能力(Emergent Abilities),解决通用问题,其同样采用预训练+微调的形式。例如GPT-3/4、ChatGPT、Claude等;访问 LLM 的主要方法是通过提示接口(例如 GPT-4 API)
2、大语言模型概述
2.1、大语言模型背景
LLM 是指包含数千亿(或更多)参数的 Transformer 语言模型 ,这些模型是在大规模文本数据上进行训练的 , 例如 GPT-3 ,PaLM,Galactica 和 LLaMA。 LLM 展现了理解自然语言和解决复杂任务(通过文本生成) 的强大能力。
2.2、大语言模型的扩展法则
LLM 采用类似的 Transformer 架构和与小型语言模相同的预训练目标,然而LLM 大幅度扩展了模型规模、数据规模和总计算量。
KM 扩展法则:神经语言模型的性能与模型规模(N )、数据集规模(D)和训练计算量(C )之间的幂律关系,公式如下:
在给定 计算预算 c 的条件下,他们依据实验提出了三个基本公式来 描述扩展法则。L(·) 表示用 nats 表示的交叉熵损失。
Chinchilla 扩展法则:通过变化更大范 围的模型大小(7000 万到 160 亿个参数)和数据大小(50 亿到 5000 亿个 token)进行了严格的实验,并拟合了一个类似 的扩展法则,C ≈ 6ND
KM 扩展法则更偏向于将更大的预算分配给模型大小,而 Chinchilla 扩展法则则认为模型大小和数据大小应该以相同的比例增加
2.3、大模型的涌现能力
涌现能力是大模型区别小模型最显著的特征之一。
上下文学习ICL:ICL 能力是由 GPT-3 正式引入的:假设已经为语言模型提供了一个自然语言指令和或几个任务演示,它可以通过完成输入文本的单词序列的方式来为测试实例生成预期的输出,而无需额外的训练或梯度更新
指令微调IFT:通过使用自然语言描述的混合多任务数据集进行微调(称为指令微调),LLM在未见过的以指令形式描述的任务上表现出色。通过指令微调,LLM 能够在没有使用显式示例的情况下遵循新的任务指令,因此它具有更好的泛化能力。
逐步推理COT:对于小型语言模型而言,通常很难解决涉及多个推理步骤的复杂任务,例如数学问题。然而,通过使用思维链(Chain-of-Thought, CoT)提示策略,LLM 可以通过利用包含中间推理步骤的提示机制来解决这类任务,从而得出最终答案。
2.4、大模型历程
近几年现有的 LLM(大小超过 100 亿)的时间轴
近几年现有LLM模型训练数据及硬件、模型大小、COT、ICL能力评估情况
涌现, emerge(abilities), 即一般指在大模型中出现而小模型没有的能力。 一般包括上下文学习(ICL)、指令微调(IFT)、思维链(CoT)等。
LLM大致可分为pre-train阶段、tuning阶段,使用(prompt)阶段。
pre-train让预训练模型获得基本的语言能力。
tuning阶段对模型调优增强其语言能力、使模型输出符合正确的价值观。
最后使用prompt方法,比如ICT和CoT,提高模型的推理能力。
3、LLM大模型预训练
3.1、语料库
语料库分为六个组别进行介绍:Books(书籍)、 CommonCrawl(爬虫数据库)、Reddit Links(社交平台的链接和帖子)、Wikipedia(在线百科全书)、Code(开源代码库)、Others。
3.2、数据收集
预训练语料库的来源可以广义地分为两种类型:通用文本数据和专用文本数据。
通用文本:网页、对话、书籍
专用文本:多语言文本、代码、科学文本
预训练中各种语料占比:
3.3、数据处理
在收集大量文本数据后,对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据,对于构建预训练语料库是必不可少的,因为这些数据可能会极大地影响 LLM 的能力和性能。
数据处理流程
质量过滤:删除收集到的语料库中的低质量数据
-
基于语言的过滤:如果 LLM 主要用于某项语言的任务中, 那么其他语言的文本可以被过滤掉。
-
基于度量的过滤:可以利用生成文本的评估度量,例如困惑度(perplexity),来检测和删除不自然的句子。
-
基于统计的过滤:可以利用语料库的统计特征,例如标点符号分布、符号与单词比率和句子长度,来衡量文本质量并过滤低质量数据。
-
基于关键词的过滤:基于特定的关键词集合,可以识别和删除文本中的噪声或无用元素,例如 HTML 标签、超链接、模板和攻击性词语。
去重:语料库中的重复数据会降低语言模型的多样性,可能导致训练过程不稳定,从而影响模型 性能
隐私去除:大多数预训练文本数据来自网络来源,包括涉及敏感或个人信息的用户生成内容,这可能增加隐私泄露的风险
分词:合理利用分词器,保留文本含义
3.4、训练框架
Transformer 架构的出色并行性能和任务完成能力,Transformer 架构已成为开发各种 LLM 的标准骨干; LLM主要有3种架构,编码器-解码器、因果解码器和前缀解码器
编码器-解码器框架:编码器采用堆叠的多头自注意层对输入序列进行编码以生成其潜在表示,而解码器对这些表示进行交叉注意并自回归地生成目标序列,bart和t5。
因果解码器架构:因果解码器架构采用单向注意力掩码,以确保每个输入 token 只能关注过去的 token 和它本身。输入和输出 token 通过解码器以相同的方式进行处理。作为这种架构的代表性语言模型,GPT 系列模型
前缀解码器架构:修正了因果解码器的前缀机制使其执行双向注意力,对生产的token执行单向注意力。
3种训练框架可以通过moe混合专家来扩展。
3.5、其他训练配置
标准化、激活函数、位置编码在大模型预训练中至关重要。llm中一般使用前置的LN(层级norm),解决模型训练稳定性,llm使用前置LN是为了避免数据爆炸,llm使用前置的 RMS 进行层标准化;为获得良好的性能,llm选择合适的激活函数,llm激活函数一般为gelu、SwiGLU 、 GeGLU;传统预训练模型一般采用正弦和学习位置编码,为提高模型的外推能力(长序列建模能力),llm一般采用相对位置编码RoPE 、ALiBi;常见大模型参数配置如下:
大模型常用的norm、激活函数、位置编码计算公式如下:
3.6、预训练任务
预训练一般分两种方式自回归语言模型Language Modeling(LM)和去噪语言建模Denoising Autoencoding(DAE)
自回归语言模型,基于序列前面的token自回归地预测当前token,一般目标函数为最大化如下似然函数:
去噪语言建模,类似于bert的mlm预测任务,mask掉某个词,根据上下文预测mask掉的词。这种方式一般应用在plm语言模型中。
3.7、预训练模型训练
LLM 的参数优化,一般需要考虑因素:批量训练、学习率、 优化器和训练稳定性
批量训练:llm的batch一般较大、动态调整批量大小的策略可以有效地稳定 LLM 的训练过程;或者百万token维度
学习率:llm一般采用学习率调整策略,包括预热(warm-up)和衰减(decay);在训练的初始 0.1% 到 0.5% 的步骤中,采用线性预热策略逐渐增加学习率到最大值,这个最大值通常在 5 × 10−5 到 1 × 10−4 之间(例如 GPT-3 的学习率为 6 × 10−5)。然后,在后续步骤中采用余弦衰减策略,逐渐将学习率降低到其最大值的约10%,直到训练损失的收敛
优化器:adam和adamw一般应运用llm,一阶梯度优化的低阶矩自适应估计优化器;adamw提出用来解决llm loss突刺
稳定性保证:权重衰减(weight decay)和梯度裁剪(gradient clipping)
并行训练技术:3d并行:数据并行、流水线并行、张量并行;
混合精度训练:fp16、bp16、int8、int4
并行开源库:DeepSpeed 、Colossal-AI和 Alpa
常见大模型训练参数配置如下:
4、大模型适配微调
预训练后,LLM获得了大模型的通用能力
4.1、指令微调
指令微调是在自然语言格式的实例(instance)集合上微调预训练后的 LLM 的方法
4.1.1、格式化指令
一般,一个指令格式的实例包括一个任务描述(称为指令)、一对输入-输出以及少量示例(可选),构建完后,利用这些实例进行SFT
几种格式化方法,格式化如下图
4.1.2、指令微调技巧
多设计几种指令、混合各种任务,且平衡各任务的分布、指令微调结合预训练等技巧能有效地提高模型的效率。
4.2、对齐微调(RLHF)
4.2.1、对齐重要性
与指令微调不同,对齐微调可能需要考虑一些标准,有用性(简单回答用户问题)、诚实性(回答问题不捏造)、无害性(回答问题不具伤害性)等。
4.2.2、人类反馈收集
人类对llm输出的主观和定性评估对llm学习人类偏好和价值观非常有用。
通常通过3种方式来收集人类反馈
基于排序方法,以列表的方式选出最好的一个选项,可能会忽略其他的情况。组成pair构建哪个更好的方式能获取更多的信息。
基于问题的方法:给出一些关于此次模型输出 是否有用/诚实/无害的判断类问题,人类需要对这些问题选择选项进行回答,这些将作为反馈。
基于规则的方法:设定一些规则或者训练一个反馈模型判断该反馈是否带有有害内容。
4.2.3、人类反馈的强化学习RLHF
主要包含3个步骤sft(有监督微调)、rm(反馈模型)、ppo(强化学习微调)
sft:为了使 LM 具有初步执行所需行为的能力, 通常需要收集一个包含输入提示(指令)和所需输出的监督数据集,以对 LM 进行微调。
rm:向LM 中输入采样的提示,以生成一定数量的输出文本,然后邀请人工标注员为这些输入-输出对标注偏好,训练 RM 预测人类偏好的输出.
ppo:使用 PPO 算法对抗 RM 来优化 LM 时,对于每个输入提示,InstructGPT 计算当前 LM 和初始 LM 生成的结果之间的 KL 散度作为惩罚项
4.2.4、llm高效微调
llm高效微调主要在于减少llm模型参数更新的数量;主要的微调方式有适配器微调(adapter tuning)、前缀微调(prefix tuning)、提示微调(prompt tuning)和低秩适配(LoRA)
4.2.4.1、适配器微调
适配器微调:在 Transformer 模型中引入了小型神经网络模块;先将原始特征向量压缩到较小的维度(然后进行非线性变换),然后将其恢复到原始维度。适配器模块将被集成到每个 Transformer 层中,通常使用串行插入的方式,分别在Transformer 层的两个核心部分(即注意力层和前馈层)之后。在训练时,原始llm被冻结、只更新适配器的参数,这种方式大大提高了训练的速度,但是推理速度变慢,为此提出了AdapterDrop。为了适配不同的任务,提出了AdapterFusion,N个不同的下游任务训练N个Adapter模块。然后使用AdapterFusion组合N个适配器中的知识。K-Adapter被提出,即插即用。详情预训练模型微调 | 一文带你了解Adapter Tuning - 知乎
https://arxiv.org/pdf/2304.01933.pdf
Series Adapter:adapter由一个双层前馈神经网络组成,该网络包括一个向下投影矩阵、一个非线性函数、一个向上投影以及输入和输出之间的残差连接。
Parallel Adapter:模块与多头注意力机制并行集成
4.2.4.2、前缀微调
前缀微调:前缀微调在语言模型的每个 Transformer 层 前添加了一系列前缀,这些前缀是一组可训练的连续向量。这些前缀向量具有任务的特异性,可以视为虚拟的 token 嵌入。学习一个将较小矩阵映射到前缀参数矩阵的 MLP 函数,而不是直接优化前缀。由于只有前缀参数会被训练,因此可以实现参数高效的模型优化。
p-tuning v2 特别为自然语言理解而在 Transformer 架构中引入了逐层提示向量,并且还利用多任务学习来联合优化共享的提示。
大型语言模型的参数微调原理:从前缀微调到LLaMA-适配器 - 知乎
4.2.4.3、提示微调
提示微调:与前缀微调不同,提示微调主要是在输入层中加入可训练的提示向量。基于离散提示方法, 它通过包含一组软提示 token(以自由形式或前缀形式来扩充输入文本,然后将扩充后的输入用于解决特定的下游任务。P-tuning 提出了一种自由形式来组合上下文、提示和目标 token,适用于自然语言理解和生成的架构。
4.2.4.4、低秩适配
低秩适配lora:
- 在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的
intrinsic rank
。 - 训练的时候固定 PLM 的参数,只训练降维矩阵 A与升维矩阵B。而模型的输入输出维度不变,输出时将 BA与 PLM 的参数叠加。
- 用随机高斯分布初始化 A,用 0 矩阵初始化 B,保证训练的开始此旁路矩阵依然是 0 矩阵。
- 低秩适配(LoRA) 通过添加低秩约束来近似每层的更新矩阵,以减少适配下游任务的可训练参数。考虑优化参数矩阵 W 的情况。更新过程可以写成一般形式:W ← W + ∆W。LoRA 的基本思想是冻结原始矩阵 W ∈ Rm×n, 同时通过低秩分解矩阵来近似参数更新矩阵 ∆W = A · B⊤, 其中 A ∈ Rm×k 和 B ∈ Rn×k 是用于任务适配的可训练参数, r ≪ min(m, n) 是降低后的秩。
LORA:大模型轻量级微调
4.2.5、提词工程
经过预训练或适配微调之后,使用 LLM 的主要方法是为解决 各种任务设计适当的提示策略。一种典型的提示方法是将任务描述和(或)示范(demonstration)以自然语言文本的形式表达的上下文学习(in-context learning, ICL) 。此外,采用思维链提示(chain-of-thought prompting)可以通过将一系列中间推理步骤加入提示中来增强 ICL。接下来, 我们将详细介绍这两种技术的细节。ICL和COT 示例图如下
4.2.5.1、上下文学习(in-context learning, ICL)
ICL 使用一种由任务描述和(或)作为 示范的几个任务样例构成的自然语言提示,表示如下
4.2.5.2、思维链(Chain-of-Thought,CoT)
思维链(Chain-of-Thought,CoT)是一种改进的提示策略,旨在提高 LLM 在复杂推理任务中的性能,例如算术推理 ,常识推理 和符号推理。不同于 ICL 中仅使用输入输出对来构造提示,CoT 将可以导出最终输出的中间推理步骤纳入提示中。思维链的演进之路如下图所示
小样本思维链:小样本 CoT 是 ICL 的一个特例,它通过加 入 CoT 推理步骤将每个示范 〈 输入,输出 〉 扩充为 〈 输入, CoT,输出 〉。
零样本思维链:与小样本 CoT 不同,零样本 CoT 没有在提示 中加入人工标注的任务示范。相反,它直接生成推理步骤,然后利用生成的 CoT 来得出答案。零样本 CoT 最初是在中被提出的;其中,首先通过用“Let’s think step by step”提 示 LLM 来生成推理步骤,然后通过用“Therefore, the answer is”提示来得出最终答案。
5、评估
llm主要关注3种评估任务,语言生成、知识利用、复杂推理。
5.1、语言生成
语言生成主要有3种任务,语言模型、条件文本生成、代码合成
5.1.1、语言生成分类
语言模型:根据上文token预测下一个token,一般根据困惑度、预测token的准确度指标来评估模型
条件文本生成:基于给定的条件生成满足特定任务需求的文本,通常包括机器翻译 、文本摘要和问答系统,使用自动化指标(如准确率、BLEU 和 ROUGE )和人类评分来评估性能
代码合成:除了生成高质量的自然语言外,现有的 LLM 还表现出强大的生成形式语言的能力,尤其是满足特定条件的计算机程序(即代码),这种能力被称为代码合成。计算测试用例的通过率(即 pass@k)来评估 LLM 生成的代码的质量
5.1.2、待解决问题
可控生成:LLM 生成给定条件下文本的主流方法,是使用自然语言指令或提示。LLM 可以很好地处理局部关系(例如相邻句子之间 的交互),但可能难以解决全局关系(即长程相关性)。
专业化生成:尽管LLM已经学习到了一般的语言模式, 且可以以此生成连贯的文本,但在处理专业的领域或任务时, 它们的生成能力仍然可能受到限制。
5.2、知识利用
知识利用是一种智能系统基于事实证据的支撑,完成知识密集型任务的重要能力(例如常识问题回答和事实补全)。
5.2.1、问题类型
知识利用主要分为2种,开卷问答和闭卷问答
闭卷问答:LLM 只能基于给定的上下文回答问题, 而不能使用外部资源;评估指标准确率
开卷问答:与闭卷问答不同,在开卷问答任务中,LLM 可以从外部知识库或文档集合中提取有用的证据,然后基于提取的证据回答问题
知识补全:在知识补全任务中,LLM(在某种程度上)可以被视为一个知识库 ,补全或预测知识单元(例如知识三元组)的缺失部分。
5.2.2、待解决问题
幻觉(Hallucination):在生成事实文本时,一个具有 挑战性的问题是幻觉生成 ,即,生成的信息与现有来源相冲突(内在幻觉)或无法通过现有来源验证(外在幻觉)。
知识实时性:另一个主要挑战是,对于需要使用比训练数据更新的知识的任务时,LLM 在解决这些任务时会遇到困难。为了解决这个问题,一个直接的方法是定期用新数据更新 LLM。
5.3、复杂推理
复杂推理是指理解和利用相关的证据或逻辑来推导结论或做出决策的能力。根据推理过程中涉及的逻辑和证据类型,我们考虑将现有的评估任务分为三个主要类别,即知识推理、符号推理和数学推理
5.3.1、问题类型
知识推理:知识推理任务依赖于逻辑关系和事实知识的证据来回答给定的问题。生成结果的准确性,自动化评测(例如 BLEU)或人类评估的方法
符号推理:符号推理任务主要关注于在形式化规则设定中操作符号以实现某些特定目标 ,且这些操作和规则可能在 LLM 预训练期间从未被看到过
数学推理:数学推理任务需要综合利用数学知识、逻辑和计算来解决问题或生成证明过程。现有的数学推理任务主要可 分为数学问题求解和自动定理证明两类。
5.3.2、存在问题
不一致性:通过改进推理策略(如使用 CoT),LLM 可以基于逻辑和支撑性证据逐步执行推理过程,从而解决一些 复杂的推理任务。尽管这种方法是有效的,但在推理过程中经常出现 不一致性问题。具体而言,LLM 可能会在错误的推理路径下仍生成正确答案,或者在正确的推理过程之后产生错误答案
数值计算:对于复杂的推理任务,LLM 在数值计算上仍然面临困难,特别是对于在预训练阶段很少遇到的符号,例 如大数字的算术运算。为了解决这个问题,一种直接的方法是在合成的算术问题上微调 LLM 。抑或是提供插件机制
5.4、与人类对齐评估
与人类对齐(human alignment):指的是让 LLM 能够很好地符合人类的价值和需求。人类对齐的标准,例如有益性、真实性和安全性。具体指令和设计标注规则来指导评价过程,可以提高人类对齐能力。
与外部环境的互动:LLM 有从外部环境接收反馈并根据行为指令执行操作的能力,例如生成自然语言行动计划以操纵智能体
工具使用:LM可以在必要的情况下利用外部工具。 通过封装可用工具的 API 调用,现有的工作已经考虑了各种 外部工具,例如搜索引擎、计算器和编译器等 等,以增强 LLM 在特定任务上的性能。
参考文献
【1】https://arxiv.org/pdf/2311.05232.pdf (llm幻觉问题梳理)
【2】LLM幻觉问题全梳理,哈工大团队50页综述重磅发布-36氪
【3】《A Survey of Large Language Models》笔记 - 知乎
【4】https://arxiv.org/pdf/2303.18223.pdf(大模型综述)
【5】GitHub - RUCAIBox/LLMSurvey: The official GitHub page for the survey paper "A Survey of Large Language Models".
【6】大模型 LLM 综述, A Survey of Large Language Models - 知乎
【7】https://github.com/RUCAIBox/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf(中文版模型综述)
【8】预训练模型微调 | 一文带你了解Adapter Tuning - 知乎
【9】https://arxiv.org/pdf/2304.01933.pdf
【10】LORA:大模型轻量级微调
【11】大模型的领域适配 —— Parameter-Efficient Fine-Tuning (PEFT) - 知乎
【12】大模型参数高效微调技术原理综述(三)-P-Tuning、P-Tuning v2 - 知乎