作者:孙思琦、成宇、甘哲、刘晶晶

本文约1800字,建议阅读5分钟

本文为你介绍“耐心的知识蒸馏”模型。

数据派THU后台回复“191010”,获取论文地址。

在过去一年里,语言模型的研究有了许多突破性的进展, 比如GPT用来生成的句子足够以假乱真[1];BERT, XLNet, RoBERTa [2,3,4]等等作为特征提取器更是横扫各大NLP榜单。但是,这些模型的参数量也相当惊人,比如BERT-base有一亿零九百万参数,BERT-large的参数量则高达三亿三千万,从而导致模型的运行速度过慢。为了提高模型的运行时间,本文率先提出了一种新的知识蒸馏 (Knowledge Distillation) [5] 方法来对模型进行压缩,从而在不损失太多精度的情况下,节省运行时间和内存。文章发表在EMNLP 2019。
具体来说,对于句子分类类型的任务,当普通的知识蒸馏模型用来对模型进行压缩的时候, 通常都会损失很多精度。原因是学生模型 (student model) 在学习的时候只是学到了教师模型 (teacher model) 最终预测的概率分布,而完全忽略了中间隐藏层的表示。
就像老师在教学生的时候,学生只记住了最终的答案,但是对于中间的过程确完全没有学习。这样在遇到新问题的时候,学生模型犯错误的概率更高。基于这个假设,文章提出了一种损失函数,使得学生模型的隐藏层表示接近教师模型的隐藏层表示,从而让学生模型的泛化能力更强。文章称这种模型为“耐心的知识蒸馏”模型 (Patient Knowledge Distillation, 或者PKD)。
因为对于句子分类问题,模型的预测都是基于[CLS]字符的特征表示之上,比如在这个特征上加两层全连接。因此研究者提出一个新的损失函数,使得模型能够同时学到[CLS]字符的特征表示:

其中M是学生的层数(比如3,6), N是老师模型的层数(比如12,24),h是[CLS]在模型中隐藏层的表示,而i, j则表示学生-老师隐藏层的对应关系,具体如下图所示。比如,对于6层的学生模型,在学习12层的教师模型的时候, 学生模型可以学习教师模型的 (2,4,6,8,10)层隐藏层的表示 (左侧PKD-skip), 或者教师模型最后几层的表示 (7,8,9,10,11, 右侧PKD-last). 最后一层因为直接学习了教师模型的预测概率,因此略过了最后一个隐藏层的学习。

研究者将提出的模型与模型微调(fine-tuning)和正常的知识蒸馏在7个句子分类的保准数据集上进行比较,在12层教师模型蒸馏到6层或者3层学生模型的时候,绝大部分情况下PKD的表现都优于两种基线模型。并且在五个数据集上SST-2 (相比于教师模型-2.3%准确率), QQP (-0.1%), MNLI-m (-2.2%), MNLI-mm (-1.8%), and QNLI (-1.4%) 的表现接近于教师模型。具体结果参见图表1。从而进一步验证了研究者的猜测,学习了隐藏层表示的学生模型会优于只学教师预测概率的学生模型。

图表1

在速度方面,6层transformer模型几乎可以将推理 (inference) 速度提高两倍,总参数量减少1.64倍;而三层transformer模型可以提速3.73倍,总参数两减少2.4倍。具体结果见图表2。

图表2

  1. Radford, Alec, et al. "Language models are unsupervised multitask learners." OpenAI Blog 1.8 (2019).

  2. Devlin, Jacob, et al. "Bert: Pre-training of deep bidirectional transformers for language understanding." arXiv preprint arXiv:1810.04805 (2018).

  3. Yang, Zhilin, et al. "XLNet: Generalized Autoregressive Pretraining for Language Understanding." arXiv preprint arXiv:1906.08237 (2019).

  4. Liu, Yinhan, et al. "Roberta: A robustly optimized BERT pretraining approach." arXiv preprint arXiv:1907.11692 (2019).

  5. Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. "Distilling the knowledge in a neural network." arXiv preprint arXiv:1503.02531 (2015).

Siqi Sun: is a Research SDE in Microsoft. He is currently working on commonsense reasoning and knowledge graph related projects. Prior joining Microsoft, he was a PhD student in computer science at TTI Chicago, and before that he was an undergraduate student from school of mathematics at Fudan University.

Yu Cheng: is a senior researcher at Microsoft. His research is about deep learning in general, with specific interests in model compression, deep generative model and adversarial learning. He is also interested in solving real-world problems in computer vision and natural language processing. Yu received his Ph.D.from Northwestern University in 2015 and his bachelor from Tsinghua University in 2010. Before join Microsoft, he spent three years as a Research Staff Member at IBM Research/MIT-IBM Watson AI Lab.

Zhe Gan: is a senior researcher at Microsoft, primarily working on generative models, visual QA/dialog, machine reading comprehension (MRC), and natural language generation (NLG). He also has broad interests on various machine learning and NLP topics. Zhe received his PhD degree from Duke University in Spring 2018. Before that, he received his Master's and Bachelor's degree from Peking University in 2013 and 2010, respectively.

