深圳南山网站建设工作室,广东省网站备案查询,女性门户资讯类网站织梦dedecms模板,seo网站优化服务文 | Sherry回归测试熟悉软件工程的小伙伴们一定知道回归测试#xff1a;修改了旧代码后#xff0c;重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。它可以大幅降低系统测试、维护升级等阶段的成本。随着深度学习网络的不断发展#xff0c;越来越多的系统都… 文 | 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然后更新到其他版本的分类模型包括另外一个随机数下训练的BERT-base;扩大模型规模BERT-large;修改模型预训练设定RoBERTa-base;更改预训练目标ELECTRA-base;更改模型结构ALBERTA-base实验发现回归错误在不同更新和不同任务上普遍存在。此外即使更新到完全相同的BERT-base唯一的变化是微调参数中的随机种子也会产生2%-5%的回归错误。归回错误率往往比准确率的提升更高例如在QQP上从BERT-base更新到其他模型时归回错误率是准确率提升的3倍以上。当更新到有更大差异的模型时归回错误率会更高。如何降低回归错误现在我们已经确定了回归错误是普遍存在的那么如何在维持新模型准确率不损失过多的条件下降低回归错误率呢作者首先将这个问题形式化写成了带限制的优化问题的形式我们在用CrossEntropy优化原分类问题的同时给新模型的训练加上一个条件保证回归错误率为0. 回归错误率为0显然是一种理想状态当然如果新模型完全复制旧模型就可以达到这个条件但是这样我们就没有办法进一步改进模型了。所以在训练新模型的时候我们可以适当放宽第二个条件我们要求回归错误率小于一个常数。在之前定义的回归错误率中每一个样本的回归错误是一个离散的值如果回归了则为1否则为0。这种性质并不利于模型的训练于是作者对模型训练损失函数中的回归惩罚项进行松弛利用新旧模型分类预测概率的kl散度又或是用新旧模型句子表示向量之间的l2距离来作为松弛的回归损失。再将原问题的条件进过一步拉格朗日松弛便可以得到而这恰好和蒸馏学习的损失函数非常相似我们便可以用类似的学习框架来减少回归错误。值得注意的一点是普通的蒸馏学习在所有的训练样本上都会加入两模型的距离惩罚然而在本文中作者只在新模型的表现不如旧模型的样本也就是回归了的样本上加入距离惩罚项。实验结果与分析作者在GLUE的任务上对提出的方法进行测试。实验表明改进版蒸馏可以有效地减小回归错误率。当更新到不同构的模型BERT-large时蒸馏学习的效果更为显著。作者同样列出了另外一种方法——集成学习在降低回归错误上的效果。集成学习可以有效减少不同模型之间的方差从而达到降低部分回归的目的。可以看到在更新到同构模型BERT-base变量仅有随机数也就是只有方差引起的回归错误时集成学习格外有效。更进一步作者对蒸馏时使用的损失对齐位置进行了选择使用分类概率的KL散度作为蒸馏损失函数使用最后一层句子表示向量的l2距离作为蒸馏损失函数使用所有层句子表示向量的l2距离作为蒸馏损失函数。实验表明整体而言仅用kl散度对齐分类概率分布是有效减少回归错误的方案。对于同构的模型更新进行更深层次的对齐可能对降低回归错误有效。之后作者对集成学习和蒸馏学习为何可以有效减少回归错误进行了分析。对集成学习而言作者微调了20个模型作为旧模型20个作为新模型100个每五个一组作为20个集成模型。对所有新-旧或者是集成-旧模型对进行回归错误测试。从下图中我们可以发现集成学习可以使分布左移且方差变小这正说明了集成模型从减小模型间方差而言可以有效减少回归错误。更进一步作者发现可以通过找“中心模型”来使得单模型也可以获得集成模型类似的效果我们计算新的20个单模型之间的回归错误然后选取相对其他19个单一新模型平均回归最小的一个作为“中心模型”然后测试它和20个旧模型的回归错误结果发现这个中心模型也可以像集成模型一样减少回归错误。分析完集成模型为何有效作者同样对蒸馏模型的有效性进行了分析。他们利用Checklist的方法对训练好的模型进行语言行为学回归测试Checklist方法可以自动生成一系列测试每一组测试针对一个语言现象。测试结果表明在语言行为学角度蒸馏可以有效地让新模型模仿旧模型的行为——减少那些它原本会预测错误的语言行为。但相比之下集成模型虽然在原数据测试集上可能有更小的回归错误但是从语言行为角度看反而增加了和旧模型不一致的行为。这恰恰是因为集成学习完全没有将旧模型的信息考虑进学习过程蒸馏学习却可以从细节上模仿旧模型从而达到在语言行为上减少回归。总结本文提出了NLP模型版本更新中会出现回归错误的问题是一个全新的领域且对实际模型上线和部署可能产生深远影响。同时文中也给出了有效减少这类错误的方法并从语言行为学上分析了方法的有效性。萌屋作者Sherry。本科毕业于复旦数院转行NLP目前在加拿大滑铁卢大学读CS PhD。经历了从NOIer到学数学再重回CS的转变却坚信AI的未来需要更多来数学和自认知科学的理论指导。主要关注问答信息抽取以及有关深度模型泛化及鲁棒性相关内容。作品推荐可交互的 Attention 可视化工具我的Transformer可解释性有救了谁才是Transformer家族中的最强王者谷歌告诉你答案Facebook刷新开放域问答SOTA模型训模型Reader当Teacher后台回复关键词【入群】加入卖萌屋NLP/IR/Rec与求职讨论群后台回复关键词【顶会】获取ACL、CIKM等各大顶会论文集