MindSpore LLM大模型原理和实践:高效参数微调(PEFT)学习心得
收藏回复举报
MindSpore LLM大模型原理和实践:高效参数微调(PEFT)学习心得
发表于2025-05-11 17:42:59
0 查看

Prompt tuning回顾

  1. 对T5进行微调以更接近传统语言模型(仅执行一次,这样效果更好)
  2. 冻结T5权重
  3. 设置前k个输入嵌入为可学习参数(k是超参数,由实现者选择)
  4. 初始化k个可学习嵌入(可以随机初始化也可以从词汇表嵌入矩阵中采样)
  5. 在任务特定数据上训练(仅更新前k个嵌入的参数,其余参数保持冻结)

相关示例如下:

可以设置来一个task就增加嵌入的参数进行微调,也可以混在一起进行微调

true

如下所示是Prompt Tunning的效果对比

true

因为Prompt Tuning只改变了一点参数,如果数据量很大,这点参数不能很好的表征。如下是Prefix Tuning,在Transformer的Encoder或Decoder里面的全连接层前面加写参数,这样训练的参数量还是不是特别多,但是每一层都影响到了,整个的模型的表现就会好。

true

如下说明了效果很好,即使全量微调都不一定比这好。

true

PEFT(Parameter-Efficient Fine-Tuning)

为什么要使用Fine-Tuning?

  1. 大模型生成下游任务的效果更好
  2. 相比训练整个模型更加便宜
  3. 在线训练很好

当获得一些数据并使用LLM:

  1. 95%以上人会做Prompt engineering
    1. 只需要调整输入,对模型没有改动
  2. 全量微调(本质和预训练一模一样)
    1. 更贵
    2. 容易在小数据集上过拟合/灾难性遗忘
  3. 高效参数微调(低参微调)

什么是PEFT

PEFT是一个使用更少参数量、更低资源去微调的一个LLM的集合体。

PEFT方法

true

additive、selective、reparametrization-based(重参数化)

三种主流的做高效参数微调的思路

additive:在原本模型之上加一些参数非常小的层,只训练这些。

selective:只微调bias的参数,其他冻结。

reparametrization-based:也额外增加一部分,但增加的这一部分最终会加回模型参数身上去。

Adapters-based方法

true

Adapters是一种新的模块被添加到预训练网络层之间

原始模型权重冻结住,只训练Adapter层

效果

使用全部参数的0.15%的参数量,就可以达到同等的效果。

true

不增加新的参数的选择

BitFit:Bias-terms Fine-Tuning

true

只训练bias,其余冻结

DiffPruning

之前选择bias都是手动的,选它也没什么道理就是参数量小。

而这个是挑选哪一部分微调是自动化的。训练一个可学习的"delta"知道哪部分是应该微调的。

如果我们想通过重参数化进行高效参数微调?

微调只需要调整很小一部分即可达到很好的效果,而不需要全量微调。

这说明这一小部分就是模型的核心,我只需要调整这一小部分即可。

LoRA - Low-Rank Adaptation

根据上述的思路。 $$ \Delta W_{A\times B}=A_{A\times r}\times B_{r\times B} $$ r相比A和B很小,此时A和B的参数量加一起也比W小,训练完毕后,相乘再加回去。

true

(IA)^3 Infused Adapter by Inhibiting and Amplifying Inner Activations

true

核心改变:让参数变得更小了

LoRA是把一个大矩阵变成两个小矩阵,而IA3连矩阵都不要了直接换了vector

黄色的部分全部是vector。

虽然参数更小了,但是效果还是很好的甚至比LoRA还要好。

具体代码:

true

我要发帖子