Prompt tuning回顾
- 对T5进行微调以更接近传统语言模型(仅执行一次,这样效果更好)
- 冻结T5权重
- 设置前k个输入嵌入为可学习参数(k是超参数,由实现者选择)
- 初始化k个可学习嵌入(可以随机初始化也可以从词汇表嵌入矩阵中采样)
- 在任务特定数据上训练(仅更新前k个嵌入的参数,其余参数保持冻结)
相关示例如下:
可以设置来一个task就增加嵌入的参数进行微调,也可以混在一起进行微调

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

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

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

PEFT(Parameter-Efficient Fine-Tuning)
为什么要使用Fine-Tuning?
- 大模型生成下游任务的效果更好
- 相比训练整个模型更加便宜
- 在线训练很好
当获得一些数据并使用LLM:
- 95%以上人会做Prompt engineering
- 只需要调整输入,对模型没有改动
- 全量微调(本质和预训练一模一样)
- 更贵
- 容易在小数据集上过拟合/灾难性遗忘
- 高效参数微调(低参微调)
什么是PEFT
PEFT是一个使用更少参数量、更低资源去微调的一个LLM的集合体。
PEFT方法

additive、selective、reparametrization-based(重参数化)
三种主流的做高效参数微调的思路
additive:在原本模型之上加一些参数非常小的层,只训练这些。
selective:只微调bias的参数,其他冻结。
reparametrization-based:也额外增加一部分,但增加的这一部分最终会加回模型参数身上去。
Adapters-based方法

Adapters是一种新的模块被添加到预训练网络层之间
原始模型权重冻结住,只训练Adapter层
效果
使用全部参数的0.15%的参数量,就可以达到同等的效果。

不增加新的参数的选择
BitFit:Bias-terms Fine-Tuning

只训练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小,训练完毕后,相乘再加回去。

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

核心改变:让参数变得更小了
LoRA是把一个大矩阵变成两个小矩阵,而IA3连矩阵都不要了直接换了vector
黄色的部分全部是vector。
虽然参数更小了,但是效果还是很好的甚至比LoRA还要好。
具体代码:

Prompt tuning回顾
相关示例如下:
可以设置来一个task就增加嵌入的参数进行微调,也可以混在一起进行微调
如下所示是Prompt Tunning的效果对比
因为Prompt Tuning只改变了一点参数,如果数据量很大,这点参数不能很好的表征。如下是Prefix Tuning,在Transformer的Encoder或Decoder里面的全连接层前面加写参数,这样训练的参数量还是不是特别多,但是每一层都影响到了,整个的模型的表现就会好。
如下说明了效果很好,即使全量微调都不一定比这好。
PEFT(Parameter-Efficient Fine-Tuning)
为什么要使用Fine-Tuning?
当获得一些数据并使用LLM:
什么是PEFT
PEFT是一个使用更少参数量、更低资源去微调的一个LLM的集合体。
PEFT方法
additive、selective、reparametrization-based(重参数化)
三种主流的做高效参数微调的思路
additive:在原本模型之上加一些参数非常小的层,只训练这些。
selective:只微调bias的参数,其他冻结。
reparametrization-based:也额外增加一部分,但增加的这一部分最终会加回模型参数身上去。
Adapters-based方法
Adapters是一种新的模块被添加到预训练网络层之间
原始模型权重冻结住,只训练Adapter层
效果
使用全部参数的0.15%的参数量,就可以达到同等的效果。
不增加新的参数的选择
BitFit:Bias-terms Fine-Tuning
只训练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小,训练完毕后,相乘再加回去。
(IA)^3 Infused Adapter by Inhibiting and Amplifying Inner Activations
核心改变:让参数变得更小了
LoRA是把一个大矩阵变成两个小矩阵,而IA3连矩阵都不要了直接换了vector
黄色的部分全部是vector。
虽然参数更小了,但是效果还是很好的甚至比LoRA还要好。
具体代码: