©PaperWeekly 原创 · 作者 | 苏剑林
单位 | 追一科技
研究方向 | NLP、神经网络
如果说大型的预训练模型是自然语言处理的“张良计”,那么对应的“过墙梯”是什么呢?笔者认为是高效地微调这些大模型到特定任务上的各种技巧。除了直接微调全部参数外,还有像 Adapter [1]、P-Tuning 等很多参数高效的微调技巧,它们能够通过只微调很少的参数来达到接近全量参数微调的效果。然而,这些技巧通常只是“参数高效”而并非“训练高效”,因为它们依旧需要在整个模型中反向传播来获得少部分可训练参数的梯度,说白了,就是可训练的参数确实是少了很多,但是训练速度并没有明显提升。
最近的一篇论文《LST: Ladder Side-Tuning for Parameter and Memory Efficient Transfer Learning》[2] 则提出了一个新的名为“Ladder Side-Tuning(LST)”的训练技巧,它号称同时达到了参数高效和训练高效。是否真有这么理想的“过墙梯”?本来就让我们一起来学习一下。
方法大意
其实 LST 这把“过墙梯”的结构,用原论文的 Figure 2 就可以清晰地说清楚了:
▲ LST与Adaper、P-tuning的对比图
反向传播,也就是求模型梯度,是从输出层向输入层逐步计算的,因此反向传播的深度/计算量,取决于最靠近输入层的参数深度,跟可训练的参数量没有太必然的联系。对于 Adapter 来说,它在每一层后面都插入了一个小规模的层,虽然其余参数都固定了,只有新插入的层可训练,但每一层都新层,所以反向传播要传到输入层;对于 P-tuning来说,本质上它是只有在 Embedding 层中有少量可训练参数,但 Embedding 层是输入层,因此它的反向传播也要贯穿整个模型。因此,这两种方案能提升的训练效率并不多。至于 LST,它是在原有大模型的基础上搭建了一个“旁支”(梯子),将大模型的部分层输出作为旁枝模型的输入,所有的训练参数尽在旁枝模型中,由于大模型仅提供输入,因此反向传播的复杂度取决于旁枝模型的规模,并不需要直接在原始大模型上执行反向传播,因此是可以明显提升训练效率的。
原论文做了不少 LST 的实验,包括 NLP、CV 的,下面是 LST 在 GLUE 数据集上的效果:
可以看到,LST 确实具备了参数高效和训练高效的特点,能够在较小的训练参数和训练成本的情况下,达到一个不错的微调效果。特别是最后两行的实验结果,体现出了 LST 在有限训练资源下微调大模型的可能性。
笔者在中文的 CLUE 任务上也做了简单尝试,参考代码为:Github:https://github.com/bojone/LST-CLUE
注意,原论文的“梯子”是用跟 Adapter 中的 MLP 层来搭建的,而笔者上述实现直接用了 Transformer 一样的“Attention + FFN”组合,可训练的参数量控制在 100 万左右,约为 base 版的 1.2%,或者 large 版的 0.4%,梯子的初始化直接用随机初始化,最终在验证集的效果如下:
可以看到,实验结果没有原论文的英文实验那么乐观(当然不排除是笔者自己的实现不够好),但训练效率确实有明显提升(平均来说提升一倍左右)。整个实验下来,笔者的感觉是对于比较常规、一般难度的分类任务,LST 能取得相近的效果,但对于比较困难的任务,比如阅读理解等,LST 会有非常明显的下降。当然,其实应该不只是LST有这个问题,大部分号称参数高效的微调方法估计都有这个问题,因为这些方法的实验任务多数都只是 GLUE,GLUE 其实全都是相对简单的分类任务...
从“事后诸葛亮”来看,其实 LST 也算不上多高明的做法,本质上就是把预训练模型固定住,然后把其输出层和部分中间层的结果作为补充输入来训练一个新的小模型,理解到这一点之后,想必很多读者已经在脑海中酝酿着自己的相似方案了。不过,LST 真正的意义在于告诉我们可以这样做,并且给出了一个可行的参考方案,以及实验证明了它确实是大模型的一个有效利用方案。
有类似研究经验的读者会发现,LST 新增的“梯子”分支的初始化是个问题,如果完全随机初始化的话,可能会有训练上的困难,效果效果会不理想。这一点原论文也提到了,它提供了一个截取大模型矩阵权重来作为小模型矩阵初始化的方案,从而提升了 LST 的最终效果,其细节可以在论文中找到,至于笔记自己的实现,就纯粹是简单验证 LST 的有效性,所以就偷懒没实现这一步。
进一步想,既然 LST 新增的“梯子”分支存在初始化难题,而 LST 确实是微调大模型的有效方案,那么未来我们在训练新的大模型时,是不是就可以事先把这个“梯子”也预留好呢?也就是说,我们直接把这个“梯子”作为预训练模型的一部分做大规模的预训练,后面微调的时候,就只微调“梯子”,这样就可以实现高效地微调大模型,又不用担心初始化问题?
从形式上来看,笔者觉得 LST 跟《BERT-of-Theseus:基于模块替换的模型压缩方法》中介绍的 BERT-of-Theseus 挺相似的,只不过一个目的是蒸馏小模型,还是需要用到大模型来反向传播;而 LST 目的则是提升训练效率,不需要大模型来反向传播,但推理时需要用到大模型来前向传播。可以说两者有点互补了。
文章小结
本文主要介绍了同时具备参数高效和训练高效特点的一种大模型微调方法——Ladder Side-Tuning。
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