如何对large-scale PLM进行调整呢?
一个有效的方式是delta tuning;只更新PLM中的一小部分参数,其它参数不动。
把解决任务的能力具象化成delta object这样的参数,只需要几十兆参数存储。
过去模型参数是随机的,现在预训练模型,已经学到了一些universal知识,针对下游任务,只需要学习一下将通用支持到专家领域的知识。
有如下几种delta tuning的方式:
1.另外增加一些参数;2.对模型中的特定参数进行学习;3.
增量tuning:
增加两个adapter 层 ,只需要增加0.5%左右的的参数
简化:不沿着模型做反向传播,在低维条件下进行,节省计算和显存。
优化:增加prefix-tuning,只在输入层增加;不想前面的,每层都加;效果不如前面的方法好。
只微调:bias;简单任务比较好用;复杂任务效果不太好。
Lora把模型的优化,不只是在低维,认为模型的优化是低秩的。
这些事情都是基于一个假设,模型的优化,本质上可以用一个很少代价来完成,可以把它映射到一个低维或者低秩的过程,用很简单的过程完成模型的优化。
adapter、predix tuning、Lora实际上做的事情都是大模型不动,只微调很少部分的参数。可以推导出更加通用的adapter变体。
理论分析:在满足一定边界条件下,低维的空间内,找到低维的表示;
不同的任务,微调方法不同,会有不同的效果,不是一种方法可以使用于所有任务。
delta tunig组合,效果会好一些。但是都不是最优;能否自动搜索找最优呢?
自学习的方法:能够用更少的参数,去完成delta tuning。
delta tuning方法具有迁移性。不同任务之间可以迁移。
batch size越大,节省越少?
总结:
1.用很少的参数,优化模型
2.参数越多,模型的结构越不重要。
论文和工具包: