BERT-of-Theseus:模块替换,交替训练

2020 年 12 月 9 日 AINLP

本文阅读大概需要4分钟;大家记得星标公众号哈

大家好,我是DASOU,今天介绍一下:BERT-of-Theseus;

BERT-of-Theseus 有两个特点:

  1. 基于模块替换进行压缩

  2. 除了具体任务的损失函数,没有其他多余损失函数。

效果的话,与 相比, :推理速度  ;模型效果 98%;

模块替换

举个例子,比如有一个老师网络是12层的Bert,现在我每隔两层Transformer,替换为学生网络的一层Transformer。那么最后我的学生网络也就变成了6层的小Bert,训练的时候老师网络和学生网络的模块交替训练。

直接看下面这个架构图:

BERT-of-Theseus

我们来说一下这样做的好处。

我刚才说每隔老师网络的两层替换为学生网络的一层。很容易就想到PKD里面,有一个是PKD-Skip策略。

就是每隔几层,学生网络的层去学老师网络对应层的输出,使用损失函数让两者输出接近,使用的是CLS的输出。

在这里提一下蒸馏/压缩的基本思想,一个最朴素的想法就是让学生网络和老师网络通过损失函数在输出层尽可能的靠近。

进一步的,为了提升效果,可以通过损失函数,让学生网络和老师网络在中间层尽可能的靠近,就像PKD这种。

这个过程最重要的就是在训练的时候需要通过损失函数来让老师网络和学生网络尽可能的接近。

如果是这样的话,问题就来了,损失函数的选取以及各自损失函数之前的权重就需要好好的选择,这是一个很麻烦的事情。

然后我们再来看 BERT-of-Theseus,它就没有这个问题。

它是在训练的时候以概率  来从老师网络某一层和学生网络的某一层选择一个出来,放入到训练过程中。

在这个论文里,老师网络叫做 , 学生网络叫做

所以模块替换的核心目的是为了在训练的时候学生网络和老师网络的层交替训练

训练过程

对着上面的网络架构,我说一下整体训练的过程:

  1. 在具体任务数据上训练一个 BERT-base 网络作为 
  2. 使用   前六层初始化一个 6层的Bert作为 
  3. 在具体任务数据上,固定  相应权重,以概率 (随着steps,线性增加到1),对整个网络( 加上 )进行整体的交替训练。
  4. 为了让  在以后处理单独任务的时候可以作为一个整体,抽离出来 (其实 设置为1就可以了),作为一个单独的个体,在训练数据上继续微调。直至效果不再增加。

简单总结,在训练数据上,老师网络和学生网络共同训练。

因为存在概率问题,有的时候是老师网络的部分层加入训练,有的时候是学生网络的部分层加入训练。

在这一步训练完成之后,为了保证学生网络作为一个整体(因为在第一步训练的时候大部分情况下学生网络的层都是分开加入训练过程的),在具体任务数据上,对学生网络继续微调,直至效果不再增加。

结果分析

不同方法的损失函数

论文提供了一个不同Bert蒸馏方法使用的损失函数的图,值得一看,见下图:

bert蒸馏不同方法损失函数

值得注意的是,这里的  应该是选取前六层,在具体任务微调的结果。

效果

BERT-of-Theseus实验效果

整体来说,BERT-of-Theseus 思路很简单,效果也还不错。

总结

这个论文其实思路很简单,效果也还不错。

主要学到的一个知识点,是在交替训练之后,对学生网络继续进行训练。因为在第一步训练的时候,总是某个层单独在训练。



由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入预训练模型交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注预训练模型 

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
1

相关内容

最新《弱监督预训练语言模型微调》报告,52页ppt
专知会员服务
37+阅读 · 2020年12月26日
少即是多?非参数语言模型,68页ppt
专知会员服务
23+阅读 · 2020年11月22日
最新《多任务学习》综述,39页pdf
专知会员服务
264+阅读 · 2020年7月10日
专知会员服务
73+阅读 · 2020年5月21日
【CVPR2020】用多样性最大化克服单样本NAS中的多模型遗忘
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
23+阅读 · 2019年11月4日
最新《多任务学习》综述,39页pdf
专知
28+阅读 · 2020年7月10日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
【Github】GPT2-Chinese:中文的GPT2训练代码
AINLP
52+阅读 · 2019年8月23日
一文详解Google最新NLP模型XLNet
PaperWeekly
18+阅读 · 2019年7月1日
【GitHub】BERT模型从训练到部署全流程
专知
34+阅读 · 2019年6月28日
奇点已过?聊聊BERT之后的NLP时代
AI研习社
4+阅读 · 2019年6月6日
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
DeepLab v2及调试过程
计算机视觉战队
5+阅读 · 2018年3月24日
[深度学习] AlexNet,GoogLeNet,VGG,ResNet简化版
机器学习和数学
20+阅读 · 2017年10月13日
Compression of Deep Learning Models for Text: A Survey
Contrastive Representation Distillation
Arxiv
5+阅读 · 2019年10月23日
Arxiv
3+阅读 · 2019年8月19日
Arxiv
11+阅读 · 2019年6月19日
Arxiv
6+阅读 · 2018年3月12日
VIP会员
相关VIP内容
最新《弱监督预训练语言模型微调》报告,52页ppt
专知会员服务
37+阅读 · 2020年12月26日
少即是多?非参数语言模型,68页ppt
专知会员服务
23+阅读 · 2020年11月22日
最新《多任务学习》综述,39页pdf
专知会员服务
264+阅读 · 2020年7月10日
专知会员服务
73+阅读 · 2020年5月21日
【CVPR2020】用多样性最大化克服单样本NAS中的多模型遗忘
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
23+阅读 · 2019年11月4日
相关资讯
最新《多任务学习》综述,39页pdf
专知
28+阅读 · 2020年7月10日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
【Github】GPT2-Chinese:中文的GPT2训练代码
AINLP
52+阅读 · 2019年8月23日
一文详解Google最新NLP模型XLNet
PaperWeekly
18+阅读 · 2019年7月1日
【GitHub】BERT模型从训练到部署全流程
专知
34+阅读 · 2019年6月28日
奇点已过?聊聊BERT之后的NLP时代
AI研习社
4+阅读 · 2019年6月6日
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
DeepLab v2及调试过程
计算机视觉战队
5+阅读 · 2018年3月24日
[深度学习] AlexNet,GoogLeNet,VGG,ResNet简化版
机器学习和数学
20+阅读 · 2017年10月13日
Top
微信扫码咨询专知VIP会员