Jingjing (JJ) Liu: is a Principal Research Manager at Microsoft, leading a research team in NLP and Computer Vision. Her current research interests include Machine Reading Comprehension, Commonsense Reasoning, Visual QA/Dialog and Text-to-Image Generation. She received her PhD degree in Computer Science from MIT EECS in 2011. She also holds an MBA degree from Judge Business School at University of Cambridge.Before joining MSR, Dr.Liu was the Director of Product at Mobvoi Inc and Research Scientist at MIT CSAIL.

代码已经开源在:https://github.com/intersun/PKD-for-BERT-Model-Compression.

数据派THU后台回复“191010”,获取论文地址。

编辑:于腾凯
校对:林亦霖

点击“阅读原文”拥抱组织

独家 | 基于知识蒸馏的BERT模型压缩相关推荐

  1. 【BERT】BERT模型压缩技术概览

    由于BERT参数众多,模型庞大,推理速度较慢,在一些实时性要求较高.计算资源受限的场景,其应用会受到限制.因此,讨论如何在不过多的损失BERT性能的条件下,对BERT进行模型压缩,是一个非常有现实意义 ...

  2. 娓娓道来!那些BERT模型压缩方法

    本文约3000字,建议阅读10+分钟 本文主要介绍知识蒸馏.参数共享和参数矩阵近似方法. 作者 | Chilia 哥伦比亚大学 nlp搜索推荐 整理 | NewBeeNLP 基于Transformer ...

  3. 所有你要知道的 BERT 模型压缩方法,都在这里!

    模型压缩可减少受训神经网络的冗余,由于几乎没有 BERT 或者 BERT-Large 模型可直接在 GPU 及智能手机上应用,因此模型压缩方法对于 BERT 的未来的应用前景而言,非常有价值. 软件工 ...

  4. 娓娓道来!那些BERT模型压缩方法(一)

    作者 | Chilia 哥伦比亚大学 nlp搜索推荐 整理 | NewBeeNLP 基于Transformer的预训练模型的趋势就是越来越大,虽然这些模型在效果上有很大的提升,但是巨大的参数量也对上线 ...

  5. 使用DistilBERT 蒸馏类 BERT 模型的代码实现

    来源:DeepHub IMBA 本文约2700字,建议阅读9分钟 本文带你进入Distil细节,并给出完整的代码实现.本文为你详细介绍DistilBERT,并给出完整的代码实现. 机器学习模型已经变得 ...

  6. 模型压缩:量化、剪枝和蒸馏

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者荐语 近年来,BERT 系列模型成了应用最广的预训练语言模型, ...

  7. bert模型蒸馏实战

    由于bert模型参数很大,在用到生产环境中推理效率难以满足要求,因此经常需要将模型进行压缩.常用的模型压缩的方法有剪枝.蒸馏和量化等方法.比较容易实现的方法为知识蒸馏,下面便介绍如何将bert模型进行 ...

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

    ©PaperWeekly 原创 · 作者|苏剑林 学校|追一科技 研究方向|NLP.神经网络 最近了解到一种称为"BERT-of-Theseus"的 BERT 模型压缩方法,来自论 ...

  9. 深度学习模型压缩与加速技术(三):低秩分解

    目录 总结 低秩分解 定义 特点 1.二元分解 2.多元分解 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精简模型,在不影响任务完成度的情况下,得到参数量更少.结构 ...

最新文章

  1. 关于union的那些事儿
  2. 【SpringBoot】SpingBoot整合AOP
  3. mysql目录树_MySQL B+树目录及索引优化_mysql
  4. PASCAL-VOC2012 数据集介绍 及 制作同格式数据
  5. 区块链应用 | 区块链火了,这到底是虚火还是实火?
  6. SparkSQL错误:Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider...
  7. Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
  8. 基于DEM数据的河流提取
  9. centos7下载php7.4
  10. ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  11. 微信小程序框架--weui
  12. 诺基亚x6 云服务器,手机上面怎么玩端游?诺基亚X6通过云电脑玩DNF教程
  13. matlab中的clc命令和clear命令
  14. File “/etc/oratab“ is not accessible.
  15. Java通过SMS短信平台实现发短信功能
  16. 怎么将png图片缩小?教你在线压缩png图片的方法
  17. 【Java】Java的各个版本和各个版本的历史版本号的关系与解读
  18. Java:获取字符串长度(length())
  19. RFID射频技术基本原理与射频技术中的基本单位
  20. 解救西西弗斯- 模型驱动架构(MDA,Model Driven Architecture)浅述

热门文章

  1. ORM单表查询,跨表查询,分组查询
  2. 【LC3开源峰会网络技术系列之三】基于JStorm的网络分析平台
  3. 瓷博会开幕,《锦绣中华》引围观
  4. iOS开发小技巧--计算label的Size的方法总结
  5. 在Stack Overflow如果语言有问题,请写以下英文
  6. 首次创建maven项目的准备工作
  7. squid 使用 笔记
  8. 软件工程 项目管理的目标和细节
  9. 用C语言解“两个数的简单计算器”题
  10. 笨办法学python3_笨办法学python3—练习38