作者认为:现有的 parameter-efficient tuning 方法虽然有效,但是对这些方法中真正有效的设计以及它们之间的联系很少被研究和理解。
作者基于此研究了 adapter, prefix-tuning 和 LoRA 等方法的设计重点和它们之间的联系,同时研究了这些方法之间的交换或组合。
作者认为:parameter-efficient tuning 方法保持基模型参数不变,其本质相当于以某种方式修饰基模型的表征。主要的设计在于:
- 用来计算表征修饰的方法(函数)
- 进行修饰的位置
- 修饰与原始表征之间结合的方法
parameter-efficient tuning 计算过程
transformer 层的计算过程即一个 multi-head attention 接一个 FFN 层
-
attn 层计算过程为:
- 首先输入映射为注意力矩阵 Q∈Rn×dk, K∈Rm×dk, V∈Rm×dv
- Attn(Q,K,V)=softmax(dkQKT)⋅V
在 multi-head attn 中,实际是在 Nh 个 heads 中并行进行上述 attn 计算。第 i 个 head 的输入由注意力参数矩阵 Wqi,Wki,Wvi∈Rd×dh 分别与输入相乘得到,即:
headi=Attn(xWqi,CWki,CWvi)
其中,x 是 query vector, C 是整个输入序列的嵌入。
multi-head attn 将每个 head 的计算结果拼接,并投影到模型维度:
MHA(C,x)=Concati=1Nh(headi)Wo
其中 Wo∈Rd×d, dh 通常是 Nhd, 即:每个 head 通常是在低维空间上进行计算。
-
FFN 层的计算过程为:
FFN(x)=ReLU(xW1+b1)W2+b2
其中 W1∈Rd×dm, W2∈Rdm×d, b1∈Rdm, b2∈Rd.
transformer 中通常在 FFN 层使用较大的 dm, 如 dm=4d。
Adapters(串行式)
adapter 通常在 transformer 层之间插入较小的 adapter layer, adapter layer 通常由一个下投影层 Wdown∈Rd×r 将输入表征 h 投影到低维空间,然后通过一个非线性层 f(⋅), 最后通过一个上投影层 Wup∈Rr×d 将表征恢复到高维空间。adapters 层通常会应用残差连接,以保证初始状态下的性能。
h←h+f(hWdown)Wup
Prefix-tuning
prefix-tuning 方法即在每个 transformer 层的 multi-head attn 计算中,向每个 head 的 key 和 value 矩阵的前部添加 l 个可调的向量,即 prefix 向量。
具体来说,prefix-tuning 将两个矩阵: Pk,Pv∈Rl×d 分别与 key, value 矩阵 K,V 拼接,则拼接后的 attn 计算过程为:
headi=Attn(xWqi,concat(Pki,CWki),concat(Pvi,CWvi))
其中的 Pki,Pvi∈Rl×d/Nh, 即 Pk,Pv 分解到 Nh 个 heads 中第 i 个 head 的向量。
LoRA
LoRA 通过向 transformer layer 中插入低维矩阵,以低秩矩阵相乘的方式近似到高维矩阵,实现对基模型参数的修饰。
具体的说,对于一个高维基模型参数 W∈Rd×k, 对其进行参数修饰可以表示为:W+ΔW. LoRA 则通过两个低秩矩阵近似地得到 ΔW,即:ΔW=WdownWup, 其中 Wdown∈Rd×r, Wup∈Rr×k。
LoRA 将上述参数修饰方法应用到 query 和 value 的注意力投影参数 Wq 和 Wv 上。LoRA 通过对参数的修饰实现对表征的修饰:
h←h+s⋅xWdownWup
其中 s≥1 是可调的缩放超参数。
区别和联系
Prefix-tuning 与 Adapters
head=Attn(Q,concat(Pk,K),concat(Pv,V))=softmax(Qconcat(Pk,K)T)concat(Pv,V)=(1−λ(x))softmax(QKT)V+λ(x)softmax(QPkT)Pv=(1−λ(x))Attn(Q,K,V)+λ(x)Attn(Q,Pk,Pv)
其中的 Q=xWq, K=CWk, V=CWv, 因此又可以写为:
head=Attn(xWq,concat(Pk,CWk),concat(Pv,CWv))=softmax(xWqconcat(Pk,CWk)T)[PvCWvT]=(1−λ(x))softmax(xWqWkTCT)CWv+λ(x)softmax(xWqPkTPv)=(1−λ(x))standard attentionAttn(xWq,CWk,CWv)+λ(x)independent ofAttn(xWq,Pk,Pv)C
其中 λ(x)=Σiexp(xWqPkT)i+Σjexp(xWqWkTCT)jΣiexp(xWqPkT)i. note: softmax(x)=∑iexp(x)exp(x)
note:
x∈Rd,Wq,Wk,Wv∈Rd×dh,C∈Rm×d,Pk,Pv∈Rl×dh, hence: concat(Pk,CWk),concat(Pv,CWv)∈R(l+m)×d
注意到上述 head 计算结果中前一项即正常的 attn , 后一项为独立于输入 C 的逐 query x 的 attn。可看作对表征的修饰:
h←(1−λ(x))h+λ(x)Δh
其中: Δh:=softmax(xWqPkT)Pv
定义 W1=WqPkT, W2=Pv, f=softmax, 则可以将上式重写为:
h←(1−λ(x))h+λ(x)f(xW1)W2
相同之处
prefix-tuning 计算过程与 adapter 的计算过程结构相似,W1∈Rdh×l, W2∈l×dh 起到 adapter 中 Wdown 和 Wup 的作用, l 则和 adapter 中的 r 类似:是计算修饰向量 Δh 时的秩的约束,即 Δh 是至多 l 个向量的线性组合
不同之处
- 在修饰项链结合上,adapter 没有类似 λ 的门控过程
- prefix-tuning 使用 PLM layer 的输入 x 来计算 Δh, adapter 使用 h 即 PLM layer 的输出
- prefix-tuning 在 multi-head attn 的每个 head 内进行修饰过程,adapter 可以选择在 attn 或 FFN 的输出进行修饰
设计要点
综合三种方法的计算过程的异同,可以总结其设计要点如下:
- Functional Form: 即用来计算 Δh 的函数. 三种方法都使用类似 proj_down→non_linear→proj_up 的过程,LoRA 中没有 non_linear 过程
- Modified Representation: 即使用什么 hidden state 作为输入来计算 Δh
- Insertion Form: 即添加的模型如何插入到基模型中
- Composition Function: 即 Δh 如何与基模型的表征 h 组合,如 adapter 通过简单相加,prefix-tuning 通过门控相加, LoRA 通过缩放相加
作者基于这些设计要点,设计了三种他们的组合, 以研究哪个设计维度和设计方式最为有效:
- Parallel Adapter: 将 prefix-tuning 以 x 作为输入的并行性引入 adapter
- Multi-head Parallel Adapter: 将 prefix-tuning 作用在每个 head 的特点引入 adapter
- Scaled Parallel Adapter: 将 LoRA 的缩放相加组合方式引入 adapter
作者使用 parallel adapter 和 sequential adaper 实验,结果表明并行设计在所有 bench mark 上都优于串行设计
Where to Modify: Attention or FFN
作者使用并行 adapter 分别作用在 attention 和 FFN 的模型以及 prefix-tuning 和作用在 FFN 层上的 LoRA 进行实验,结果表明 FFN 上的修饰优于 attention 上的修饰。作者认为:不论使用何种修饰函数和组合方式,FFN 上的修饰可以更加有效地利用新添加的参数
作者对这一现象提出猜想:FFN 层学习到的是任务相关的文本模式特征,而 attention 学习到的是文本之间的交互模式(即进行有效自注意力计算的模式)
进一步地,作者减少添加的参数量 (0.1%) 发现在参数量小的情况下 attention 层的修饰更有效。
基于此实验结果,作者提出一条设计原则: 应该在 FFN 层的修饰上使用更大的参数量 (更大的维度或更深的层数)
Composition Function
作者在 LoRA 上做消融实验,并于 scaled parallel adapter 比较,发现缩放相加优于直接相加,并且缩放系数的选择对模型性能有影响
作者最终结合所有被认为更优的设计要素: 基于 prefix-tuning (门控相加), 在 attention 层使用小维度的修饰层 l=30, 在 FFN 层使用大维度的修饰层 r=512, 设计出新的模型 MAM Adapter