本文介绍了上海科技大学屠可伟课题组与阿里巴巴达摩院的一项合作研究,提出了在结构预测问题上一种较为通用的结构化知识蒸馏方法。该论文已被 ACL 2021 接受为长文。

论文标题:

Structural Knowledge Distillation: Tractably Distilling Information for Structured Predictor

论文地址:

http://faculty.sist.shanghaitech.edu.cn/faculty/tukw/acl21kd.pdf

简介

知识蒸馏(knowledge distillation,简称 KD)是模型压缩方法的一种,用于将知识从一个复杂的教师模型转移到一个简单的学生模型中。KD 的基本思想是希望学生模型的预测尽量接近教师模型的预测。自然语言处理和计算机视觉的很多任务要求结构化的输出,例如图片的像素级标签、句子的单词级标签序列等。

这时就需要使用结构知识蒸馏(structural KD)在模型之间转移这种结构化的信息。但结构输出空间一般是输出尺寸的指数大小,直接求解和优化 structural KD 的目标函数是不可行的。之前的工作一般是在特定情形中采用近似求解或将问题转换成非结构化知识蒸馏求解。

本文则根据很多常见结构预测模型会把输出结构的打分分解成多个子结构的打分之和,且子结构空间远小于结构输出空间的特性,提出了在一定条件下 structural KD 目标函数的多项式复杂度精确求解的方法。

背景知识

2.1 知识蒸馏

知识蒸馏框架通常包含一个或多个大型的已训练的教师模型和小型的学生模型,训练时知识蒸馏会鼓励学生模型的预测尽量接近教师模型的预测,一般来说就是将两者的交叉熵作为目标函数。

假设我们要训练一个多分类模型,类别集合为




。在样本 x 上教师模型的预测分布为







,学生模型的预测分布为







,则知识蒸馏要最大化两者的交叉熵:

同时我们使用训练集上的样本








训练学生模型,目标函数为:









是指示函数。训练时最终的目标函数是两者的加权求和











λ















λ












2.2 词级别知识蒸馏

给定输入序列





























,输出序列






















。如果将所有输出







都看作相互独立的,那么就可以在序列的每个位置分别做知识蒸馏,即词级别知识蒸馏(token-wise knowledge distillation),对每个位置的










求和得到整个序列的知识蒸馏目标函数:

2.3 结构知识蒸馏

但实际上不同位置的输出往往并不是相互独立的,比如用 BIOES 标注 NER 标签的例子:“希尔顿离开北京机场了”,其标签为”B-PER, I-PER, E-PER, O, O, B-LOC, I-LOC, I-LOC, E-LOC, O“。I 标签前只能是 B 标签,不能是其他标签,类似的还有 E 标签前必须是 B 或者 I 标签等规则。

假设这个例子中只有 PER 和 LOC 两种 NER 标签,那么每个词的标注有 9 种,长度为 10 的输出序列理论上有









种组合,但实际上违反了 BIOES 标注规则的结构都不可能出现。因此常见的序列结构预测模型例如线性链 CRF 会建模不同位置输出之间的相关性。

同理,很多其他形式的结构预测模型(例如树或图的预测)也会建模输出结构不同部分之间的相关性。我们希望能在结构预测模型的知识蒸馏中,让学生模型学习到教师模型对完整结构的预测,亦即结构知识蒸馏(structrual knowledge distillation)。

令所有可能的结构输出序列构成结构输出空间









,则结构知识蒸馏的目标函数为:

由于结构输出空间大小













往往是输出序列长度 n 的指数函数,因此直接按上式计算是不可行的。

我们去年在 ACL2020 发表的论文“Structure-Level Knowledge Distillation For Multilingual Sequence Labeling”提出了两种近似方法。

一种方法是只考虑









中概率最大的若干输出结构,在这些输出序列上求和,计算目标函数的近似值。如可以使用动态规划算法预测出前 k 个概率最高的输出结构


















































,并假设教师模型在这 k 个输出序列上是均匀分布,从而得到 top-K 知识蒸馏:

如果对教师模型在这 k 个输出结构上的预测概率进行一个估计,就得到 weighted top-K 知识蒸馏:

另一种方法是在一些特定场景下,通过全局结构分布求出局部的边缘分布,将问题强行变成一个非结构化知识蒸馏问题。Posterior Distillation 方法就是在线性链 CRF 模型之间进行知识蒸馏时,用前向后向算法求出模型在每个 token 上输出的边缘分布,然后再使用 token-wise KD。

上述第一种方法舍弃了概率不大的结构输出,第二种方法则优化的不再是真正的结构知识蒸馏目标函数,两者都是近似解决结构知识蒸馏。

本文的工作

3.1 Structural KD   

上面介绍的方法都是近似方法,本文则介绍了在一定条件下一种精确求解结构知识蒸馏目标函数的方法。

很多结构预测模型会将结构输出分解成许多子结构,结构输出的分数是由子结构的分数求和得到。因此完整结构输出的概率公式如下:

其中 y 是某个结构输出,








































是模型对 y 的打分,










表示 u 是 y 的一个子结构;我们定义子结构空间


















































,即所有可能子结构的集合;









是 partition function。

例如前例中的序列标注任务。如果是最大熵(MaxEnt)模型,模型对每个位置预测的标签打分,整个标签序列的分数等于各个标签的分数之和:
































,y 的子结构即每个位置的输出







。子结构空间大小为














如果使用线性链 CRF 模型,则模型对每个位置的输出







和相邻两个位置的输出对


















打分,y 的子结构即所有




























,因而 ,子结构空间大小为

















如果结构知识蒸馏的学生模型是基于这种结构分解模型,我们可以简化结构知识蒸馏目标函数如下:

如果同时满足条件:1. 学生模型的子结构空间
















是多项式大小,2. 教师模型可快速计算学生模型子结构的边缘分布,那么这个目标函数可以在多项式时间内精确求解。

3.2 四类场景

下面按照教师和学生模型子结构分解的差异分成四类场景举例讨论,其中所有场景都讨论了命名实体识别(NER)任务,场景 1 和 2 还讨论了依存分析(dependency parsing)任务。

教师模型和学生模型有相同的子结构分解

Case1a: 线性链 CRF 到线性链 CRF

应用场景举例:在线服务需要快速响应,因此需要将准确性很高但使用了大型预训练上下文相关词向量嵌入的教师网络压缩成只使用静态词向量嵌入的轻量级学生网络。

本场景教师模型和学生模型都是线性链 CRF,两者有相同的子结构空间。我们将发射分数



















合并到了转移分数




























中。此时学生模型的子结构空间 。教师模型的子结构分数 ,子结构边缘分布可由 计算,其中






由经典的前向后向算法得到。

Case 1b: 基于图的依存分析到基于序列标注的依存分析

教师模型和学生模型分别是基于图和基于序列标注的依存分析模型。教师模型的准确率要远远高于学生模型,但学生模型的速度更快,因此两者之间的知识蒸馏是有意义的。

这里依存分析使用 head-selection 方式,对输入句子的每个单词







预测一个 dependency head







和 label







,即结构输出












































。学生模型是一个MaxEnt模型,对每个单词预测






















,即子结构空间 。教师模型是一个 Biaffine 模型,对两个单词
















之间的 dependency arc 进行建模,预测







是否是







的 head,以及预测这个 dependency arc 的 label。即对每个单词独立预测















并分别得到


































,所以其子结构边缘分布为

学生模型相比教师模型有更精细的子结构分解

Case 2a: 线性链 CRF 到最大熵模型

以往的研究表明序列标注任务上线性链 CRF 的性能一般都要高于 MaxEnt 模型,但是往往实际应用中我们希望能获得 MaxEnt 模型的速度和效率,因此这个场景下我们设计了在线性链 CRF 模型和 MaxEnt 模型之间进行知识蒸馏。

此时教师模型的子结构空间为 ,学生模型的子结构空间为



































。这时我们可以使用前向后向算法求出教师模型在学生模型的子结构上的边缘分布:

Case 2b: 二阶依存分析到基于序列标注的依存分析

这个场景类似于 Case 1b,不同之处是我们将教师模型替换成了性能更高的二阶依存分析器。

教师模型对 dependency arc 的存在建模使用了二阶依存分析,即对所有共享一个单词的两个 arc  






























进行打分;对 arc 的类型预测则与 Case 1b 一样。因此教师模型的子结构空间包含所有共享一个单词的 dependency arc 对。学生模型同 Case 1b,子结构空间

