Google团队列出机器学习的三个陷阱,工程师一定要知道

几十年来,机器学习领域一直饱受“坦克问题”(tank problem)的折磨。

故事发生在上个世纪60年代(此研究已知的最早文献,此处感谢软件工程师Jeff Kaufman),事件的细节已湮没在时间的迷雾其中,不过故事大概是这样子的:

研究者们写了一个算法来从军方提供的照片中识别坦克。该模型成功地在测试图中找到了坦克,但随后使用真实的照片时却失败了。

未知的因素会影响机器学习的正确度

原因是什么呢?口口相传的具体细节各不相同,但算法用来测试的图片包含了其他消息,比如在晨光中或从云层下显现的坦克,影响了机器判断,也是一个重要的原因。所以说,并不是坦克的存在决定了算法,其它因素也很重要。

类似的情况在当今也引起了反省。许多机器学习的论文未能完成足够多的实验,审查标准不够一致,并且行业内激烈的竞争也鼓励一些研究人员,一旦得到了他们想要的答案就偷工减料跳过检查。所以在无数领域的科学家正急于用机器学习解决问题时,谷歌的Patrick Riley却呼吁大家在研究中制定更加明确的标准。

不可否认的是,机器学习正在推动着整个科学界的发展,尤其是它发现及预测的模式正在从各个领域辅助研究者们,从搜索分子制造的新方法和在试验中发现微小信号,到改进医疗诊断与揭示基本粒子,皆有其身影。

然而,机器学习工具也会变成“智障”,例如假正例、死胡同与各种错误。而且由于许多算法都太过复杂,甚至于无法检查所有参数或者准确了解输入的方式,随着这些算法被更加广泛地应用,错误的结论和科学成果所引发的风险将会呈螺旋式上升。

这些问题并不是一朝一夕的事,所以预测每次分析中出现的所有问题或困境也是不可能的,但至少,那些在自己的领域使用机器学习的研究者们,应该去熟悉一些常见的陷阱,以及如何检测或避免那些陷阱。

为了说明这点,这里枚举三个Google Accelerate Science团队所面临并且克服的机器学习的三大问题。

机器学习的三大陷阱:数据分拆不当、隐藏变量、曲解目标

一、 不适当地拆分数据

在构建模型时,机器学习从企业通常将数据分成训练集和测试集,用训练集训练模型,用测试集评估模型的性能。研究员通常会随机拆分数据,但是现实生活里真正随机的数据少之又少。它们可能包含了时间趋势,例如收集数据方法的变化,或是收集信息的各种选择。

例如,这种历史模式隐藏在分子数据集中,而机器学习算法正在对这些数据集进行虚拟筛选,以寻找候选药物。这里的挑战在于预测一个分子如何会被有效地被人体吸收或减少发炎。筛选从有关分子的数据开始,这些分子具有或不具有预期的效果,但是收集数据的背景或许会与机器学习模型的使用方式有所不同。

一个模型可能是用一组公开可用的分子数据集训练的,然后用于测试另一组专有的分子数据集。而当有希望的候选项被检测和丢弃时,化学家的关注点往往从某些分子群转移到另一些分子群。因此,研究人员经常高估模型在实践中的表现。这会导致期望值的膨胀,并且在选择不适合的分子上浪耗时间和金钱。许多模型制造者都落入这个陷阱。

换句话说,你要解决的问题才应该影响你如何分割数据。为了预测向一个分子中添加两个原子的效果,测试集中的每个分子在训练集中应该至少存在两个原子的差别。如果你想对不同的化学分子有更好的预测,测试集中的每个分子都应该不同于训练集中的任何东西。分割数据的“正确”方法可能并不显眼,但是仔细考虑和尝试几种方法或有意想不到的收获。

二、隐藏变量

在一个理想的实验其中,研究者只改变他们感兴趣的变量,并让其他变量保持不变,而这种控制在现实其中几乎是不可能的。仪器的精确度会随着时间而改变,试剂的批次会有所不同,一个实验条件会先于另一个进行表现出来,甚至天气都有可能影响结果。在机器学习模型中,这些不受控制的变量都将是有害无益的。

举个例子,谷歌的一个团队一直在加州的福特.希尔兰赫(Foothill Ranch, California)的核聚变创业公司TAE Technologies工作,进行优化生产高能等离子体的实验。他们在这里建了模型来理解等离子机的最佳设备设备。这里存在着上百个从“何时接通电极”到“设置在磁体上的电压为多少”等控制参数,然后记录了一系列包括温度和光谱在内的测量值。

他们历经数月,从数千次运行的等离子机中提取了数据,其中的设置会随着我们的设备调整、部件磨损和多种尝试有所变化。当我们得到了一个在给定的设置下,无论等离子能量是否会变高,预测结果都很不错的模型时,大家都很高兴,不过很快就打脸了。

当他们以实验时间为唯一输入而不是机器的所有设置来训练模型,也得到了相似的预测效果。为什么?因为模型锁定的就是时间趋势,而不是物理现象。也就是说,机器运转良好的时间段和不良的时间段分别出现,所以,从实验完成的时间可以看出等离子体是否是高能量的。此外,通过控制参数的设置可以粗略预测实验何时进行,这些参数的变化也存在时间趋势。也就是说,除了时间规律,模型什么物理规律都没管。

隐藏变量也会来源于实验布局。像我们在解读显微镜图像方面与许多机构合作,其中包括纽约市的纽约干细胞基金会研究所。这些图像包括了在培养皿上进行的生物实验,通常是一些包含细胞和液体的网格孔。我们的目标是发现拥有某些特征的孔,比如化学处理后细胞外观的变化。但是生物变异意味着每个培养皿本身总是会看起来有稍许不同,并且单个培养皿也可能存有差异。如果外围孔有更多液体蒸发,或者培养皿有被倾斜,那边缘看起来通常会与中心不一样。

机器学习算法能轻而易举地注意到这些变化。例如说模型可能刚辨认出了哪些孔处在培养皿的边缘,一种检查模型的简易方法就是让模型去预测其他方面,如培养皿的位置、哪一块培养皿,或者图片来源的批次。如果算法能做到这一点,那你最好对结果持怀疑态度。

最重要的一点是,要使用多个模型来检测那些意外变量与隐藏变量。可以用一个模型侧重你关心的问题,比如离子是高能还是低能,细胞是否健康,其他模型则用来清除干扰因素。如果后者结果很强,那么请将数据标准化,做些进一步的实验,或者调整一下结论。

三、曲解目标

机器学习算法要求研究员明确一个用来估量各种错误严重度的“损失函数”,例如到底是有两个1%的错误好,还是单个2%的错误更合理。从企业们倾向于应用函数的一小部分,从而导致他们无法得到真正需要的内容。

还是举个例子,大家一直有用机器学习来辅佐求解微分方程。这些公式在包括流体力学、电磁学、材料科学、天体物理学和金融建模中经常见,一般情况下它们必须以数字方式解决,然后开始训练模型,从而能在有限的条件下提供更高的精确性。

我们就从用一个方程式,描述水波如何在一维进行传播说起吧。该算法的任务是从当前的时间步长来重复预测下一步,在这方面可以准备两种略微不同的方法与训练模型。根据损失函数来看,这两个模型是一样优秀的,但实际上其中一个做了一堆无用功,另一个的产生结果更接近预期。

原因就是控制学习的损失函数考虑到了下一步的错误,而不是研究者真正想要的多重步骤的解决方案有效性。

我们在糖尿病视网膜病变的机器筛查方面也出现了分歧目标。这是糖尿病的一种并发症,也是世界上可预防性失明的主要原因。如果能从眼后图像及时检测到该病症,它就能被有效治疗。当我们收集数据并且让眼科医生通过图像进行诊断时,我们让机器学习的工具预测一下医生都会说些什么,此时出现了两种情况。

情况一是眼科医生经常不认同诊断,因此研究人员意识到不能通过单一的预测来创建模型。总不能来个投票说少数服从多数,因为在医疗上,有时候少数人的意见才是正确的。情况二是单一疾病的诊断实际上并不是真正的目标。因为往往需要问的是:“这个患者需要去看医生吗?”,然后通过这种方式将目标从单一疾病的诊断扩展到多重疾病。

机器学习从企业很容易迷恋上数据标签都清晰的“明显”目标,但他们可能正在设置算法来解决错误的问题。所以必须牢记大方向和总目标,否则就只会为错误问题埋单。

防范陷阱的三个方式:了解机器学习、订定明确标准、提出质疑

首先,机器学习专家需要让自己和同事们持有更高的标准。当有新实验设备到来时,大家总是寄望于实验室的伙伴们搞懂功能,怎么校准,怎么检测到问题,还要了解其功能的限制。因此,面对机器学习时也应如此。机器学习不是魔法,工具的用户们必须了解如何掌控它们。

其次,当需要使用机器学习时,不同学科需要为其制定出明确的标准。合适的控制、健全性检查和错误的测量会因领域而异,所以这些都需要解释清楚,以便研究者、审查者和从企业有规可循。

第三,机器学习科学家们所受的教育需要包括一些更广泛的内容。即使有些类似于这样开源的资源存在,需要做的仍然很多。授人以鱼不如授人以渔,可能更多人只去学算法与工具,但学习如何应用算法与适当地提出质疑也很重要。

所有从事机器学习的人都正处在一个神奇的点上——计算能力、数据和算法交织在一起,在机器学习的的协助下碰撞出了新的美妙火花,利用好这个机会将是整个科学界义不容辞的责任。