ACL'21 | debug完的神经网络,如何测试是否仍然存在bug?

文 | Sherry

回归测试

熟悉软件工程的小伙伴们一定知道回归测试:修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

它可以大幅降低系统测试、维护升级等阶段的成本。

随着深度学习网络的不断发展,越来越多的系统都得到了广泛的工业界应用。长期的系统维护就显得格外重要了。

一方面,大家在用更大的模型,更多的数据不断提高SOTA效果;但同时,模型缺乏可解释性,同时也很难将大型神经网络分解为小单元去进行回归测试。往往,更新到新版本模型引入了更多的错误就会让模型准确率提高的优势消耗殆尽。

举个简单的例子,假设iPhone将人脸识别模型的准确率从90%提高到93%,新版本的模型纠正了旧模型中4%的问题但是新引入了1%的错误。按国内iPhone有7.3亿部手机用户来算,这意味着系统更新后,有7300万用户发现人脸识别不好用了。

这将导致严重的用户投诉,或者拒绝在以后继续更新系统。

Amazon的研究团队在实际应用中发现了这个问题,便在NLP领域提出了针对模型版本更新会引入新bug这个问题,并且在分类问题上进行了实验。文章被收录到ACL 2021 long Paper.

论文题目:
Regression Bugs Are In Your Model! Measuring, Reducing and Analyzing Regressions In NLP Model Updates

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

如何测量回归错误

在这个任务设定中,我们考虑在一个固定的数据集和任务上训练模型,目标是在给定一个旧模型的基础上,训练一个和这个旧模型比较起来回归错误尽量小且准确率不受过多损失的新模型。想要解决回归错误的问题,我们首先需要一个指标来衡量两个不同版本模型的回归错误量。

在分类问题上,定义某个“回归测试集”上样本的负翻转率(Negative Flip Rate)为回归错误的指标:对于每个回归测试集中的每个样本,如果旧模型预测正确而新模型预测错误,我们就把这些样本称作负翻转样本,而回归测试集中的负翻转样本所占比例就是在这个回归测试上,从该旧模型更新到该新模型的负翻转率,或者说回归错误率:

通常,回归测试集可以根据不同的测试需要,进行不同的设计。比如可以像归回测试中收集或选取一些关键样例组成回归测试集,或者是收集一部分用户反馈的常见错例,又或是直接选用数据集本身的validation集。

那么在正常更新中,常见NLP分类模型会产生多少回归错误呢?

作者在GLUE数据集上对不同版本的模型更新进行了测试:当我们选定旧模型为BERT-base,然后更新到其他版本的分类模型,包括

  1. 另外一个随机数下训练的BERT-base;

  2. 扩大模型规模BERT-large;

  3. 修改模型预训练设定RoBERTa-base;

  4. 更改预训练目标ELECTRA-base;

  5. 更改模型结构ALBERTA-base

实验发现,回归错误在不同更新和不同任务上普遍存在。此外

  1. 即使更新到完全相同的BERT-base,唯一的变化是微调参数中的随机种子,也会产生2%-5%的回归错误。

  2. 归回错误率往往比准确率的提升更高:例如在QQP上从BERT-base更新到其他模型时,归回错误率是准确率提升的3倍以上。

  3. 当更新到有更大差异的模型时,归回错误率会更高。

如何降低回归错误

现在我们已经确定了回归错误是普遍存在的,那么如何在维持新模型准确率不损失过多的条件下降低回归错误率呢?

作者首先将这个问题形式化,写成了带限制的优化问题的形式:

我们在用CrossEntropy优化原分类问题的同时,给新模型的训练加上一个条件:保证回归错误率为0. 回归错误率为0显然是一种理想状态,当然如果新模型完全复制旧模型就可以达到这个条件,但是这样我们就没有办法进一步改进模型了。所以在训练新模型的时候我们可以适当放宽第二个条件:

我们要求回归错误率小于一个常数。

在之前定义的回归错误率中,每一个样本的回归错误是一个离散的值:如果回归了则为1,否则为0。这种性质并不利于模型的训练,于是作者对模型训练损失函数中的回归惩罚项进行松弛:

利用新旧模型分类预测概率的kl散度;

又或是用新旧模型句子表示向量之间的l2距离,来作为松弛的回归损失。

再将原问题的条件进过一步拉格朗日松弛,便可以得到:

而这恰好和蒸馏学习的损失函数非常相似,我们便可以用类似的学习框架来减少回归错误。值得注意的一点是,普通的蒸馏学习在所有的训练样本上都会加入两模型的距离惩罚;然而在本文中,作者只在新模型的表现不如旧模型的样本(也就是回归了的样本)上加入距离惩罚项。

实验结果与分析

作者在GLUE的任务上对提出的方法进行测试。实验表明改进版蒸馏可以有效地减小回归错误率。当更新到不同构的模型(BERT-large)时,蒸馏学习的效果更为显著。作者同样列出了另外一种方法——集成学习在降低回归错误上的效果。集成学习可以有效减少不同模型之间的方差,从而达到降低部分回归的目的。可以看到,在更新到同构模型(BERT-base),变量仅有随机数,也就是只有方差引起的回归错误时,集成学习格外有效。

更进一步,作者对蒸馏时使用的损失对齐位置进行了选择:

  1. 使用分类概率的KL散度作为蒸馏损失函数;

  2. 使用最后一层句子表示向量的l2距离作为蒸馏损失函数;

  3. 使用所有层句子表示向量的l2距离作为蒸馏损失函数。

实验表明,整体而言,仅用kl散度对齐分类概率分布是有效减少回归错误的方案。对于同构的模型更新,进行更深层次的对齐可能对降低回归错误有效。

之后,作者对集成学习和蒸馏学习为何可以有效减少回归错误进行了分析。

对集成学习而言,作者微调了20个模型作为旧模型,20个作为新模型,100个每五个一组作为20个集成模型。对所有新-旧,或者是集成-旧模型对进行回归错误测试。从下图中我们可以发现,集成学习可以使分布左移且方差变小,这正说明了集成模型从减小模型间方差而言可以有效减少回归错误。

更进一步,作者发现,可以通过找“中心模型”来使得单模型也可以获得集成模型类似的效果:我们计算新的20个单模型之间的回归错误,然后选取相对其他19个单一新模型平均回归最小的一个作为“中心模型”,然后测试它和20个旧模型的回归错误,结果发现这个中心模型也可以像集成模型一样减少回归错误。

分析完集成模型为何有效,作者同样对蒸馏模型的有效性进行了分析。他们利用Checklist的方法对训练好的模型进行语言行为学回归测试:Checklist方法可以自动生成一系列测试,每一组测试针对一个语言现象。

测试结果表明,在语言行为学角度,蒸馏可以有效地让新模型模仿旧模型的行为——减少那些它原本会预测错误的语言行为。但相比之下,集成模型虽然在原数据测试集上可能有更小的回归错误,但是从语言行为角度看反而增加了和旧模型不一致的行为。这恰恰是因为集成学习完全没有将旧模型的信息考虑进学习过程,蒸馏学习却可以从细节上模仿旧模型从而达到在语言行为上减少回归。

总结

本文提出了NLP模型版本更新中会出现回归错误的问题,是一个全新的领域,且对实际模型上线和部署可能产生深远影响。同时文中也给出了有效减少这类错误的方法,并从语言行为学上分析了方法的有效性。

萌屋作者:Sherry

本科毕业于复旦数院,转行NLP目前在加拿大滑铁卢大学读CS PhD。经历了从NOIer到学数学再重回CS的转变,却坚信AI的未来需要更多来数学和自认知科学的理论指导。主要关注问答,信息抽取,以及有关深度模型泛化及鲁棒性相关内容。

作品推荐:

  1. 可交互的 Attention 可视化工具!我的Transformer可解释性有救了?

  2. 谁才是Transformer家族中的最强王者?谷歌告诉你答案

  3. Facebook刷新开放域问答SOTA:模型训模型!Reader当Teacher!

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 198. 打家劫舍(DP)

1. 题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存…

Python快速找到列表中所有重复的元素

Python快速找到列表中所有重复的元素:https://blog.csdn.net/sinat_29957455/article/details/103886088 index方法 为了能够找到元素在列表中的位置,我们通常会使用list.index()方法来元素的下标,但是这种方法有一个弊端,就是当列…

论文浅尝 - ACL2020 | 利用常识知识图对会话流进行显式建模

笔记整理 | 韩振峰,天津大学硕士链接:https://arxiv.org/pdf/1911.02707.pdf动机人类对话自然地围绕相关概念发展,并分散到多跳概念。本文提出了一种新的会话生成模型——概念流(ConceptFlow),它利用常识知识图对会话流进行显式建…

百度NLP、视频搜索团队招聘算法实习生!

致力于连接最靠谱的算法岗与最强的求职者招聘贴投放请联系微信xixiaoyao-1问答工作职责研发文本问答、多模态问答、阅读理解、端到端问答等技术,利用NLP理论和方法解决实际问题结合数据、算力优势,在百度的搜索、凤巢等产品和业务实现技术落地研究问答、…

人工智能在线特征系统中的数据存取技术

