在深度学习的应用中,模型微调(fine-tuning)是一个非常重要的过程,它是指在一个预先训练好的模型上针对特定的任务进行参数调整。常见的微调方法有:Adapter Tuning、LORA、Prefix-Tuning、Prompt Tuning、P-tuning、P-tuning v2,文章将分两次介绍这几种微调方法。
一、Adapter Tuning
1.1 原理

-
首先是一个 down-project 层将高维度特征映射到低维特征
-
然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征
-
同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为identity(类似残差结构)
1.2 效果

1.3意义与遗留问题
二、LORA
2.1 原理

-
在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的
intrinsic rank
。 -
训练的时候固定 PLM 的参数,只训练降维矩阵 A 与升维矩阵 B 。而模型的输入输出维度不变,输出时将 BA 与 PLM 的参数叠加。
-
用随机高斯分布初始化 A ,用 0 矩阵初始化 B ,保证训练的开始此旁路矩阵依然是 0 矩阵。
2.2效果


2.3意义与遗留问题
三、Prefix-Tuning
3.1原理

3.2 效果

3.3 意义与遗留问题
本节介绍了 Adapter Tuning、LORA、Prefix-Tuning这三种大模型微调方法,在下节内容会介绍其他三种微调方法。Prompt Tuning
原理
Prefix Tuning 的简化版本,只在输入层加入 prompt tokens,并不需要加入 MLP 进行调整来解决难训练的问题,主要在 T5 预训练模型上做实验。
固定预训练参数,为每一个任务额外添加一个或多个 embedding,之后拼接 query 正常输入 LLM,并只训练这些 embedding。左图为单任务全参数微调,右图为 Prompt tuning。效果
似乎只要预训练模型足够强大,其他的一切都不是问题。作者也做实验说明随着预训练模型参数量的增加,Prompt Tuning的方法会逼近 Fine-tune 的结果。![]()
意义与遗留问题
该方法可以看作是 Prefix Tuning 的简化版本,Prompt 是人为构造的“显式”的提示,并且无法更新参数,而Prefix 则是可以学习的“隐式”的提示。遗留问题:由人工设计Prompt,自然语言提示本身十分脆弱(如下图所示,选择不同的Prompt对下游任务的性能影响较大),而且从优化角度无法达到最优。P-tuning
原理
Prefix Tuning 的简化版本,只在输入层加入 prompt tokens,并不需要加入 MLP 进行调整来解决难训练的问题,主要在 T5 预训练模型上做实验。
固定预训练参数,为每一个任务额外添加一个或多个 embedding,之后拼接 query 正常输入 LLM,并只训练这些 embedding。左图为单任务全参数微调,右图为 Prompt tuning。效果
使用P-tuning,可以让相似代销的GPT2实现比bert模型相当的甚至更好的结果,这个发现颠覆普遍认为的——双向模型比单向模型在NLU任务中表现的更好。 P-tuning给了一种在有限算力下调用大型预训练模型的思路。![]()
意义与遗留问题
遗留问题:Prompt Tuning和P-tuning这两种方法都是在预训练模型参数规模够足够大时,才能达到和Fine-tuning类似的效果,而参数规模较小时效果则很差,且在sequence tagging任务上表现都很差。P-tuning v2
原理
相比 Prompt Tuning 和 P-tuning 的方法, P-tuning v2 方法在多层加入了 Prompts tokens 作为输入,带来两个方面的好处:带来更多可学习的参数、足够 parameter-efficient,同时加入到更深层结构中的 Prompt 能给模型预测带来更直接的影响。v1 到 v2 的可视化:蓝色部分为参数冻结,橙色部分为可训练部分。![]()
效果
不同预训练模型大小下的表现,在小模型下取得与 Full-finetuning 相近的结果,并远远优于 P-Tuning。 不同任务下的 P-Tuning v2 效果都很好,而 P-Tuning 和 Prompt Learning 效果不好;同时,采用多任务学习的方式能在多数任务上取得最好的结果。遗留问题
很容易导致旧知识遗忘,微调之后的模型,在之前的问题上表现明显变差。