谷歌40人发表59页长文:为何真实场景中ML模型表现不好?
大家好哇,前不久,在卖萌屋NLP群里默默潜水的白鹡鸰被群友提到的一篇Google几天前放出的59页超长论文炸得飞了起来。
来,大家来感受一下气势浩大的论文首页
文章名字是Underspecification Presents Challenges for Credibility in Modern Machine Learning。论文作者大都来自Google,横跨了计算机视觉、自然语言处理、生物信息多个领域,他们一起分析了真实场景中的机器学习模型表现欠佳的原理。
论文题目:
Underspecification Presents Challenges for Credibility in Modern Machine Learning
论文链接:
https://arxiv.org/abs/2011.03395
Arxiv访问慢的小伙伴也可以在【夕小瑶的卖萌屋】订阅号后台回复关键词【1127】下载论文PDF~
众所周知……
在机器学习领域扑腾的朋友们可能都遇到过一个问题:
你拉取了一个美妙的pipeline,训练了若干个小时,测试效果也的确丝滑:
然后,你高高兴兴把模型投入了真实场景,结果它的表现变成了这样:
这差距咋就这么大呢?
谷歌说,这大概率是因为你的模型学到假特征了。拿NLP的情感分析举个例子,假若你的数据库中恰好有有一个张三,这张三既不尊老爱幼,也不遵纪守法,获得了许多负面的评价:“张三真差劲!”。“张三”反反复复和“差劲”一起出现,那么你的模型就有一定概率把“张三”而不是“差劲”学成了检测负面情感的特征词。
可能会觉得,这就是数据集不够完备的问题啊,要不是穷,数据不够多,这模型必然能学好的!但是,什么样的数据集才算得上完备呢?哪怕数据集有上亿样本,也一定会存在采样偏差,那么模型照样可能学到假特征。这就是文章的核心思想之一:机器学习模型普遍会出现学到假特征的情况。
核心论点和亿些例子
文章特地造了一个新词underspecification用来更加规范地描述这一现象:机器学习模型的训练pipeline不变时,能够训练出参数不同但在训练集上表现相同的多个模型。从这一表述当中可以看出文章在试图解释模型会学到假特征的机理:模型训练阶段的参数量往往远多于真实场景中描述数据实际需要的特征数量,进而,这些冗余的参数干扰了关键特征的学习,导致模型存在多解——显然,这么多解当中最多只会有一个正确描述了真实世界的情况,所以显然你通过训练随机得到的那个解大概率不是那个全部特征恰好学习正确且完备的那个解。
白鹡鸰看到这里,觉得十分有道理,并期待着下文出现详细的推导,然而文章却急着举了三个(并没有很直观的)例子来说明underspecification长什么样。
首先是一个流行病学的模型,如下图所示。
这组图描述了潜伏期和传染率两个参数的细小变化会如何影响到整个感染人口数量随天数的变化。如图1所示,在病例上涨的初期,只有有限的40个数据点(图中左侧加粗的蓝色线条),如果要用数学模型来拟合这40个数据,当然可以存在(几乎无限)多种概率分布模型和配套参数的选择了(图中给出了两条可能的曲线代表两个模型对未来的预测结果,蓝色是正态分布模型,红色是伽马分布模型)。所以,尽管两条线的训练loss相同,但是对未来的预测结果(即真实场景中的表现)是有相当大的差异的。但直到未来到来前,我们无法确定哪个模型是正确的。
此外论文还举了一个随机特征模型的例子和一个基因风险评估模型的例子,这里就不展开讲了,感兴趣的小伙伴自行去论文里翻翻细节~
上面的例子容易被误解成数据采集的完整度是提升模型表现的关键,但是从接下来几个较为复杂的机器学习模型的例子,可以清楚地看出模型学习到假特征是与数据集规模无关的普遍问题。
图像处理:对ImageNet数据集中图像进行对比度、清晰程度、亮度等方面的调整,然后比较ResNet-50和BiT在修改过的图片上的检测精度。如表格所示,稍作扰动,精度就会显著降低(其实就是搬出来了对抗样本的问题)。
Dataset | ImageNet | pixelate | contrast | motion blur | brightness | ObjectNet |
---|---|---|---|---|---|---|
ResNet-50 | 0.759 (0.001) | 0.197 (0.024) | 0.091 (0.008) | 0.100 (0.007) | 0.607 (0.003) | 0.259 (0.002) |
BiT | 0.862 (0.001) | 0.555 (0.008) | 0.462 (0.019) | 0.515 (0.008) | 0.723 (0.002) | 0.520 (0.005) |
表1 图像经过变换后,两类预测器检测物体准确率的变化,括号内为准确率的标准差
医学图像:测试了在ImageNet数据集上预训练的Inception-V4在迁移到糖尿病相关视网膜病变和肤质数据集上的效果。对检测视网膜病变的模型,使用了不同类型相机拍摄的症状图像作为测试数据,模型精度受到很大影响;对分类肤质的模型,发现对于不同类型肤质预测精度的方差不同。这一部分没有给出太多定量的测试结果,只是简单地说机器学习模型不能暴力迁移到临床数据上。
自然语言处理:通过分析基于OntoNotes数据集的BERT学习到的特征与刻板印象关联是否正确,检验模型是否正确理解了语义。以性别关联的职业偏见为例,虽然预测器们最终正确率相仿,但并不是每一个预测其都正确理解了偏见的成因。
临床诊断记录:通过RNN分析美国从2011到2015年703782名急性肾损伤(acute kidney injury, AKI)患者就诊数量在一周内变化的规律(精确到小时),发现模型没能透彻理解就诊人数和各科室工作节奏的关联。
这几个都是领域内挑选的pipelines也是在各个领域公认表现较好的,尽管如此,训练出来的模型仍然被证明会学习到数据中的伪关联,导致在实际任务中表现不佳。看到这里,论文的另一点核心思想也被论证得很明确了:Underspecification是阻碍机器学习模型在真实场景下表现提升的关键因素。
问题仍待解决
既然定位了问题,那么如何解决问题呢?遗憾的是,目前还没有什么革命性的办法,只能多做测试! 论文的这一部分写得有点勉强,开始新瓶装旧酒,提(mìng)出(míng)了三类压力测试(stress test):
分层表现评估(Stratified performance evaluations):选取部分特征,根据这些特征分层数据集,测试在不同层中预测器的表现是否稳定。比如我们把苹果按红绿黄三种颜色分类,然后测试模型在检测这三种苹果时的正确率是否相同。
迁移表现评估(Shifted performance evaluations):依据特定的规则将数据映射到另一个数据分布上,然后测试预测器表现是否稳定。比如你将一张苹果的照片加了一点点动态模糊(人类依旧能识别),如果模型也能认出这还是个苹果,那它才有可能是一个学到了正确特征的好模型。
对比评估(Contrastive evaluations):用特例集检验预测器表现。除却上述两种特殊数据测试以外,所有应用场景中可能出现的奇葩案例都应该丢进模型试一试,就像当年那个测试工程师的酒吧笑话一样。
这三类测试的设计思想并不新奇,本科概统课上必然提过,归根到底就是举特例举反例。文末进行的讨论也表达了同样的思想,再次强调了大家应当具体问题具体分析,尽可能对模型多做测试。
读后感碎碎念
看了这篇文章,白鹡鸰有些失望,开篇气势如虹,仔细一看,问题还是老问题,最期待的原理分析被吃掉了,最后也没有提出什么新颖的解决办法。
文章涉及了很多领域,拼拼凑凑,有点像Google几个小组在各自测评模型后的联合吐槽文,文中存在不少排版和拼写问题(这大概是有一页长的作者团队的必然后果)。篇幅是很长,但没有解决科学问题。花了很多笔墨介绍各领域的背景知识,稍微硬核点的推导只能放到附录。
可以预见的是,工程师们未来在评估模型效果时的工作量又要增加了。乐观地想,模型在真实场景的表现不佳的原理分析仍未定量给出,那也意味着还有研究空间(和发paper空间),而且连大牛们都说了,模型要针对实际数据间的联系进行调整才能在应用中提升表现,这不就是给了大家秉持暴力美学给模型加亿点点细节的正当理由吗[doge]。
萌屋作者:白鹡鸰