大模型微调技术PEFT

1. 横向对比

总体概览:
在这里插入图片描述

方法Transformer 中如何应用特点
Prompt Tuning在输入到Transformer的input文本中添加Prompthard 模式prompt CO-STAR
P-tuning在输入到Transformer的embedding 层添加Promptsoft 模式 prompt
Adapter Tuning在 Transformer 中间层插入 Adapter layer添加额外模型层
Prefix-Tuning在 Transformer 自注意力的 K和V token 前添加前缀适用于下游任务,易于调整
LORA在Transformer的 QKVO 矩阵和 FFN 矩阵中添加可训练参数最少
IA3在Transformer的 K 和 V token以及 FFN 中添加通过中间任务优化微调步长
方法Transformer 中如何应用特点
Prompt Tuning找到合适的prompt需要大量计算和时间当计算资源有限但需要微调模型
P-tuning微调效果有限当需要平衡原始信息和优化目标
Adapter Tuning引入推理延迟复杂任务
Prefix-Tuning容易导致旧知识遗忘使用 BERT 进行微调
LORA原有网络参数改变,但没有增加推理延迟整体效果最好的情况
IA3可能增加计算和存储要求在源任务和目标任务之间需要平衡的情况

2. 纵向理解

2.1 Adapter Tuning

  • 核心理念:在保留并冻结原始模型的基础上,通过添加并训练额外的网络层,增强模型对其他任务的适应性,就像给模型装上一种“适配器”

在这里插入图片描述

2.2 Prompt-tuning

  • 核心理念:通过在训练数据前加入一段“提示”(Prompt)并只对其进行训练,从而在保留主模型全部参数的同时增加模型的弹性。其中,“提示”有两种形式,一种是固定的(hard prompt),一种是可以学习的(soft prompt)

在这里插入图片描述

2.3 P-Tuning

  • 核心理念:在 Prompt-Tuning 的思想上更进一步,对 “提示” 部分引入额外的编码计算(比如 LSTM 或 MLP),以加速模型的收敛。这种方法只使用可以学习的“提示”(Soft Prompt)

在这里插入图片描述

2.4 Prefix-Tuning

  • 核心理念:与其它方法不同,Prefix-Tuning 将 “提示” 当作可学习的前缀,在模型的每一层中都会使用到,具体形式为 past_key_values。这就像在模型的每个层级都留下了一段有用的“前缀”

在这里插入图片描述

  • 什么是 past_key_values?
    • past_key_values: Transformer 模型中历史计算过的key和value的结果,最早是用于生成类模型解码加速,解码逻辑是根据历史输入,每次预测一个新的tokern,然后将新的token加入输入,再预测下一个token。这个过程中,会存在大量的重复计算,因此可以将key和value的计算结果缓存,作为past_key_values输入到下一次的计算中,这一技术又被称之为kv_cache
    • Prefix-Tuning中,就是通过past_key_values的形式将可学习的部分放到了模型中的每一层,这部分内容又被称之为前缀

在这里插入图片描述

2.5 Lora

  • 核心理念:训练时,输入会与原始权重以及两个低秩矩阵共同参与计算,但优化过程只针对这两个低秩矩阵。训练完成后,可以将这两个低秩矩阵与原始模型合并,合并后的模型与原始模型一样,避免了推理时的额外计算量。
  • 理论基础
    • LORA得益于前人的一些关于内在维度(intrinsic dimensicon)的发现:模型是过参数化的,它们有更小的内在维度,模型主要依赖于干这个低的内在维度(lowintrinsic dimension)去做任务适配。
    • 假设模型在任务适配过程中权重的改变量是低秩(lowrank)的,由此提出低秩自适应(LoRA)方法。
    • LORA允许我们通过优化适应过程中密集层变化的秩分解矩阵,买来间接训练神经网络中的一些密集层,同时保持预先训练的权重不变。
  • 算法细节
    在这里插入图片描述

2.6 IA3

  • 核心理念:通过一种可以学习的向量对激活值进行抑制或放大,对 K、V、FFN 三部分的值进行调整,从而在训练过程中只更新这部分向量。训练完成后,可以将这部分参数与原始模型合并,没有额外的推理开销。

在这里插入图片描述

2.7 结论

    1. Lora 微调方法适用于 LLM / LMM 微调,其参数量较全参数微调(Fine-Tuning)显著降低,参数量和现有高效参数微调方法持平或更低。性能优于其它参数高效微调方法,和全参数微调(Fine-Tuning)基本持平甚至更高。
    1. Adapter-tuning 与 predix-tuning 适用于 BERT 微调

2.8 P-Tuning V2

2.9 QLora

  • 代码实现
import torch
from transformers
import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=False,    # 双量化
    bnb_4bit_quant_type="nf4",         # 创新2 int8、fp16、fp32、bf16
    bnb_4bit_compute_dtype=torch.bfloat16
    )
model_4bit = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config
  • 非均匀量化
    在这里插入图片描述

  • 量化过程

    • Quantize:

      • 1.73<x<2.26 -> 14
    • Dequantize:

      • 14 -> (1.73+2.26) / 2 = 1.995
    • 两边各舍弃累计概率密度:

      • 0.0322917
    • 0值单独拿出来,作为 16 个值中的 1 个,正数分配 8 个,复数分配 7 个,按照累计概率密度等分
      在这里插入图片描述

    • 这里也就是 NF4,用于对符合正态分布的数进行量化的,而非用于直接计算,需要反量化为浮点型才能进行推理计算,这也是 config 中需要指定计算类型——bnb_4bit_compute_dtype 的原因

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值