PEFT综述
LST: Ladder Side-Tuning for Parameter and Memory Efficient Transfer Learning
在简述 LST 方法之前,我们先思考一下,上述的 Adapter 方法和 P-Tuning 方法在训练微调时到底高效在哪?
我们知道在对模型训练时,我们姑且可以笼统的分为两步:反向传播和梯度下降,以 Pytorch 为例具体就是
loss.backward() #反向传播
optimizer.step() #梯度下降
2
backward()会根据模型的前向推理计算图来反向的对各个 layer 中的 weight 求的偏导
用于之后的梯度下降,对各个 layer 中的 input 求偏导 用于向前层传递梯度,链式求导。 step()则会根据所选用的优化器,对需要训练的参数执行相应的梯度下降策略,我们姑且可以将此过程简单描述成 如下公式 , 其中
为学习率
LST 直接在原模型的推理旁路上加了一个新的分支,也是固定原模型中的参数,将原模型各层输出与新建的旁路分支结合得到输出。

从图中不难发现,三种微调方法:
对于 Adapter 来说虽然只训练新插入的少部分参数,但是整个梯度回传的过程不能省略,换句话说,与微调整个模型相比:1)对于反向传播过程而言,各层对 weight 的梯度
而对于 LST 便是一种反向传播过程和梯度下降过程都高效的微调方法,如上图(c)而言,不难发现,LST 的反向传播和梯度下降过程都与原始模型无关,相当于我重新定义了一个小的模型结构,通过获取原模型的输出作为输入来协助微调最终的结果
对比
微调技术 | 对virtual token的处理 | 参与微调的参数 | 反向传播 | 梯度下降 | 推理延迟 |
---|---|---|---|---|---|
Adapter | 不用求原 W 梯度,得求全层的 X 梯度 | 下降少量新增网络的 W | 会增加 | ||
P-Tuning | MLP+LSTM/MLP | 不用求原 W 梯度,得求全层的 X 梯度 | 下降 Embedding 层的 W | 增加较少 | |
Prefix tuning | MLP | ||||
LST | 只需要求一个小网络的 W 和 X 梯度 | 下降一个新增轻量级网络的 W | 会增加 | ||
LoRA | 既要求 W 梯度,还得求全层的 X 梯度,且计算量增多 | 下降少量的 W | 没有 |