github编辑

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 learningarrow-up-right

数据集:https://huggingface.co/collections/davanstrien/top-10-instruction-tuning-datasets-650d91e11427d12e8542a21aarrow-up-right

构建格式化实例

指令格式的实例包括一个任务描述(即指令)、一对输入输出和少量示例(可选)

格式化已有数据集

  • 收集来自不同领域(文本摘要、文本分类、翻译等)的实例来创建有监督的多任务训练数据集。用自然语言的任务描述来格式化这些数据集是很方便的。

  • 使用人类撰写的任务描述来增广带标的数据集,通过解释任务目标来指导LLM理解任务。

  • 众包平台(如PromptSource)有效地创建、共享和难不同数据集的任务描述

  • 通过指令微调特殊设计的任务描述,反转已有实例的输入-输出对,例如“请基于以下答案生成一个问题”,如

  • 利用启发式任务模板将大量无标注的文本转换为带标注的实例。如Learning instructions with unlabeled data for zero-shot cross-task generalizationarrow-up-right

格式化人类需求

来自公共NLP数据集的训练实例虽然进行了格式化,但任务描述缺乏多样性与人类真实需求不匹配,故InstructGPT采用真实用户提交给其API的查询作为任务描述。此外,为了丰富任务多样性,通常

  • 标注者为真实生活中的任务编写指令,如开放式生成、开放式问答、头脑风暴、聊天等

  • 另一组标注人员直接对这些指令进行回答

  • 将**指令(采集的用户查询)期望输出(人工编写的答案)**pair对作为一个训练实例

还有一些半自动化的方法将现有实例输入到LLM中生成多样的任务描述和实例来构建实例,如

构建实例的关键

指令微调策略

相比预训练而言,指令微调有多个不同:

指令微调效果

性能改进

任务泛化性

对齐微调

Training language models to follow instructions with human feedbackarrow-up-rightAlignment of language agentsarrow-up-right提出,LLM可能编造虚假信息、产生有害的、误导性的和有偏见的表达,因为LLM在预训练时没有考虑人类的价值观或偏好。

Improving alignment of dialogue agents via targeted human judgementsarrow-up-rightTraining language models to follow instructions with human feedbackarrow-up-right提出了人类对齐,使LLM的行为能够符合人类期望。

Training language models to follow instructions with human feedbackarrow-up-rightA general language assistant as a laboratory for alignmentarrow-up-rightTraining a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedbackarrow-up-right发现,和适配微调(如指令微调)相比,对齐微调要考虑的标准并不同,这可能会在某种程度上损害LLM的通用能力,即对齐税

对齐的标准

对齐的标准很主观,难以直接作为LLM的优化目标。比较有前景的方法是Red teaming language models to reduce harms: Methods, scaling behaviors, and lessons learnedarrow-up-rightRed teaming language models with language modelsarrow-up-right提出的红队攻防,用对抗的方式手动自动探测LLM,使其生成有害输出,再更新模型防止此类输出

收集人类反馈

选择标注人员

收集反馈

RLHF

详见RLHF章节

高效微调

全量参数都微调成本很大,有更高效的方法,称为参数高效微调parameter-efficient fine-tuning)。

适配器微调(adapter tuning)

Parameter-efficient transfer learning for NLParrow-up-right提出,在Transformer中引入一个小型神经网络模块适配器),LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Modelsarrow-up-right也提出了瓶颈架构:

  • 将原始特征压缩到较小维度(然后进行非线性变换)

  • 恢复到原始维度

一般是串行插入的方式,集成到每个Transformer层里,分别放到注意力层前馈层之后Towards a unified view of parameter- efficient transfer learningarrow-up-right提出了并行适配器,即与注意力层和前馈层并行

微调时,原参数不变仅更新适配器模块参数

前缀微调(prefix tuning)

Prefix-tuning: Optimizing continuous prompts for generationarrow-up-right

  • 在每个Transformer层前添加一系列前缀,即一组可训练的连续向量。前缀向量具有任务的特异性,可以看作虚拟的token emb

  • 重参数化技巧:

    • 学习一个将较小矩阵映射到前缀参数矩阵MLP函数,而不是直接优化前缀,有助于稳定训练

    • 优化后,舍弃映射函数,只保留派生的前缀向量以增强与特定任务相关的性能。

    • 由于只训练前缀参数,故能实现参数高效的模型优化

P-tuning v2: Prompt tuning can be comparable to fine- tuning universally across scales and tasksarrow-up-right提出了p-tuning v2,为了自然语言理解在Transformer中引入逐层提示向量,还利用多任务学习联合优化共享的提示

提示微调(prompt tuning)

输入层加入可训练提示向量,基于离散提示方法(How can we know what language models know?arrow-up-rightAutoprompt: Eliciting knowledge from lan- guage models with automatically generated promptsarrow-up-right),通过包含一组软提示token来扩充输入文本,再用扩充后的输入来解决特定的下游任务。将任务特定的提示emb输入文本的emb相结合,输入模型中。

低秩适配(LoRA)

Lora: Low-rank adaptation of large language modelsarrow-up-right通过增加低秩约束来近似每层的更新矩阵,假设参数矩阵WRm×n\mathbf{W} \in \mathbb{R}^{m \times n},一般是

W=W+ΔW\mathbf{W}=\mathbf{W}+\Delta \mathbf{W}

冻结W\mathbf{W},通过低秩分解矩阵来近似更新

ΔW=AB\Delta \mathbf{W}=\mathbf{A} \cdot \mathbf{B}^{\top}

其中ARm×k\mathbf{A} \in \mathbb{R}^{m \times k}BRn×k\mathbf{B} \in \mathbb{R}^{n \times k}是用于任务适配的可训练参数,rmin(m,n)r \ll \min (m, n)降低后的秩

LoRA的优点:

  • 大大节省内存和存储(如VRAM,Video Random Access Memory)

  • 可以只保留一个大型模型副本,同时保留多个用于适配不同下游任务特定低秩分解矩阵

用更有原则的方法设置秩:

Thinking Machines又发高质量博客:力推LoRA,不输全量微调arrow-up-right

https://thinkingmachines.ai/blog/lora/arrow-up-right

  • 在小数据量任务上,LoRA与FullFT几乎没有差距,完全可以对齐;

  • 在大数据量任务上,LoRA的容量不足,承载不了过多新知识,表现略显吃力;

一些技巧:

  • 只加在注意力层并不理想,覆盖所有层(尤其MLP/MoE)效果更佳。

  • LoRA在大batch size下,比FullFT更容易掉性能

  • LoRA的学习率和超参数规律与FullFT不同,需要单独调优。最优学习率通常是FullFT的约10倍。初期训练时,LoRA需要更高的学习率(约15倍FullFT),长期训练则趋近于10倍。

此外还发现,在强化学习任务里,哪怕LoRA rank=1这么小的设定,也能跑出与全量微调接近的效果。

  • 在监督学习中,模型大约可存储每个参数2 bits信息。数据集的描述长度可以通过第一轮训练的总log-loss估算;

  • 在强化学习中,尤其是策略梯度方法,每个episode约提供1 bit信息。这说明强化学习对LoRA容量的要求相对较低。

小结

LoRA已经有广泛的应用,如LLaMA和BLOOM,

LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Modelsarrow-up-right比较了串行适配器微调、并行适配器微调和LoRA,在GPT-J(6B)、BLOOM(7.1B)和LLaMA(7B)上评估:这些方法在困难任务上效果不如GPT-3.5,但在简单任务上表现相当LoRA表现相对较好且使用的可训练参数明显较少。

huggingface开源了Peft: State-of-the-art parameter-efficient fine-tuning methodsarrow-up-right,包括LoRA/AdaLoRA、前缀微调、P-Tuning、提示微调,支持GPT-2和LLaMA,还支持视觉Transformer如ViT和Swin Transformer。

让大模型不再「巨无霸」,这是一份最新的大模型参数高效微调综述arrow-up-right

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Surveyarrow-up-right

lora变种

DoRA

DoRA: Weight-Decomposed Low-Rank Adaptationarrow-up-right

https://github.com/catid/doraarrow-up-right

LoRA可以认为是对Finetune微调的一种低秩近似,通过增加Rank,LoRA可以达到类似Finetune的微调效果。因此之前多数研究都把LoRA和Finetune在微调准确性上的差异归结为二者的优化参数量不同。

但经过分析发现,lora的学习模式和FT很不一样,更偏向于大开大合,即方向幅度呈很强的正相关,可能对更精细的学习有害

dora

dora通过同时关注权重更新时的大小方向变化,实现了比LoRA更加接近finetune微调效果:

  • w拆成magnitude(normnorm)乘以direction(1/norm×w1/norm \times w)

  • magnitude不变,direction里的1/norm1/norm用lora更新

注意,这里的norm是column-wise的norm,即输入d×kd\times k的矩阵,每一列的元素算一个norm(平方和开根号)得到一个数,最终就是1×k1\times k的矩阵

fourierft

ICML 2024 | 脱离LoRA架构,训练参数大幅减少,新型傅立叶微调来了arrow-up-right

https://github.com/Chaos96/fourierftarrow-up-right

SFT技巧

全是细节|大模型SFT的100个关键点arrow-up-right

大模型SFT 22条实践经验,干活效率翻倍!arrow-up-right

LLM预训练与SFT数据配比调研arrow-up-right

