机器学习预测工具正在帮助各个领域的研究人员,比如发现分子的新方法、在分析中发现细微信号,提高医学诊断质量、揭示基本粒子的性质等。
然而,机器学习工具也可能成为问题的根源,产生误报,导致盲目试验和错误。现在的许多算法都非常复杂,复杂到可能已经无法一一检查所有参数,无法确切了解输入的运行方式。随着这些算法的应用越来越广泛,出现误解、错误结论和“做无用功”的风险变得越来越大。这些问题其实并不新鲜。现在不少机器学习论文未能完成足够的实验,审查标准也多有不一致。由于竞争激烈,一些研究人员会为了得到想要的结果而偷工减料,跳过必要的检查环节。虽然我们无法预测所有问题的出现,但至少,研究人员在自己的领域应用机器学习时,应该熟悉并掌握发现和避免这些常见问题的方法和实践。下面以笔者的亲身经历为例,提出在Google Accelerated Science团队中运用机器学习分析时遇到的三个主要问题。
不恰当地拆分数据。在构建模型时,研究人员通常会将数据分为训练集和测试集。训练集负责“教授”模型,并通过模型对测试集的描述准确程度来评估模型性能。研究人员一般会随机分割数据。但现实生活中的数据很少是随机的。数据可能存在随时间变化的趋势——比如收集数据的方式不同导致的变化,或者对收集哪些信息的不同选择而导致的变化等。
比如,在利用机器学习算法筛选新药的过程中,这些模式就隐藏在分子的数据集中,于是挑战就在于,预测某一分子是否能有效吸收到体内,减轻炎症。这个预测由筛选分子数据开始,但是收集数据的背景可能与机器学习模型的使用方式不同。比如,可以先在公开可用的一组分子上建模,然后将模型用于不同的专有分子集上。化学家的注意力经常从某些分子群转向其他分子,经常高估模型的实际表现。这可能导致过高的预期,并且在错误的分子上浪费时间和金钱。许多人(包括我自己)都陷入了这个陷阱。换句话说,你想要解决的问题会影响对数据的拆分方式。为了考察模型预测添加几个原子对分子的影响,测试集中的每个分子应该在训练集中加入一个不同的原子。如果你想对不同分子做出很好的预测,那么测试集中的每个分子应该与训练集中的所有分子全部不同。分割数据的“正确”方式可能并不明显,但仔细考虑并尝试多种方法可以提供更高的可靠性。
隐藏变量。在理想的实验中,研究人员可以只更改自己感兴趣的变量,固定所有其他变量。在现实世界中,这种控制通常是不可能实现的。随着时间的推移,设备的精度会发生变化,不同批次的试剂,不同的实验顺序,甚至是不同的天气,都会对结果造成改变。这种“不受控制”的变量在机器学习模型中可能是有害的。
例如,我在Google的团队一直在加州一家核聚变初创公司TAE Technologies工作,优化生产高能等离子体的实验流程。我们建立了模型,试图了解等离子机的最佳设置。我们在几个月的时间里获得了等离子机数千次的运行数据。建模完毕时,我们很高兴,根据给定的设置预测,等离子体的能量是否会很高。但很快,我们发现的预测结果和我们的设想不符。
在印度马杜赖的Aravind医院进行眼科检查,医生和谷歌的研究人员正尝试自动诊断由糖尿病引起的失明
当我们再次训练模型时,将实验时间作为唯一输入,也获得了类似的预测能力。为什么?我们认为我们的第一个模型锁定了时间趋势,而不是物理现象。随着实验的进行,有一段时间机械运行良好,有些时间则没有。因此,实验的时间可以为您提供有关产生的等离子体是否为高能量的信息。这里的实验时间就是“隐藏变量”。隐藏变量也可以由于实验的设计而产生。比如我们的团队正在进行的一个合作项目是对显微镜图像进行“解释”。这些图像包括在实验板上的生物实验阵列,通常是包含细胞和液体的孔的网格。我们的目标是找到具有某些特定特征的孔,比如经化学处理后细胞外观的一些变化。但生物的多样性本身就让每个实验板都略有区别。在一块板上也可能存在差异。位于板边缘的液滴与中心部分的不同,比如边缘部分的液体蒸发更强烈,或者板本身可能出现倾斜,这些都会导致结果的差异。机器学习算法可以轻松掌握这些人们未意识到的变化。比如模型可能只是负责确定哪些液滴位于板的边缘。检查是否出现这种“隐藏变量”的一种简单方法是让模型预测其他目标,比如液滴在板上的位置,位于哪块板上,显微镜图像来自哪个批次。如果模型成功预测到了,可能就需要对原来的实验结果持一份怀疑。要解决这个问题,可以使用多个机器学习模型来检测意外变量和隐藏变量。其中一个模型预测主问题——比如等离子是高能还是低能状态、细胞是健康还是生病,而用其他模型排除混杂因素。如果后者的预测结果很强,可能就需要对数据进行标准化处理、进行进一步实验,或准备修正之前的实验结论。
认不清目标。机器学习算法要求研究人员指定一个“损失函数”,由它决定各种错误的严重程度。目前人们倾向于使用更小的函数集,这些函数往往无法捕捉研究人员真正关心的内容。
比如我们一直在使用机器学习来辅助求解偏微分方程。这些方程在流体力学、电磁学、材料科学、天体物理学和经济建模中都很常见。我们从一个方程开始描述水波如何在一个维度上传播。该算法的任务是重复预测当前步骤的下一个时间步长。我们使用两种稍微不同的训练模型。从损失函数来看,这两个模型同样好。然而实际上,一个完全不能用,而另一个产生了接近期望的结果。为什么?因为控制学习的损失函数只考虑下一步的错误,而不能量度多步的解决方案的有效性,而我们真正想要的恰恰是后者。在利用机器学习对糖尿病视网膜病变的机器筛查任务中,也出现了不同的目标。对于这种病,如果从眼睛后部的图像中提早检测到,就可以有效治疗。当我们收集数据,并让眼科医生根据图像提供诊断时,会让机器学习工具预测眼科医生会说些什么。结果出现了两个问题。首先,眼科医生们经常在诊断意见上无法达成一致。因此我们意识到,不能将模型建立在单一预测上。同样也不能使用“少数服从多数”那一套,因为在医疗准确性方面,有时少数意见是正确的。第二,其实对这种单一疾病的诊断并不是我们真正的目标。我们本来应该问的是:“这位患者应该去看医生吗?”因此,需要将预测目标从单一疾病的诊断扩展到多种疾病。机器学习从业者很容易掌握数据和标签清晰的“明显”目标。但可能在算法的设置上没能解决正确的问题。必须牢记总体目标,否则再精确的系统解决的也是错误的问题。
首先,机器学习研究人员要让自己和同事保持更高的标准。对于一台新的实验设备,必须充分了解其功能,如何校准,如何检测错误,设备的局限性有哪些等。对于机器学习模型和算法也要如此。所谓“神奇的魔法”其实是不存在的,使用工具的人必须要理解这些工具。其次,对于不同的学科,需要制定明确的标准。适当的控制,健全性检查和错误测量将因不同领域而异,这些都需要清楚地说明,以便研究人员、审稿人和期刊编辑能够鼓励良性的科学行为。第三,关于机器学习科学教育需要囊括这些更广泛的问题。虽然目前已经有一些资源,但我们还需要做更多工作。笔者所在的团队经常教授算法和工具,但学生需要更多地了解如何应用他们的算法,并对算法本身保持适当的质疑。目前,算力、数据和算法的汇集正迸发出巨大的合力,在机器学习的加持下,为更多的新发现创造了巨大的机会。作为科学共同体的一员,我们有责任确保能够最充分、高效地将这个机会利用好。
https://www.nature.com/articles/d41586-019-02307-y