微调方法是啥?如何微调?

  1. 微调方法是啥?如何微调?
    fine-tune,也叫全参微调,bert微调模型一直用的这种方法,全部参数权重参与更新以适配领域数据,效果好。
    prompt-tune, 包括p-tuning、lora、prompt-tuning、adaLoRA等delta tuning方法,部分模型参数参与微调,训练快,显存占用少,效果可能跟FT(fine-tune)比会稍有效果损失,但一般效果能打平。
    链家在BELLE的技术报告《A Comparative Study between Full-Parameter and LoRA-based Fine- Tuning on Chinese Instruction Data for Instruction Following Large Language Model》中实验显示:FT效果稍好于LoRA。


peft的论文《ADAPTIVE BUDGET ALLOCATION FOR PARAMETER- EFFICIENT FINE-TUNING》显示的
结果:AdaLoRA效果稍好于FT。

  1. 为什么需要 PEFT
    在面对特定的下游任务时,如果进行Full FineTuning(即对预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。
  2. 介绍一下 PEFT
    PEFT技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。这样一来,即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习。
  3. PEFT 有什么优点?
    PEFT技术可以在提高模型效果的同时,大大缩短模型训练时间和计算成本,让更多人能够参与到深度学习研究中来。除此之外,FEFT可以缓解全量微调带来灾难性遗忘的问题。
  4. 微调方法批处理大小模式GPU显存速度?
    微调方法批处理大小模式GPU显存速度
    LoRA (r=8) 16 FP16 28GB 8ex/s LoRA (r=8) 8 FP16 24GB 8ex/s LoRA (r=8) 4 FP16 20GB 8ex/s LoRA (r=8) 4 INT8 10GB 8ex/s LoRA (r=8) 4 INT4 8GB 8ex/s
    P-Tuning (p=16) 4 FP16 20GB 8ex/s P-Tuning (p=16) 4 INT8 16GB 8ex/s P-Tuning (p=16) 4 INT4 12GB 8ex/s Freeze (l=3) 4 FP16 24GB 8ex/s Freeze (l=3) 4 INT8 12GB 8ex/s
  5. Peft 和 全量微调区别?
    所谓的 fune-tine 只能改变风格, 不能改变知识, 是因为我们的 fine-tune, 像是 LoRA 本来就是低秩的, 没办法对模型产生决定性的改变. 要是全量微调, 还是可以改变知识的.
  6. 多种不同的高效微调方法对比
    像P-Tuning v2、LoRA等都是综合评估很不错的高效微调技术。如果显存资源有限可以考虑QLoRA;如果只是解决一些简单任务场景,可以考虑P-Tuning、Prompt Tuning也行。
    下表从参数高效方法类型、是否存储高效和内存高效、以及在减少反向传播成本和推理开销的计算高效五个维度比较了参数高效微调方法。


下表展示了各种参数高效方法的参与训练的参数量、最终模型与原始模型的改变参数(delta值)以及论文中参与评估的模型的范围(<1B、<20B、>20B)。


从表中可以看到,Prompt Tuning、Prefix Tuning、LoRA等少部分微调技术针对不同参数规模的模型进行过评估,同时,这几种方式也是目前应用比较多的高效微调方法。

  1. 当前高效微调技术存在的一些问题
    当前的高效微调技术很难在类似方法之间进行直接比较并评估它们的真实性能,主要的原因如下所示:
    1. 参数计算口径不一致:参数计算可以分为三类:可训练参数的数量、微调模型与原始模型相比改变的参数的数量、微调模型和原始模型之间差异的等级。例如,DiffPruning更新0.5%的参数,但是实际参与训练的参数量是200%。这为比较带来了困难。尽管可训练的参数量是最可靠的存储高效指标,但是也不完美。 Ladder-side Tuning使用一个单独的小网络,参数量高于LoRA或BitFit,但是因为反向传播不经过主网络,其消耗的内存反而更小。
    2. 缺乏模型大小的考虑:已有工作表明,大模型在微调中需要更新的参数量更小(无论是以百分比相对而论还是以绝对数量而论),因此(基)模型大小在比较不同PEFT方法时也要考虑到。
    3. 缺乏测量基准和评价标准:不同方法所使用的的模型/数据集组合都不一样,评价指标也不一样,难以得到有意义的结论。
    4. 代码实现可读性差:很多开源代码都是简单拷贝Transformer代码库,然后进行小修小补。这些拷贝也不使用git fork,难以找出改了哪里。即便是能找到,可复用性也比较差(通常指定某个 Transformer版本,没有说明如何脱离已有代码库复用这些方法)。

  1. 高效微调技术最佳实践
    针对以上存在的问题,研究高效微调技术时,建议按照最佳实践进行实施:
    1. 明确指出参数数量类型。
    2. 使用不同大小的模型进行评估。
    3. 和类似方法进行比较。
    4. 标准化PEFT测量基准。
    5. 重视代码清晰度,以最小化进行实现。

  1. PEFT 存在问题?
    相比全参数微调,大部分的高效微调技术目前存在的两个问题:
    1. 推理速度会变慢;
    2. 模型精度会变差;

  1. 能不能总结一下各种参数高效微调方法?
    本文针对之前介绍的几种参数高效微调方法进行了简单的概述,主要有如下几类:
    1. 增加额外参数,如:Prefix Tuning、Prompt Tuning、Adapter Tuning及其变体。
    2. 选取一部分参数更新,如:BitFit。
    3. 引入重参数化,如:LoRA、AdaLoRA、QLoRA。
    4. 混合高效微调,如:MAM Adapter、UniPELT。

并比较了不同的高效微调方法之间的差异;同时,还指出当前大多数高效微调方法存在的一些问题并给出了最佳实践。

<think>好的,我现在需要回答用户关于大模型微调方法和过程的提问。首先,我得理清楚用户的需求。用户提到了大模型微调,可能想知道常见的微调技术、它们的优缺点以及具体步骤。用户还提供了几个引用,涉及LoRA、Prompt Tuning等,这些都需要整合到回答中。 首先,我应该从基础的全参数微调开始解释,这样用户能有一个全面的了解。全参数微调虽然有效,但计算和存储成本高,尤其是对于大模型来说。接下来,需要介绍参数高效微调方法(PEFT),比如LoRA和Prompt Tuning系列,这些是用户提到的引用中的重点。 引用[1]提到过度参数化模型,如CNN和Transformer,这类模型泛化能力强但微调时需要处理大量参数。这里需要说明为什么需要高效的微调方法。引用[2]讲的是LoRA,可以强调其减少可训练参数的优势,但存储问题依然存在。引用[3]详细介绍了Prompt Tuning的几个变体,需要逐个解释它们的特点和演进过程。 然后,我需要组织回答的结构。首先概述微调的基本概念和步骤,然后分点介绍不同的方法,包括全参数微调和参数高效方法。在参数高效方法中,详细说明LoRA、Prefix-Tuning、P-Tuning系列等,结合引用内容。最后总结选择微调方法的考虑因素,并生成相关问题。 需要注意的是,用户要求使用中文回答,行内公式用$...$,独立公式用$$...$$。例如,在解释LoRA时,可能需要提到低秩分解的数学表示,使用行内公式。同时,确保引用的正确标注,比如在提到LoRA时添加[^2],提到Prompt Tuning时引用[^3]。 还要检查是否有遗漏的微调方法,比如Adapter Tuning,虽然用户没有提到,但作为常见技术应该包含进去。此外,回答需要结构清晰,分步骤或分点,帮助用户逐步理解。 最后,生成的相关问题需要围绕大模型微调展开,比如比较不同方法、应用场景、挑战等,确保问题有针对性,能够引导用户进一步探索。</think>大模型微调是指通过调整预训练模型的参数,使其适应特定任务的过程。以下是主要方法和技术详解: ### 一、微调基础流程 1. **预训练模型加载**:从Hugging Face等平台加载基础模型(如BERT、GPT-3) 2. **任务适配改造**:修改输出层结构,例如分类任务添加softmax层 3. **参数选择策略**: - 全参数微调:更新所有参数(计算成本高) - 部分冻结:固定底层参数,仅微调顶层(常用在相似领域任务) 4. **损失函数设计**:根据任务类型选择交叉熵、均方误差等 ### 二、主流微调方法 #### 1. 全参数微调 $$ \theta_{new} = \theta_{pretrained} - \eta \nabla_\theta L(\theta) $$ 适用于数据量充足的场景,但需要$O(N)$存储(N为参数量),例如175B参数的GPT-3需要700GB显存[^1] #### 2. 参数高效微调(PEFT) **(1) LoRA(Low-Rank Adaptation)** 将权重更新量分解为低秩矩阵:$W' = W + BA$,其中$B \in \mathbb{R}^{d×r}, A \in \mathbb{R}^{r×k}$,可减少97%参数[^2] ```python # 伪代码实现 class LoRALayer(nn.Module): def __init__(self, rank): self.A = nn.Parameter(torch.randn(input_dim, rank)) self.B = nn.Parameter(torch.zeros(rank, output_dim)) def forward(x): return x @ (W + self.A @ self.B) ``` **(2) Prompt Tuning系列** - **Prefix-Tuning**:在输入前添加可学习的连续向量$P \in \mathbb{R}^{l×d}$,通过LSTM生成前缀参数 - **P-Tuning v2**:在不同网络层插入prompt tokens,解决深层次任务适配问题 **(3) Adapter Tuning** 在Transformer层间插入适配模块: $$ h' = h + f(W_{down} \cdot \sigma(W_{up} \cdot h)) $$ 通常仅添加3-5%新参数 ### 三、方法对比 | 方法 | 参数量占比 | 训练速度 | 任务迁移能力 | |---------------|------------|----------|--------------| | 全参数微调 | 100% | 慢 | 优 | | LoRA | 0.1-1% | 快 | 良 | | Prefix-Tuning | 0.1-0.5% | 中 | 中 | ### 四、实践建议 1. 小样本场景优先使用LoRA或Prompt Tuning 2. 多任务学习建议使用Adapter结构 3. 部署时可通过参数合并(如LoRA的$W+BA$合并为单个矩阵)减少推理延迟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Echoes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值