使用

上下文学习

GPT-3提出ICL,将任务描述和(或)示范(demonstration)以自然语言文本形式表达。

上下文学习形式

  • 任务描述作为开始,从任务数据集中选择一些样例作为示范

  • 以特别设计的模板形式将它们按照特定的顺序组合成自然语言提示

  • 测试样例添加到LLM的输入中以生成输出。

形式化地看,Dk={f(x1,y1),,f(xk,yk)}D_k=\left\{f\left(x_1, y_1\right), \ldots, f\left(x_k, y_k\right)\right\}表示由kk个样例组成的一组示范,f(xk,yk)f\left(x_k, y_k\right)表示把第kk任务样例转换为自然语言提示的函数。给定任务描述II、示范DkD_k和新的输入查询xk+1x_{k+1},LLM生成的输出y^k+1\hat{y}_{k+1}如下:

LLM(I,f(x1,y1),,f(xk,yk)示范 ,f(xk+1输入 ,___答案 ))y^k+1\operatorname{LLM}(I, \underbrace{f\left(x_1, y_1\right), \ldots, f\left(x_k, y_k\right)}_{\text {示范 }}, f(\underbrace{x_{k+1}}_{\text {输入 }}, \underbrace{\_\_\_}_{\text {答案 }})) \rightarrow \hat{y}_{k+1} \text {. }

真实答案yk+1y_{k+1}留白,由LLM预测。

更多的可以参考综述A survey for in-context learningarrow-up-right

指令微调可以提高LLM执行目标任务的ICL能力,尤其是零样本场景(仅使用任务描述)。

示范设计

示范选择

An explanation of in-context learning as implicit bayesian inferencearrow-up-right提到,ICL中选择的示范样例应该包含足够的有关待解决任务的信息,并与测试查询相关

示范格式

将选择的示范进行整合以及格式化

示范顺序

LLM有时会被顺序偏差影响,例如Calibrate before use: Improving few-shot performance of language modelsarrow-up-right提出LLM会倾向于重复示范结尾附近的答案===>结尾很重要!!

底层机制

预训练如何影响ICL

LLM如何实现ICL

思维链提示(CoT)

CoT是一种改进的提示策略,旨在提高LLM在复杂推理任务中的性能,如算术推理(Training verifiers to solve math word problemsAre NLP models really able to solve simple math word problems?arrow-up-rightA diverse corpus for evaluating and developing english math word problem solversarrow-up-right)、常识推理(Commonsenseqa: A question answering challenge targeting commonsense knowledgearrow-up-rightDid aristotle use a laptop? A question answering benchmark with implicit reasoning strategiesarrow-up-right)、符号推理(Chain of thought prompting elicits reasoning in large language modelsarrow-up-right)。

ICL只使用输入输出对来构造提示,而CoT将最终输出的中间推理步骤加入提示。

使用CoT的ICL

一般在小样本和零样本这两种设置下和ICL一起用

小样本思维链

将每个示范<输入,输出>替换为<输入,CoT,输出>。小样本CoT可以看成ICL的一种特殊提示,但相比ICL的标准提示,示范的顺序对性能影响相对较小

零样本思维链

不在提示中加入人工标注的示范,而是直接生成推理步骤,再利用生成的CoT来得出答案。Large language models are zero-shot reasonersarrow-up-right

  • 先通过“Let’s think step by step”来提示LLM生成步骤

  • 再通过“Therefore, the answer is”来提示得到最终答案

这种方法在模型规模超过一定大小时可以显著提高性能,但在小规模的模型效果不佳,即涌现能力。

Flan-T5和Flan-PaLM(Scaling instruction-finetuned language modelsarrow-up-right)进一步地使用CoT进行指令调整,有效增强了在未见任务上的零样本性能。

进一步讨论CoT

  • 思维链何时适用于LLM:

  • LLM为何能进行思维链推理:

    • 思维链能力的来源:

    • 提示中组成部分的影响:

能力评测

史上最严“中文真实性评估”:OpenAI o1第1豆包第2,其它全部不及格arrow-up-right

Chinese SimpleQA: A Chinese Factuality Evaluation for Large Language Modelsarrow-up-right

一些新的方法

RPT

「Next-Token」范式改变!刚刚,强化学习预训练来了arrow-up-right

Reinforcement Pre-Trainingarrow-up-right

DDO

ICML 2025 Spotlight | 清华朱军组&NVIDIA提出DDO:扩散/自回归模型训练新范式,刷新图像生成SOTAarrow-up-right

Direct Discriminative Optimization: Your Likelihood-Based Visual Generative Model is Secretly a GAN Discriminatorarrow-up-right

https://github.com/NVlabs/DDOarrow-up-right

最后更新于