11-29看到一篇文章:谷歌40人发表59页长文:为何真实场景中ML模型表现不好?

    • 你可能会觉得,这就是数据集不够完备的问题啊,要不是穷,数据不够多,这模型必然能学好的!但是,什么样的数据集才算得上完备呢?哪怕数据集有上亿样本,也一定会存在采样偏差,那么模型照样可能学到假特征。这就是文章的核心思想之一:机器学习模型普遍会出现学到假特征的情况。
    • 文章特地造了一个新词underspecification用来更加规范地描述这一现象:机器学习模型的训练pipeline不变时,能够训练出参数不同但在训练集上表现相同的多个模型。从这一表述当中可以看出文章在试图解释模型会学到假特征的机理:模型训练阶段的参数量往往远多于真实场景中描述数据实际需要的特征数量,进而,这些冗余的参数干扰了关键特征的学习,导致模型存在多解——显然,这么多解当中最多只会有一个正确描述了真实世界的情况,所以显然你通过训练随机得到的那个解大概率不是那个全部特征恰好学习正确且完备的那个解。
    • Underspecification是阻碍机器学习模型在真实场景下表现提升的关键因素
    • 问题仍待解决:既然定位了问题,那么如何解决问题呢?遗憾的是,目前还没有什么革命性的办法,只能多做测试! 论文的这一部分写得有点勉强,开始新瓶装旧酒,提(mìng)出(míng)了三类压力测试(stress test):
    1. 分层表现评估(Stratified performance evaluations):选取部分特征,根据这些特征分层数据集,测试在不同层中预测器的表现是否稳定。比如我们把苹果按红绿黄三种颜色分类,然后测试模型在检测这三种苹果时的正确率是否相同。
    2. 迁移表现评估(Shifted performance evaluations):依据特定的规则将数据映射到另一个数据分布上,然后测试预测器表现是否稳定。比如你将一张苹果的照片加了一点点动态模糊(人类依旧能识别),如果模型也能认出这还是个苹果,那它才有可能是一个学到了正确特征的好模型。
    3. 对比评估(Contrastive evaluations):用特例集检验预测器表现。除却上述两种特殊数据测试以外,所有应用场景中可能出现的奇葩案例都应该丢进模型试一试。