主流互联网产品中,不论是经典的计算广告、搜索、推荐,还是垂直领域的路径规划、司机派单、物料智能设计,建立在人工智能技术之上的策略系统已经深入到了产品功能的方方面面。相应的,每一个策略系统都离不开大量的在线特征&#xf…

将二维列表输出到excel

list1 [[张三,男,未婚,20],[李四,男,已婚,28],[小红,女,未婚,18],[小芳,女,已婚,25]] output open(data.txt,w,encodinggbk) output.write(name,gender,status,age\n) for row in list1:rowtxt {},{},{},{}.format(row[0],row[1],row[2],row[3])output.write(rowtxt)output.…

论文浅尝 - ACL2020 | IntKB: 一种交互式知识图谱补全框架

笔记整理 | 谭亦鸣,东南大学博士来源: ACL 2020链接:https://www.aclweb.org/anthology/2020.coling-main.490.pdf资源:https://github.com/bernhard2202/intkb.概述知识库作为许多下游NLP任务的资源基础,存在的一个普遍缺陷是它…

预训练模型的前世今生(有福利!)

近年来,在深度学习和大数据的支撑下,自然语言处理技术迅猛发展。而预训练语言模型把自然语言处理带入了一个新的阶段,也得到了工业界的广泛关注。通过大数据预训练加小数据微调,自然语言处理任务的解决,无须再依赖大量…

LeetCode 337. 打家劫舍 III(记忆化+递归)

文章目录1. 题目1.1 相关题目:2. 解题2.1 递归2.2 记忆化递归1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个…

孵化业务快速落地与优化

海外酒店是酒旅事业群第一个孵化的业务,从2016年9月份开始到现在已经半年多的时间。在业务后台搭建、成长、优化过程中,经历了很多的思考与选择。 主要分为下面几个阶段: 初建:调研、落地,合理复用,高效自建…

TPLinker 联合抽取 实体链接方式+源码分析

关系抽取–TPLinker: https://blog.csdn.net/weixin_42223207/article/details/116425447 Tagging TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging,过程分为三部分: (1)entity head to enti…

论文浅尝 | KGAT: 用于推荐的知识图注意力网络

笔记整理 | 李爽,天津大学链接:https://arxiv.org/pdf/1905.07854v1.pdf动机为了提供更准确、多样化和可解释的推荐,必须超越对用户-项目交互的建模,并考虑辅助信息。传统的方法,如因子分解机(FM),将其视为…

对话系统答非所问?快试试这篇ACL'21的连贯性评估大法

文 | 页眉3编 | 小轶背景当我们在绞尽脑汁地想怎么设计一个对话系统的时候,我们当然希望最后训练出来的系统能越像人越好,输出的回复很连贯,很有趣,很体贴。而其中,连贯性可以说是最基本的要求之一了,毕竟不…

LeetCode 384. 打乱数组(rand)

1. 题目 打乱一个没有重复元素的数组。 示例:// 以数字集合 1, 2 和 3 初始化数组。 int[] nums {1,2,3}; Solution solution new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。 solution.shuffle();// 重设数组到它的初始状态[…

复杂语境下的实体关系抽取

复杂语境下的实体关系抽取 https://mp.weixin.qq.com/s/NAyuYMLDyx9Fut2blpvbRA

论文浅尝 - ACL2020 | 知识图谱补全方法的再评估

笔记整理 | 谭亦鸣,东南大学博士来源:ACL 2020链接:https://www.aclweb.org/anthology/2020.acl-main.489.pdf源码:http://github.com/svjan5/kg-reeval概述图谱补全(KGC)的目标是自动的预测大规模知识图谱…

美团数据库高可用架构的演进与设想

本文介绍最近几年美团MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望。 在2015年之前,美团&…

恕我直言,很多小样本学习的工作就是不切实际的

文 | ????????????????编 | 小轶以前的小样本学习(Few-shot Learning),是需要用一个巨大的训练集训练的。测试时只给出 n-way k-shot,在这 N * k 个样本上学习并预测。我第一次看到这种任务设定的时候真是非常失望…

LeetCode 204. 计数质数(质数的倍数不是质数)

1. 题目 统计所有小于非负整数 n 的质数的数量。 示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。2. 填表解题 2的倍数不是质数3的倍数不是质数5的倍数,7的倍数,11的倍数。。。质数的倍数不是质数 class Solution { p…

论文浅尝 | 六篇2020年知识图谱预训练论文综述

转载公众号 | AI机器学习与知识图谱本文介绍六篇有关知识图谱预训练的优秀论文,大致上可分为两类,生成学习模型和对比学习模型。其中GPT-GNN模型是生成学习模型,模型灵感来源于自然语言处理中的GPT模型;GCC,GraphCL&am…