LoRA 微调方法的主要优势
预训练模型参数可以被共享,用于为不同的任务构建许多小的 LoRA 模块。冻结共享模型,并通过替换矩阵 A 和 B 可以有效地切换任务,从而显著降低存储需求和多个任务切换的成本。
当使用自适应优化器时,由于不需要计算梯度以及保存太多模型参数,LoRA 使得微调效果更好,并将微调的硬件门槛降低了 3 倍。
低秩分解采用线性设计的方式使得在部署时能够将可训练的参数矩阵与冻结的参数矩阵合并,与完全微调的方法相比,不引入推理延迟。
LoRA 与其它多种微调方法不冲突,可以与其它微调方法相结合,比如下节实训将要介绍的前缀调优方法等。
Prefix-tuning 微调方法
在模型中加入 prefix,即连续的特定任务向量,微调时只优化这一小段参数
p
ϕ
(
z
i
+
1
∣
h
≤
i
)
=
s
o
f
t
m
a
x
(
W
ϕ
h
i
(
n
)
)
pϕ(zi+1∣h≤i)=softmax(Wϕhi(n))
pϕ(zi+1∣h≤i)=softmax(Wϕhi(n))
其中ϕ是语言模型的参数。在自回归语言模型前添加 prefix 后,z=[prefix;x;y]或者z=[prefix;x;prefix;y],Pidx表示 prefix 的索引,|Pidx|表示 prefix 的长度。
Prefix-tuning 通过初始化可训练矩阵Pθ(维度为∣Pidx×dim(hi)∣) 来存储 prefix 参数:
h i = { P θ [ i , : ] , i f i ∈ P i d x L M ϕ ( z i , h < i ) , o t h e r w i s e } hi=\{Pθ[i,:],if~i∈Pidx~LMϕ(zi,h<i),otherwise\} hi={Pθ[i,:],if i∈Pidx LMϕ(zi,h<i),otherwise}
训练对象与 Fine-tuning 相同,但语言模型的参数ϕ固定,仅 prefix 参数θ是可训练的参数。因此hi是可训练的Pθ的函数。
P-tuning v1 微调方法
将 Prompt 加入到微调过程中,只对 Prompt 部分的参数进行训练,而语言模型的参数固定不变
P-tuning v1 设计一个自动的生成连续 prompt 的方法来提升模型的微调效果。
{ h 0 , … , h i , e ( x ) , h i + 1 , … , h m , e ( y ) } \{h0,…,hi,e(x),hi+1,…,hm,e(y)\} {h0,…,hi,e(x),hi+1,…,hm,e(y)}
其中h代表 P-tuning v1 的连续 prompt 表征,e代表一个预训练的语言模型,x代表数据的原始输入,y代表数据的标签。在面对下游任务微调时,通过优化h的参数来进行模型微调:
h 0 : m = a r g m i n L ( M ( x , y ) ) h^0:m=argminL(M(x,y)) h0:m=argminL(M(x,y))
注意:p-tuning不是随机初始化几个token直接训练,而是通过一个小型的LSTM模型把这几个Embedding算出来,并且将这个LSTM模型设为可学习的。
表现:
超过 100 亿个参数时,P-tuning v1 可以与全参数微调方法相媲美 但对于那些较小的模型,P-tuning v1 方法和全参数微调方法的表现有很大差异,效果很差
同时,P-tuning v1 缺少跨任务的通用性,在序列标注任务中的有效性没有得到验证
P-tuning v2 微调方法
采用了 prefix-tuning 的做法,在输入前面的每一层都加入可微调的参数。
每一层的 transformer 的 embedding 输入都需要被微调,而 P-tuning v1 只在第一层进行微调
同时,对于 prefix 部分,每一层 transformer 的输入不是从上一层输出,而是随机初始化的 embedding 作为输入。
P-Tuning v2 还包括以下改进:
移除 Reparamerization 加速训练方式;
采用多任务学习优化:基于多任务数据集的 Prompt 进行预训练,然后再适配的下游任务。
舍弃词汇 Mapping 的 Verbalizer 的使用,重新利用 [CLS] 和字符标签,跟传统微调方法一样利用 cls 或者 token 的输出做自然语言理解,以增强通用性,可以适配到序列标注任务。
Freeze微调
Freeze 微调方法为什么只微调 Transformer 后几层的全连接层参数呢?下面对其原因进行展开讲述。
Transformer 模型主要由自注意力层和全连接层(FF 层)构成。对于 Transformer 的每一层结构,自注意力层的参数量为4⋅d2,即WQ、WQ、WQ和WQ ∈Rd×d;FF 层的参数量为8⋅d2,即W1∈Rd×4d,W2∈Rd×4d。因此 FF 层占据了模型的32的参数,具有重要的研究价值。
对于各类不同的 NLP 任务,浅层特征往往是具有 “共性”,而主要区别在于各自深层次的语义特征。
因此,通过仅微调 Transformer 后几层的全连接层参数,在保证参数高效微调的前提下,可以最大程度的发挥大语言模型的微调作用。
优势:
大量减少了大语言模型的微调参数,是一种参数高效的微调方法;
由于只需微调高层特征,加快了模型的收敛,节约了微调的时间;
最大程度地保留了大语言模型预训练所学习到的语言的 “共性”,可解释性较强。