本文阅读大概需要4分钟;大家记得星标公众号哈
大家好,我是DASOU,今天介绍一下:BERT-of-Theseus;
BERT-of-Theseus 有两个特点:
基于模块替换进行压缩
除了具体任务的损失函数,没有其他多余损失函数。
效果的话,与 相比, :推理速度 ;模型效果 98%;
举个例子,比如有一个老师网络是12层的Bert,现在我每隔两层Transformer,替换为学生网络的一层Transformer。那么最后我的学生网络也就变成了6层的小Bert,训练的时候老师网络和学生网络的模块交替训练。
直接看下面这个架构图:
我们来说一下这样做的好处。
我刚才说每隔老师网络的两层替换为学生网络的一层。很容易就想到PKD里面,有一个是PKD-Skip策略。
就是每隔几层,学生网络的层去学老师网络对应层的输出,使用损失函数让两者输出接近,使用的是CLS的输出。
在这里提一下蒸馏/压缩的基本思想,一个最朴素的想法就是让学生网络和老师网络通过损失函数在输出层尽可能的靠近。
进一步的,为了提升效果,可以通过损失函数,让学生网络和老师网络在中间层尽可能的靠近,就像PKD这种。
这个过程最重要的就是在训练的时候需要通过损失函数来让老师网络和学生网络尽可能的接近。
如果是这样的话,问题就来了,损失函数的选取以及各自损失函数之前的权重就需要好好的选择,这是一个很麻烦的事情。
然后我们再来看 BERT-of-Theseus,它就没有这个问题。
它是在训练的时候以概率 来从老师网络某一层和学生网络的某一层选择一个出来,放入到训练过程中。
在这个论文里,老师网络叫做 , 学生网络叫做 ;
所以模块替换的核心目的是为了在训练的时候学生网络和老师网络的层交替训练
对着上面的网络架构,我说一下整体训练的过程:
简单总结,在训练数据上,老师网络和学生网络共同训练。
因为存在概率问题,有的时候是老师网络的部分层加入训练,有的时候是学生网络的部分层加入训练。
在这一步训练完成之后,为了保证学生网络作为一个整体(因为在第一步训练的时候大部分情况下学生网络的层都是分开加入训练过程的),在具体任务数据上,对学生网络继续微调,直至效果不再增加。
论文提供了一个不同Bert蒸馏方法使用的损失函数的图,值得一看,见下图:
值得注意的是,这里的 应该是选取前六层,在具体任务微调的结果。
整体来说,BERT-of-Theseus 思路很简单,效果也还不错。
这个论文其实思路很简单,效果也还不错。
主要学到的一个知识点,是在交替训练之后,对学生网络继续进行训练。因为在第一步训练的时候,总是某个层单独在训练。
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