一、什么是大模型?
对大模型做一个直观的抽象,
本质上,现在的大模型要解决的问题,就是一个序列数据转换的问题:
输入序列 X = [x1, x2, ..., xm], 输出序列Y = [y1, y2, …, yn],X和Y之间的关系是:Y = WX。
“大模型”这个词:“大”是指用于训练模型的参数非常多,多达千亿、万亿;而“模型”指的就是上述公式中的矩阵W。
在这里,矩阵W就是通过机器学习,得出的用来将X序列,转换成Y序列的权重参数组成的矩阵。
二、什么是微调?
对大模型进行微调(Fine-tuning)是为了
让通用的预训练模型更好地适应特定任务或领域的需求,从而在具体应用中提升性能。
微调是预训练模型落地到实际应用的关键步骤,通过“
通用基础+专业适配”的平衡,以较低成本释放大模型的潜力。
微调的最终目的,是能够在可控成本的前提下,尽可能地提升大模型在特定领域的能力。
三、为什么要对大模型进行微调?
1、适应特定任务
-
预训练模型的局限性:大模型(如GPT、BERT等)通过海量通用数据训练,具备广泛的语义理解能力,但未必直接适配专业任务(如医疗诊断、法律文书生成等)。
-
任务针对性优化:微调通过少量领域数据调整模型参数,使其更专注于目标任务的模式(例如分类、生成、问答等)。
2、提升性能
-
数据分布差异:如果目标数据与预训练数据分布不同(如专业术语、表达习惯),微调能缩小差距,显著提高准确率。
-
任务指标优化:微调可以针对具体评估指标(如F1分数、ROUGE)优化,而预训练模型可能未直接优化这些指标。
3、数据效率高
-
少量标注数据即可改进:相比从头训练,微调仅需少量领域数据(甚至几百条样本)即可显著提升效果,节省时间和成本。
4、保留通用知识
-
迁移学习的优势:微调在保留预训练模型通用能力(如语言理解、常识推理)的基础上,叠加领域知识,避免“灾难性遗忘”。
5、适应领域术语和风格
-
专业场景需求:例如医疗、金融等领域有特殊术语和表达,微调能让模型学会正确使用这些词汇。
-
风格控制:如让生成内容更正式、更简洁,或符合品牌调性。
6、解决低资源语言或任务
-
小语种或小众领域:当某些语言或领域数据不足时,微调预训练模型比从头训练更可行。
7、个性化需求
-
定制化输出:根据用户偏好调整生成内容(如客服机器人语气、推荐系统偏好)。
何时不需要微调?
任务足够通用(如普通文本分类),且预训练模型表现已达标。
缺乏标注数据或计算资源,此时可用零样本(Zero-shot)或小样本学习(Few-shot)。
四、微调的常见方法
全参数微调FFT(
Full Fine Tuning):调整模型所有参数,适合数据量较大的场景。
轻量级微调PEFT(
Parameter-Efficient Fine Tuning):如LoRA(低秩适应)、Adapter模块,仅训练少量参数,节省计算资源。
提示微调(Prompt-tuning):通过调整输入提示(Prompt)引导模型输出。
全参数微调FFT会带来一些问题:
-
一个是 训练成本比较高,因为微调的参数量跟预训练的是一样的多的;
-
一个是叫 灾难性遗忘( Catastrophic Forgetting),用特定训练数据去微调可能会把这个领域的表现变好,但也可能会把原来表现好的别的领域的能力变差 。
PEFT主要想解决的问题,就是FFT存在的上述两个问题,
PEFT也是目前比较主流的微调方案。
从训练数据的来源、以及训练的方法的角度,
大模型的微调有以下几条技术路线:
-
一个是 监督式微调SFT(Supervised Fine Tuning),这个方案主要是用人工标注的数据,用传统机器学习中监督学习的方法,对大模型进行微调;
-
一个是 基于人类反馈的强化学习微调RLHF(Reinforcement Learning with Human Feedback),这个方案的主要特点是把人类的反馈,通过强化学习的方式,引入到对大模型的微调中去,让大模型生成的结果,更加符合人类的一些期望;
-
还有一个是 基于AI反馈的强化学习微调RLAIF (Reinforcement Learning with AI Feedback),这个原理大致跟RLHF类似,但是反馈的来源是AI。这里是想解决反馈系统的效率问题,因为收集人类反馈,相对来说成本会比较高、效率比较低。
从
成本和
效果的角度综合考虑,PEFT是目前业界比较流行的微调方案。接下来介绍几种比较流行的PEFT微调方案。
4.1、流行的PEFT方案1:Prompt Tuning
Prompt Tuning的出发点,是基座模型(Foundation Model)的参数不变,为每个特定任务,训练一个少量参数的小模型,在具体执行特定任务的时候按需调用。
Prompt Tuning的基本原理是在输入序列X之前,增加一些特定长度的特殊Token,以增大生成期望序列的概率。
具体来说,就是将X = [x1, x2, ..., xm]变成,X` = [x`1, x`2, ..., x`k; x1, x2, ..., xm], Y = WX`。
Prompt Tuning是发生在Embedding这个环节的。
如果将大模型比做一个函数:Y=f(X),那么Prompt Tuning就是在保证函数本身不变的前提下,在X前面加上了一些特定的内容,而这些内容可以影响X生成期望中Y的概率。
Prompt Tuning的具体细节,可以参见:The Power of Scale for Parameter-Efficient Prompt Tuning[1]。
4.2、流行的PEFT方案2:Prefix Tuning
Prefix Tuning的灵感来源是,基于Prompt Engineering的实践表明,在不改变大模型的前提下,在Prompt上下文中添加适当的条件,可以引导大模型有更加出色的表现。
Prefix Tuning的出发点,跟Prompt Tuning的是类似的,只不过它们的具体实现上有一些差异。
Prompt Tuning是在Embedding环节,往输入序列X前面加特定的Token。
而Prefix Tuning是在Transformer的Encoder和Decoder的网络中都加了一些特定的前缀。
具体来说,就是将Y=WX中的W,变成W` = [Wp; W],Y=W`X。
Prefix Tuning也保证了基座模型本身是没有变的,只是在推理的过程中,按需要在W前面拼接一些参数。
Prefix Tuning的具体细节,可以参见:Prefix-Tuning: Optimizing Continuous Prompts for Generation[2]。
4.3、流行的PEFT方案3:LoRA
LoRA是跟Prompt Tuning和Prefix Tuning完全不相同的另一条技术路线。
LoRA背后有一个假设:我们现在看到的这些大语言模型,它们都是被过度参数化的。而过度参数化的大模型背后,都有一个低维的本质模型。
通俗讲人话:大模型参数很多,但并不是所有的参数都是发挥同样作用的;大模型中有其中一部分参数,是非常重要的,是影响大模型生成结果的关键参数,这部分关键参数就是上面提到的低维的本质模型。
LoRA的基本思路
,包括以下几步:
-
首先, 要适配特定的下游任务,要训练一个特定的模型, 将Y=WX变成Y=(W+∆W)X,这里面∆W主是我们要微调得到的结果;
-
其次,将∆W进行低维分解∆W=AB (∆W为m * n维,A为m * r维,B为r * n维,r就是上述假设中的低维);
-
接下来,用特定的训练数据,训练出A和B即可得到∆W,在推理的过程中直接将∆W加到W上去,再没有额外的成本。
另外,如果要用LoRA适配不同的场景,切换也非常方便,做简单的矩阵加法即可:(W + ∆W) - ∆W + ∆W`。
关于LoRA的具体细节,可以参见LoRA: Low-Rank Adaptation of Large Language Models[3]。
4.4、流行的PEFT方案4:QLoRA
LoRA 效果已经非常好了,可以媲美全量微调的效果了,那为什么还要有个QLoRA呢?
这里先简单介绍一下,量化(Quantization)。
量化,是一种在保证模型效果基本不降低的前提下,通过降低参数的精度,来减少模型对于计算资源的需求的方法
。
量化的核心目标是降成本,降训练成本,特别是降后期的推理成本。
QLoRA就是量化版的LoRA,它是在LoRA的基础上,进行了进一步的量化,将原本用16bit表示的参数,降为用4bit来表示,可以在保证模型效果的同时,极大地降低成本。
论文中举的例子,65B的LLaMA 的微调要780GB的GPU内存;而用了QLoRA之后,只需要48GB。效果相当惊人!
关于QLoRA的具体细节,可以参见:QLoRA: Efficient Finetuning of Quantized LLMs[4]。
五、Fine-tuning的原理
5.1、大模型微调的步骤
在选定相关数据集和预训练模型的基础上,通过设置合适的超参

最低0.47元/天 解锁文章
326

被折叠的 条评论
为什么被折叠?



