BERT-of-Theseus:基于模块替换的模型压缩方法

BERT-of-Theseus是一种模型压缩方法,通过逐步替换模块来简化BERT模型,相比剪枝和蒸馏等传统手段,流程更优雅、简洁。该方法基于大模型的可替换性,直接使用小模型的模块替换大模型的部分,以训练出效果接近的压缩模型。
摘要由CSDN通过智能技术生成

©PaperWeekly 原创 · 作者|苏剑林

学校|追一科技

研究方向|NLP、神经网络

最近了解到一种称为“BERT-of-Theseus”的 BERT 模型压缩方法,来自论文 BERT-of-Theseus: Compressing BERT by Progressive Module Replacing。这是一种以“可替换性”为出发点所构建的模型压缩方案,相比常规的剪枝、蒸馏等手段,它整个流程显得更为优雅、简洁。

论文标题:BERT-of-Theseus: Compressing BERT by Progressive Module Replacing

论文链接:https://arxiv.org/abs/2002.02925

本文将对该方法做一个简要的介绍,给出一个基于 bert4keras [1] 的实现,并验证它的有效性。

▲ BERT-of-Theseus,原作配图

模型压缩

首先,我们简要介绍一下模型压缩。不过由于笔者并非专门做模型压缩的,也没有经过特别系统的调研,所以该介绍可能显得不专业,请读者理解。

1.1 基本概念

简单来说,模型压缩就是“简化大模型,得到推理速度更快的小模型”。当然,一般来说模型压缩是有一定牺牲的,比如最明显的是最后的评测指标会有一定的下降,毕竟“更好又更快”的免费午餐是很少的,所以选择模型压缩的前提是能允许一定的精度损失。

其次,模型压缩的提速通常只体现在预测阶段,换句话说,它通常需要花费更长的训练时间,所以如果你的瓶颈是训练时间,那么模型压缩也不适合你。

模型压缩要花费更长时间的原因是它需要“先训练大模型,再压缩为小模型”。读者可能会疑惑:为什么不直接训练一个小模型?答案是目前很多实验已经表明,先训练大模型再压缩,相比直接训练一个小模型,最后的精度通常会更高一些。

也就是说,在推理速度一样的情况,压缩得到的模型更优一些,相关探讨可以参考论文 Train Large, Then Compress: Rethinking Model Size for Efficient Training and Inference of Transformers  [2] ,另外知乎上也有讨论《为什么要压缩模型,而不是直接训练一个小的 CNN?》[3]。

1.2 常见手段

常见的模型压缩技术可以分为两大类:1)直接简化大模型得到小模型;2)借助大模型重新训练小模型。这两种手段的共同点是都先要训练出一个效果比较好的大模型,然后再做后续操作。

第一类的代表方法是剪枝(Pruning)量化(Quantization)

剪枝,顾名思义,就是试图删减掉原来大模型的一些组件,使其变为一个小模型,同时使得模型效果在可接受的范围内;

至于量化,指的是不改变原模型结构,但将模型换一种数值格式,同时也不严重降低效果,通常我们建立和训练模型用的是 float32 类型,而换成 float16 就能提速且省显存,如果能进一步转换成 8 位整数甚至 2 位整数(二值化),那么提速省显存的效果将会更加明显。

第二类的代表方法是蒸馏(Distillation)。蒸馏的基本想法是将大模型的输出当作小模型训练时的标签来用,以分类问题为例,实际的标签是 one hot 形式的,大模型的输出(比如 logits)则包含更丰富的信号,所以小模型能从中学习到更好的特征。

除了学习大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值