1 LoRA之前的几种大模型微调
1.1 全参数微调
- 全量微调指的是,在下游任务的训练中,对预训练模型的每一个参数都做更新
- 比如图中d*d的参数矩阵, 在微调时这d*d个参数都需要更新
- 全量微调的显著缺点是,训练代价昂贵
1.2 Adapter Tuning
- 在LoRA出现前的一种主流局部微调办法
- 在原来的Transformer层和全连接层之后接一个Adapter
- Adapter结构就是右侧那个结构,两个全连接层,一个非线性激活层
- Adapter相当于“额外知识模块”
- 在微调时,除了Adapter的部分,其余的参数都是被冻住的
- 在原来的Transformer层和全连接层之后接一个Adapter
- Adapter Tuning的劣势是:添加了Adapter后,模型整体的层数变深,会增加训练速度和推理速度
1.3 Prefix Tuning
类似于soft prompt
- 这个的缺点是
- 较难训练,且模型的效果并不严格随prefix参数量的增加而上升
- 使得输入层有效信息长度减少
- 为了节省计算量和显存,一般会固定输入数据长度。
- 增加了prefix之后,留给原始文字数据的空间就少了
- ——>可能会降低原始文字中prompt的表达能力
2 LoRA(Low-Rank Adaptation,低秩适配器)
- 我们换一种方式理解微调
- 更新的权重=“冻住的预训练权重” + “微调过程中产生的权重更新量”
- 设输入为 x ,输出为 h
- 左侧是全参数微调
——预训练权重
- h=Wx+ΔWx
- 右侧是LoRA
- h=Wx+BAx
,均为低秩矩阵,其中一个采用高斯分布初始化,另一个采用零初始化
- ——>参数量从d*d降低至2*r*d