教师模型可以使用平均场变分推断方法估计 arc 的存在概率



















,arc 的类型预测

















同 Case 1b,因此子结构边缘分布

教师模型相比学生模型有更精细的子结构分解

Case 3: 最大熵模型到线性链 CRF

这个场景与 Case 2a 的蒸馏方向相反。一个应用场景是零样本跨语言命名实体识别任务:现有大部分基于预训练多语言 BERT 的模型使用 MaxEnt 解码,我们可以将其迁移到使用静态词向量嵌入的线性链 CRF 模型以获得更快的速度。

由 Case 2a 可知



































。容易得到子结构边缘分布

教师模型和学生模型的分解形式不相容

Case 4: NER as Paring 模型到最大熵模型

这里的教师模型是当前准确度最高的命名实体识别模型之一,但是其时间复杂度比通常的序列标注模型要高,因此在这个场景中我们将其蒸馏到一个 MaxEnt 模型中。

教师模型用依存分析的方式做命名实体识别任务,即对一个候选实体的头尾两个词
















之间的 dependency arc 打分,用 arc 的类型表示命名实体的类型。而学生模型是最大熵模型使用 BIOES 标注。学生模型的子结构空间是











































取值为 BIOES 标注的 NER 标签,如“B-PER”。教师模型使用动态规划可以得到子结构边缘分布

















实验

本文在上述四个场景的不同 case 进行了实验。命名实体识别任务使用了 CoNLL2002/2003 和 WikiAnn 数据集,用到的无标签数据从 WikiAnn 数据集采样得到。对于依存分析使用了 Penn Treebank(PTB)3.0 数据集,用到的无标签数据从 BLLIP 数据集得到。

作为对比的基准知识蒸馏方法是前面介绍的 token-wise KD,weighted top-K KD 和 Posterior KD,表中记为:Token. KD, Top-WK KD 和  Pos. KD。文中提出的 structural KD 方法记为 struct. KD。

有标签数据上的训练

这是在有标签数据上进行上述实验的结果,w/o KD 为学生模型进行监督学习的结果。

加入无数据标签

然后在训练时加入了无标签数据。先用教师模型对 unlabel 数据预测获得伪标签,Case 3 只包含带伪标签的训练数据,其他 Case 使用的训练数据是有标签和伪标签数据的混合。Top-1 是仅使用这样的训练数据来训练学生模型。

token-wise KD 和 structural KD 的比较

Case 2a 中学生模型都是 MaxEnt,比较了 MaxEnt 教师模型加 token-wise KD和 CRF 教师模型加 structural KD 的组合。Case 3 中教师都是 MaxEnt 模型,比较了 Token-wise KD 加 MaxEnt 学生模型和 Structural KD 加 CRF 学生的组合。

多语言 NER 下不同 KD 方法的比较

由上述各表可以看出各种条件下 structural KD 的效果一般都是最好的。


结语

本文提出了在一定条件下可以多项式时间精确求解和优化结构知识蒸馏目标函数的方法,从而扩展了结构知识蒸馏的应用范围,是对知识蒸馏方法的一个非常有意义的探索。

研究组

介绍

上海科技大学信息学院屠可伟老师研究组主要从事自然语言处理、机器学习等人工智能领域的研究,目前侧重于研究语言结构的表示、学习与应用。研究组近几年已发表顶会论文数十篇,2021 年至今已发表 ACL 长文 7 篇、ACL Findings 长文 1 篇、NAACL 长文 1 篇。研究组现招收硕士研究生(推免生)、博士后和研究助理,欢迎有兴趣的同学联系屠老师。

更多信息请访问屠可伟老师主页:

http://faculty.sist.shanghaitech.edu.cn/faculty/tukw/

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

???? 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

???? 投稿通道:

• 投稿邮箱:hr@paperweekly.site

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

△长按添加PaperWeekly小编

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

ACL 2021 | 结构化知识蒸馏方法相关推荐

  1. 微软亚研院提出用于语义分割的结构化知识蒸馏 | CVPR 2019

    作者 | CV君 来源 | 我爱计算机视觉 今天跟大家分享一篇关于语义分割的论文,刚刚上传到arXiv的CVPR 2019接收论文<Structured Knowledge Distillati ...

  2. CVPR 2019 | 微软亚研院提出用于语义分割的结构化知识蒸馏

    点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家分享一篇关于语义分割的论文,刚刚上传到arXiv的CVPR 2019接收论文<Structured Knowledge Distilla ...

  3. PointDistiller:面向高效紧凑3D检测的结构化知识蒸馏​

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨吃饭机@知乎 来源丨https://zhuanlan.zhihu.com/p/20092418 ...

  4. 【深度学习】协同优化器和结构化知识蒸馏

    [深度学习]协同优化器和结构化知识蒸馏 文章目录 1 概述 2 什么是RAdam(Rectified Adam) 3 Lookahead - 探索损失面的伙伴系统=更快,更稳定的探索和收敛. 4 Ra ...

  5. 梅赛德斯奔驰最新!目标检测的结构化知识蒸馏

    点击进入→自动驾驶之心[目标检测]技术交流群 摘要: 知识蒸馏(KD)是深度神经网络中著名的训练,它将由一个大的教师模型获得的知识传递给一个小的学生.KD已经被证明是一种有效的技术,可以显著提高学生在 ...

  6. IJCAI 2021 | 中科院计算所:自监督增强的知识蒸馏方法

    知识蒸馏作为模型压缩里的一项重要技术,在学术界和工业界都得到了广泛的研究. 近日,AI Drive 邀请中科院计算所在读博士生杨传广,分享其在 IJCAI 2021 上发表的最新工作:自监督增强的知识 ...

  7. 目标检测中的知识蒸馏方法

    目标检测中的知识蒸馏方法 知识蒸馏 (Knowledge Distillation KD) 是模型压缩(轻量化)的一种有效的解决方案,这种方法可以使轻量级的学生模型获得繁琐的教师模型中的知识.知识蒸馏 ...

  8. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  9. 干货!结构化知识的统一建模和多任务学习

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 基于结构化知识的任务(SKG)利用结构化知识来完成用户请求,例如对数据库的语义解析和对知识库的问答.由于SKG任务的输入和输出是异构的, ...

最新文章

  1. WCF中服务继承多个契约的使用
  2. 使用Redis bitmaps进行快速、简单、实时统计
  3. visual studio 没有属性页_驯龙物语10月14日更新|新增快捷购买页签
  4. LintCode 378. 将二叉树转换成双链表(非递归遍历)
  5. Part5 数据的共享与保护 5.4类的友元5.5共享数据的保护
  6. 会话控制(session、cookie)
  7. Cannot open precompiled header file: 'Debug/shuju1.pch': No such file or directory
  8. mediawiki 编辑php代码,mediawiki_1.25配置wikieditor编辑器
  9. C++ 动态开辟二维数组的的方法
  10. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
  11. 2010年山东省区县级农作物面积及产量统计数据
  12. Python数据处理(入门教程)
  13. AVI、WMV、FLV、MKV、WebM、MOV格式视频怎么打开?它们之间有什么区别?答案在这里
  14. 树莓派+android+盒子,最强电视盒子诞生记-树莓派4电视盒子
  15. 烈日炎炎,向亲爱的爸爸说声辛苦了
  16. RefreshLayout让你半小时以内完成一个列表界面
  17. 浪潮信息m6服务器性能,展现强劲性能,浪潮M6服务器为什么能刷新SPEC多项记录...
  18. 强势Mac机网站设计软件:10大最佳HTML编辑器
  19. 互联网产品运营必备工具大全
  20. 2019年新税法+抵扣项的个人所得税攻击计算器

热门文章

  1. linux chown命令格式,在Linux上如何使用chown命令 (文件所有权)
  2. 引擎: 决定数据库存取数据的方式 = 不同的特点 = 不同的用户体验 数据类型: 规定了数据库可以存放哪些数据 约束: 限制存储数据的规则 键...
  3. 【转】王晟教授:给光纤3室研究生的一封公开信
  4. Kafka 基本原理
  5. idea中查看类的继承关系图
  6. [leetcode]@python 85. Maximal Rectangle
  7. 35个Java代码性能优化总结
  8. DB2数据库报 [SQL0805N Package NULLID.SQLLD003 was not found.]
  9. Openfire配置过程,以及与php交互注意事项。
  10. Some thoughts on my own O/R Mapping or Code Generation tools