热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >详解常见的几种LLM fine-tuning算法

详解常见的几种LLM fine-tuning算法

来源:互联网 更新时间:2026-07-28 15:21

背景知识

整个RLHF流程可以拆解为三个关键步骤: * **SFT (Supervised Fine-Tuning):** 有监督微调,说白了就是用一堆高质量的“指令-回答”对,先教会模型怎么好好听话、怎么回答问题。 * **RM (Reward Modeling):** 奖励模型训练。既然目标是让模型符合人类偏好,那就得先训练一个能模拟人类喜好的“裁判”模型,给模型的回答打分。 * **RL (Reinforcement Learning):** 强化学习。在SFT模型的基础上,借助RM这个“裁判”,通过PPO算法不断调整模型的行为,让它越来越讨人喜欢。 下面进入正题——LLM微调的理论篇。懂理论,会动手,才能真的玩转。现在大模型的基座动不动就是几十上百B的参数,所以所有的微调算法核心思路都绕不开一个点:**如何在微调时,只更新尽可能少的参数,以达到和全量微调类似甚至更好的效果。**

LoRA (2022, ICLR)

**一句话总结:** 固定住Transformer里原有的参数,在旁边外设两个可训练的小矩阵。 **它解决了什么问题?** 在LoRA出现之前,做大模型的下游微调基本都得全量更新参数,算力消耗巨大。LoRA的诞生就是为了解决这个痛点,让你用更少的资源搞定微调。它的最大优势在于速度快、显存占用低,让在消费级显卡上跑大模型微调成为可能。 **模型方法** LoRA的核心思路很巧妙:在原始预训练语言模型(PLM)旁边接一条“旁路”。这条旁路由两个矩阵A和B相乘组成。A负责将高维特征降到一个低维空间(维度r),B再把它升维回去。这个低维的r,就是模拟所谓的“本征秩”(intrinsic rank)——通俗地讲,模型在下游任务上泛化,其实就是在优化一个公共的低维子空间里的少量参数。 微调时,原始模型参数被冻结,只更新A和B的权重。最终输出是原始路径和旁路结果的加和:`h = Wx + BAx`。这样做的好处是,模型虽然“学”到了新东西,但原始参数纹丝不动。 通常,A用高斯分布初始化,B则初始化为零矩阵,这样训练开始时旁路输出为0,不影响原始模型。推理时,直接把训练好的BA矩阵加到原始权重W上就行了,`h = (W+BA)x`,完全不增加额外的计算负担。 由于r远小于模型原始维度,LoRA引入的参数量极其轻量。不同的下游任务可以各自维护自己的LoRA参数,共享一个基础模型,既省显存又省存储。冻结原始大模型、只更新旁路小参数,也显著降低了计算和IO开销,训练速度自然就上去了。 **实践Tips:Lora应该加在Transformer的哪个位置?** * 实验表明,把可微调参数平均分配到 `Wq` 和 `Wk` 上效果最好,即使将秩r设为4,也能在增量矩阵 `ΔW` 中获得足够的信息。 * 因此,实际操作中应该把可微调参数分散到多种类型的权重矩阵上,而不是用更大的秩去单独微调某一种矩阵。 **LoRA的最佳秩r是多少?** 论文的结论是,r=8和r=64时,它们的top奇异向量重叠度最高。

Qlora (2023, NIPS投稿)

**一句话总结:** 在LoRA的基础上,又加了量化、双重量化和分页优化器几道“硬菜”,进一步压榨资源。 **它解决了什么问题?** Qlora的目标和LoRA一样,都是为了低资源微调,但它的效果更为极致——能让65B的大模型在48G的GPU上跑起来,且效果可以和16bit的全量微调相媲美。这效果相当惊人,配合上如今越来越便宜的硬件,可以预见端侧大模型的潜力会很大。 **模型方法** Qlora的创新主要体现在三点: * **4-bit NormalFloat (NF4) 数据类型:** 一种专为量化而生的4位数据类型。 * **Double Quantization(双重量化):** 对量化常数再进行一次量化,进一步压缩内存。 * **Paged Optimizer(分页优化器):** 专门用来应对训练时内存的“尖峰”波动,避免OOM(显存溢出)。 具体的原理可以参考相关的详细解读,这里不做过多展开。

AdaLora (2023, ICLR)

**一句话总结:** 既然LoRA对所有层的增量矩阵都用相同的秩r不够灵活,那就让模型自己学会“看人下菜碟”,根据每层的重要性动态分配参数预算。 **它解决了什么问题?** LoRA一个固有的局限性在于,它给每个增量矩阵`Δ`预设了相同的秩`r`,这忽略了不同层、不同类型的参数对下游任务的重要性其实是不一样的。AdaLoRA就是为解决这个问题而来的。 **模型方法** AdaLoRA采用了基于SVD(奇异值分解)的参数化形式来表示增量更新。 * **创新点1:SVD-Based Adaptation** 简单说,就是在反向传播求增量`Δ`时,先用SVD对它进行改造,再优化SVD的计算过程。具体公式为 `W = W(0) + Δ = W(0) + PΛQ`。关键点有两个: 1. 像LoRA一样,把矩阵拆成小矩阵以减少计算量。 2. 进一步优化计算:SVD计算复杂度较高,如果能**把不重要的奇异值置为0(保留其向量)**,就能避免稠密的SVD计算。那么,怎么衡量重要性呢?这就引出了第二个创新点。 * **创新点2:Importance-aware Rank Allocation** 这个方法的核心思想很直白:如果一个参数被裁剪掉后,模型的Loss变化很大,那它就必须被保留;反之,就可以裁掉。这个思路是不是和Tokenizer训练时裁剪token的做法如出一辙?通过这种方式,AdaLoRA可以动态地为不同层分配不同的秩,实现全局最优。

BitFit(2022,ACL)

**特别注意:** 这个方法主要适用于基于Transformer的掩码语言模型(如BERT这类),并不适用于GPT这样的自回归语言模型。学习一个方法,先搞清楚它的适用场景,否则学了不知道怎么用,就白费功夫了。 **一句话总结:** 相比LoRA的“加旁路”,BitFit的思路更“抠门”——只更新模型中的bias参数(不到总量的0.1%)和任务特定的最终分类层,就取得了不错的效果。 **模型方法** 方法本身很简单,上面一句话已经说明白了。论文写了一大堆,主要是数学证明和方法论证,而不是方法本身有多复杂。别管方法简单还是复杂,效果好才是硬道理。 既然说只更新bias,就得知道具体是哪些bias: * Attention模块中,用于计算Q、K、V以及合并多个attention结果时的bias。 * 全连接层(MLP)中的bias。 * Layer normalization层的bias。 根据论文的数据,这个方法微调后的效果和全量微调相比,差距非常非常小。而从推理速度来看,bias参数在BERT base或large这样规模的模型中,只占全部参数的0.08%~0.09%,训练量只有全量微调的千分之一左右,效率提升不言而喻。
关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc