1.4.llm_sft_and_usages
微调
指令微调(instruct tuning):增强/解锁LLM的能力,
对齐微调(alignment tuning):将LLM的行为与为类的价值观或偏好对齐。
高效微调方法:用于模型快速适配
指令微调
收集或构建指令格式(instruction-formatted)的实例
使用这些示例进行有监督微调
详见综述Is prompt all you need? no. A comprehensive and broader view of instruction learning
构建格式化实例
指令格式的实例包括一个任务描述(即指令)、一对输入输出和少量示例(可选)
格式化已有数据集
收集来自不同领域(文本摘要、文本分类、翻译等)的实例来创建有监督的多任务训练数据集。用自然语言的任务描述来格式化这些数据集是很方便的。
使用人类撰写的任务描述来增广带标的数据集,通过解释任务目标来指导LLM理解任务。
众包平台(如PromptSource)有效地创建、共享和难不同数据集的任务描述
通过指令微调特殊设计的任务描述,反转已有实例的输入-输出对,例如“请基于以下答案生成一个问题”,如
利用启发式任务模板将大量无标注的文本转换为带标注的实例。如Learning instructions with unlabeled data for zero-shot cross-task generalization
格式化人类需求
来自公共NLP数据集的训练实例虽然进行了格式化,但任务描述缺乏多样性或与人类真实需求不匹配,故InstructGPT采用真实用户提交给其API的查询作为任务描述。此外,为了丰富任务多样性,通常
标注者为真实生活中的任务编写指令,如开放式生成、开放式问答、头脑风暴、聊天等
另一组标注人员直接对这些指令进行回答
将**指令(采集的用户查询)和期望输出(人工编写的答案)**pair对作为一个训练实例
还有一些半自动化的方法将现有实例输入到LLM中生成多样的任务描述和实例来构建实例,如
构建实例的关键
增加指令:
扩大任务数量:可以极大提高LLM的泛化能力。但随着任务增加,模型性能最初是连续增长,但任务数量达到一定水平时,性能基本不提升了。Scaling instruction-finetuned language models猜测,一定数量的代表性性任务就能够提供足够充足的知识了。
增强任务描述的多样性:从如长度、结构、创造力等方面入手,如Multitask prompted training enables zero-shot task generalization
每个任务的实例数量:通常少量实例就可以让模型有不错的泛化能力,当某些任务的实例数量进一步增加(至数百个)时可能会过拟合。如Super-NaturalInstructions: Generalization via Declarative Instructions on 1600+ NLP Tasks
设计格式:
任务描述:LLM理解任务的最关键部分
适当数量的示例:能产生实质性的改进,也减轻对指令工程的敏感性。如Scaling instruction-finetuned language models
指令中的其他部分:如避免事项、原因、建议,影响很小,甚至有负面影响,如Cross-task generalization via natural language crowd- sourcing instructions
包含推理数据集的CoT实例:Scaling instruction-finetuned language models和OPT-IML: scaling language model instruction meta learning through the lens of generalization提到同时用包含和不包含CoT的样本微调,能在各种下游任务取得好的效果,包括需要多级推理能力的任务(常识问答、算术推理)和不需要多级推理的任务(如情感分析和抽取式问答)。
指令微调策略
相比预训练而言,指令微调有多个不同:
训练目标函数:如seq2seq的loss
优化参数设置:更小的batchsize和学习率
平衡数据分布:平衡不同任务间的比例:
实例比例混合策略(Exploring the limits of transfer learning with a unified text-to-text transformer),把所有数据集合并,然后从混合数据集中按比例采样每种实例。
设置最大容量:限制数据集中能包含的最大实例数,防止较大数据集挤占整个采样集合,通常设置为几千或几万,如Exploring the limits of transfer learning with a unified text-to-text transformer和OPT-IML: scaling language model instruction meta learning through the lens of generalization。
结合指令微调和预训练:
在指令微调时加入预训练数据:,如OPT-IML, 可以看成是对模型的正则化。
混合预训练数据(纯文本)和指令微调(指令格式)数据,用多任务方式从头训练:Exploring the limits of transfer learning with a unified text-to-text transformer和Ext5: Towards extreme multi-task scaling for transfer learning。将指令格式数据集作为预训练语料库的一小部分来预训练,同时获得预训练和指令微调的优势,如GLM-130B和Galactica。
指令微调效果
性能改进
不同规模的模型都能从指令微调中受益,随着参数规模增加,性能也有提升。Multitask prompted training enables zero-shot task generalization发现,指令微调后的小模型甚至能比未经微调的大模型效果更好
指令微调在不同模型架构、预训练目标和模型适配方法上都有稳定改进效果,由Scaling instruction-finetuned language models发现
指令微调是提升现有LM(包括小型PLM)能力的一个通用方法,同样由Scaling instruction-finetuned language models发现
LLM所需的指令数据数量明显少于预训练数据,故指令微调的成本较低。
任务泛化性
赋予LLM遵循人类指令执行特定任务的能力(通常被视为一种涌现能力):Scaling instruction-finetuned language models发现,指令微调鼓励LLM理解用于完成任务的自然语言指令,,即在未见过的任务上也能执行。
使LLM具有更强的解决现实世界任务的能力:指令微调能帮助LLM缓解一些弱点(如生成重复内容或补全输入但完不成成相应任务),由Scaling instruction-finetuned language models和Training language models to follow instructions with human feedback发现。
指令微调后的LLM能泛化到其他语言的相关任务上:Crosslingual generalization through multitask finetuning提出的BLOOMZ-P3基于BLOOM在纯英文的P3任务集合上进行微调,在多语言的句子实例任务中,相比BLOOM有超过50%的性能提升,同时仅用英文指令就能产生不错效果,减少针对特定语言的指令工程的工作量。
对齐微调
Training language models to follow instructions with human feedback和Alignment of language agents提出,LLM可能编造虚假信息、产生有害的、误导性的和有偏见的表达,因为LLM在预训练时没有考虑人类的价值观或偏好。
Improving alignment of dialogue agents via targeted human judgements和Training language models to follow instructions with human feedback提出了人类对齐,使LLM的行为能够符合人类期望。
Training language models to follow instructions with human feedback、A general language assistant as a laboratory for alignment和Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback发现,和适配微调(如指令微调)相比,对齐微调要考虑的标准并不同,这可能会在某种程度上损害LLM的通用能力,即对齐税。
对齐的标准
有用性:以简洁且高效的方式帮助用户解决任务或回答问题。需要进一步阐明问题时,应该有通过提出恰当的问题来获取额外信息的能力,并有合适的敏感度、洞察力和审慎度(from A general language assistant as a laboratory for alignment)。
诚实性:又称为正确性,提供准确内容,传达适当的不确定性很重要,避免任何形式的欺骗或信息误传。LLM了解其能力和知识水平(知道自己不知道什么)。A general language assistant as a laboratory for alignment)认为,与有用性和无害性相比,诚实性是一个更客观的标准,故诚实性对齐依赖的人力可能更少。
无害性:生成的语言不得是冒犯性或者歧视性的,能检测到隐蔽的出于恶意目的的请求。当被诱导去执行危险行为(如犯罪)时,应该礼貌拒绝。Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback提出,某个行为是否有害及有害程度因个人和社会而异。
对齐的标准很主观,难以直接作为LLM的优化目标。比较有前景的方法是Red teaming language models to reduce harms: Methods, scaling behaviors, and lessons learned和Red teaming language models with language models提出的红队攻防,用对抗的方式手动或自动地探测LLM,使其生成有害输出,再更新模型防止此类输出。
收集人类反馈
选择标注人员
教育水平要求高:Sparrow要求本科学历的英国人,Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback中的高优任务有一半是美国硕士
意图一致性筛选:InstructGPT通过标注人员和研究人员意图一致性来选择标人员。研究者先自己标少量数据,然后衡量自己和标注人员间标的一致性,选择一致性最高的标注人员来进行后续标注。
选择优秀标注者:Teaching language models to support answers with verified quotes中,研究人员评估标注人员的表现,选出如高一致性之类的一组优秀标注人员继续合作,Learning to summarize from human feedback发现,在标注时提供详细的标注指令和实时的指导是有帮助的。
收集反馈
基于排序的方法:
只选最佳候选:Fine-tuning language models from human preferences和Recursively summarizing books with human feedback在这种早期工作中,标注人员用比较粗略的方式评估模型生成的结果,如只选择最佳候选。一方面不同人意见不同,另一方面这种方法忽略了没被选中的样本。
elo评分系统:Improving alignment of dialogue agents via targeted human judgements和Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback提出了elo评分系统,两两比较所有候选输出结果,生成一个偏好排序。
基于问题的方法:回答研究人员设计的特定问题,这些问题覆盖不同的对齐标准以及其他对LLM的约束条件。例如WebGPT中,标注人员要回答关于检索到的文档对回答给定输入是否有帮助的选择题。
基于规则的方法:
Sparrow不仅选择标注人员挑选的最佳回复,还设计一系列规则来测试模型生成的回复是否符合有用、正确、无害的标准,让标注者对模型生成的回复违反规则的程度进行打分。
GPT-4用一组基于GPT-4的zero-shot分类器作为基于规则的奖励模型,自动确定模型生成的输出是否违反一组人类编写的规则。
RLHF
详见RLHF章节
高效微调
全量参数都微调成本很大,有更高效的方法,称为参数高效微调(parameter-efficient fine-tuning)。
适配器微调(adapter tuning)
Parameter-efficient transfer learning for NLP提出,在Transformer中引入一个小型神经网络模块(适配器),LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Models也提出了瓶颈架构:
将原始特征压缩到较小维度(然后进行非线性变换)
恢复到原始维度
一般是串行插入的方式,集成到每个Transformer层里,分别放到注意力层和前馈层之后。Towards a unified view of parameter- efficient transfer learning提出了并行适配器,即与注意力层和前馈层并行。
微调时,原参数不变,仅更新适配器模块参数。
前缀微调(prefix tuning)
Prefix-tuning: Optimizing continuous prompts for generation。
在每个Transformer层前添加一系列前缀,即一组可训练的连续向量。前缀向量具有任务的特异性,可以看作虚拟的token emb。
重参数化技巧:
学习一个将较小矩阵映射到前缀参数矩阵的MLP函数,而不是直接优化前缀,有助于稳定训练。
优化后,舍弃映射函数,只保留派生的前缀向量以增强与特定任务相关的性能。
由于只训练前缀参数,故能实现参数高效的模型优化
P-tuning v2: Prompt tuning can be comparable to fine- tuning universally across scales and tasks提出了p-tuning v2,为了自然语言理解在Transformer中引入逐层提示向量,还利用多任务学习来联合优化共享的提示。
提示微调(prompt tuning)
在输入层加入可训练的提示向量,基于离散提示方法(How can we know what language models know?和Autoprompt: Eliciting knowledge from lan- guage models with automatically generated prompts),通过包含一组软提示token来扩充输入文本,再用扩充后的输入来解决特定的下游任务。将任务特定的提示emb与输入文本的emb相结合,输入模型中。
GPT understands, too:提出了P-tuning,用自由形式来组合上下文、提示和目标token,用双向LSTM学习软提示token的表示,适用于自然语言理解和生成的架构。
The power of scale for parameter-efficient prompt tuning:提示微调,直接在输入前加入前缀提示。训练时只有提示emb会根据特定任务进行监督学习。这种方法在输入层只包含少量可训练参数,故其效果高度依赖底层语言模型的能力。
低秩适配(LoRA)
LoRA的优点:
大大节省内存和存储(如VRAM,Video Random Access Memory)
可以只保留一个大型模型副本,同时保留多个用于适配不同下游任务的特定低秩分解矩阵。
用更有原则的方法设置秩:
基于重要性分数的分配:Adaptive budget allocation for parameter-efficient fine-tuning提出的AdaLoRA
小结
LoRA已经有广泛的应用,如LLaMA和BLOOM,
Alpaca-LoRA:Instruct-tune llama on consumer hardware,通过LoRA训练的Alpaca的轻量级微调版本。
LLaMA-Adapter:Llama-adapter: Efficient fine-tuning of language models with zero-init attention将可学习的提示向量插入每个Transformer层中,提出零初始化的注意力,通过减轻欠拟合提示向量的影响以改善训练,还能扩展到多模态设置,如视觉问答。
LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Models比较了串行适配器微调、并行适配器微调和LoRA,在GPT-J(6B)、BLOOM(7.1B)和LLaMA(7B)上评估:这些方法在困难任务上效果不如GPT-3.5,但在简单任务上表现相当,LoRA表现相对较好且使用的可训练参数明显较少。
huggingface开源了Peft: State-of-the-art parameter-efficient fine-tuning methods,包括LoRA/AdaLoRA、前缀微调、P-Tuning、提示微调,支持GPT-2和LLaMA,还支持视觉Transformer如ViT和Swin Transformer。
让大模型不再「巨无霸」,这是一份最新的大模型参数高效微调综述
Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey
lora变种
DoRA
DoRA: Weight-Decomposed Low-Rank Adaptation
LoRA可以认为是对Finetune微调的一种低秩近似,通过增加Rank,LoRA可以达到类似Finetune的微调效果。因此之前多数研究都把LoRA和Finetune在微调准确性上的差异归结为二者的优化参数量不同。
但经过分析发现,lora的学习模式和FT很不一样,更偏向于大开大合,即方向和幅度呈很强的正相关,可能对更精细的学习有害
dora通过同时关注权重更新时的大小和方向变化,实现了比LoRA更加接近finetune微调效果:
fourierft
ICML 2024 | 脱离LoRA架构,训练参数大幅减少,新型傅立叶微调来了
https://github.com/Chaos96/fourierft
SFT技巧
使用
上下文学习
GPT-3提出ICL,将任务描述和(或)示范(demonstration)以自然语言文本形式表达。
上下文学习形式
以任务描述作为开始,从任务数据集中选择一些样例作为示范。
以特别设计的模板形式将它们按照特定的顺序组合成自然语言提示。
将测试样例添加到LLM的输入中以生成输出。
更多的可以参考综述A survey for in-context learning
指令微调可以提高LLM执行目标任务的ICL能力,尤其是零样本场景(仅使用任务描述)。
示范设计
示范选择
启发式方法:
基于knn的检索器来选择与查询语义相关的样例:如What makes good in-context examples for gpt-3?和Does GPT-3 generate empathetic dialogues? A novel in-context example selection method and automatic evaluation metric for empathetic dialogue generation。但只是针对每个样例单独选择,而不是对整个样例集合进行评估。
同时考虑相关性和多样性的选择策略:Complementary Explanations for Effective In-Context Learning
基于LLM的方法:
直接用LLM来选择:Finding supporting examples for in-context learning:LLM可以直接根据添加样例后的性能提升评估每个样例的信息量,以进行选择。
两阶段检索:Learning to retrieve prompts for in-context learning:提出EPR,先用无监督方法召回相似样例,再用密集检索器(用LLM标记的正负样例训练)进行排序。
RL方法:Active example selection for in-context learning,将示范选择任务建模为RL问题,LLM是奖励函数,为训练策略模型提供反馈。
用LLM来生成示范:Chatgpt outperforms crowd-workers for text-annotation tasks发现LLM在文本标方面表现很好,故可以直接将LLM作为无人工干预的示范生成器,如Self-generated in-context learning: Leveraging auto-regressive language models as a demonstration generator和Selective in-context data augmentation for intent detection using pointwise v-information
An explanation of in-context learning as implicit bayesian inference提到,ICL中选择的示范样例应该包含足够的有关待解决任务的信息,并与测试查询相关。
示范格式
将选择的示范进行整合以及格式化:
收集包含人工编写的任务描述的大规模数据集:Cross-task generalization via natural language crowd- sourcing instructions,能够提升已见任务的性能,也能在一定程度泛化到未见任务。
半自动化方法:Self-instruct: Aligning language model with self generated instructions使用由人工编写的任务描述组成的种子集合来指导LLM为新任务生成任务描述。
自动生成高质量的示范格式:
Auto-CoT:Automatic chain of thought prompting in large language models使用零样本提示(let's think step by step)以生成中间推理步骤
least-to-most提示:Least-to-most prompting enables complex reasoning in large language models先询问LLM来执行问题分解,再利用LLM根据已解决的中间答案依次解决子问题。
示范顺序
LLM有时会被顺序偏差影响,例如Calibrate before use: Improving few-shot performance of language models提出LLM会倾向于重复示范结尾附近的答案===>结尾很重要!!
启发式方法:What makes good in-context examples for gpt-3?根据在emb空间中示范与查询的相似度来排列,相似度越高,距离结尾越近。
基于信息论的方法:
Self-adaptive in-context learning使用最小化压缩和传输任务标签所需的码长来整合更多任务信息,需要额外的标记数据作为用来评估特定示范顺序性能的验证集。
Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity使用全局和局部熵度量来为不同的示范顺序打分,且为了消除对额外标注数据的需要,这篇文章从LLM本身采样来获取验证集。
底层机制
预训练如何影响ICL
ICL与预训练任务设计:GPT-3发现ICL能力随模型增大而增强,但Metaicl: Learning to learn in context发现小规模的PLM也能通过特别设计的训练任务从而表现出强大的ICL能力(例如输入是任务实例+查询,预测标签),甚至能超越规模更大的模型。
ICL与预训练语料:
On the effect of pretraining corpora on in-context learning by a large-scale language model发现ICL的性能主要取决于预训练语料的来源而非规模
Data Distributional Properties Drive Emergent In-Context Learning in Transformers分析训练数据分布的影响,发现当训练数据可以被聚类成多个不常见的类,而不是均匀分布时,模型会有ICL能力
An explanation of in-context learning as implicit bayesian inference从理论上解释,认为ICL是在具备长程连贯性的文档上进行预训练的产物。
LLM如何实现ICL
将ICL视为隐式微调:Why can GPT learn in-context? language models secretly perform gradient descent as meta-optimizers和Transformers learn in-context by gradient descent
ICL可以看成是通过前向计算,LLM生成关于示范的元梯度,并通过注意力机制隐式地梯度下降。
LLM的某些注意力头能执行与ICL能力密切相关的任务无关的原子操作(如复制、前缀匹配等)
将ICL视为算法学习过程:Transformers as algorithms: Generalization and implicit model selection in in-context learning、What learning algorithm is in-context learning? investigations with linear models,基于这个解释框架,LLM能通过ICL有效地学习简单的线性函数,甚至是如决策树的复杂函数
预训练阶段:LLM本质上通过其参数对隐式模型进行编码
前向计算阶段:通过ICL中提供的示例,LLM可以实现如sgd的学习算法,或者直接计算出闭式解以更新这些模型
思维链提示(CoT)
CoT是一种改进的提示策略,旨在提高LLM在复杂推理任务中的性能,如算术推理(Training verifiers to solve math word problems、Are NLP models really able to solve simple math word problems?和A diverse corpus for evaluating and developing english math word problem solvers)、常识推理(Commonsenseqa: A question answering challenge targeting commonsense knowledge和Did aristotle use a laptop? A question answering benchmark with implicit reasoning strategies)、符号推理(Chain of thought prompting elicits reasoning in large language models)。
ICL只使用输入输出对来构造提示,而CoT将最终输出的中间推理步骤加入提示。
使用CoT的ICL
一般在小样本和零样本这两种设置下和ICL一起用
小样本思维链
将每个示范<输入,输出>
替换为<输入,CoT,输出>
。小样本CoT可以看成ICL的一种特殊提示,但相比ICL的标准提示,示范的顺序对性能影响相对较小。
思维链提示设计:
使用多样的CoT推理路径:Making Large Language Models Better Reasoners with Step-Aware Verifier,对每个问题给出多个推理路径。
使用具有复杂推理路径的提示:Complexity-based prompting for multi-step reasoning
Auto-CoT:上述方法都需要标注CoT,Automatic chain of thought prompting in large language models利用Large language models are zero-shot reasoners提出的zero-shot-CoT
通过特别提示LLM来生成CoT推理路径(例如“Let’s think step by step”)
将训练集里的问题分成不同簇,选择最接近每个簇质心的问题,就可以代表整个训练集里的问题。
增强的思维链策略:如何生成多个推理路径,并在得到的答案中寻找一致性
self-consistency:Self-consistency improves chain of thought reasoning in language models,在生成CoT和最终答案时新的解码策略。先用LLM生成多个推理路径,再对所有答案进行集成(例如投票)。
更通用的集成框架:Rationale-Augmented Ensembles in Language Models发现多样化的推理路径是COT推理性能提高的关键,因此将self-consistency延伸至提示的集成。
通过训练打分模型来衡量生成的推理路径的可靠性,如On the advance of making language models better reasoners
零样本思维链
不在提示中加入人工标注的示范,而是直接生成推理步骤,再利用生成的CoT来得出答案。Large language models are zero-shot reasoners。
先通过“Let’s think step by step”来提示LLM生成步骤
再通过“Therefore, the answer is”来提示得到最终答案
这种方法在模型规模超过一定大小时可以显著提高性能,但在小规模的模型中效果不佳,即涌现能力。
Flan-T5和Flan-PaLM(Scaling instruction-finetuned language models)进一步地使用CoT进行指令调整,有效增强了在未见任务上的零样本性能。
进一步讨论CoT
思维链何时适用于LLM:
LLM为何能进行思维链推理:
思维链能力的来源:
提示中组成部分的影响:
能力评测
史上最严“中文真实性评估”:OpenAI o1第1豆包第2,其它全部不及格
Chinese SimpleQA: A Chinese Factuality Evaluation for Large Language Models
最后更新于