选自HYPERPARAMETER SPACE
机器之心编译
参与:黄小天
近日,加州大学圣克鲁兹分校(UCSC)斯图尔特实验室博士后 Pablo Cordero 在其个人博客上发表了首篇文章《WHEN NOT TO USE DEEP LEARNING》,探讨了深度学习的当前现状和先入为主的观念,并分析了其局限性。
我知道博客标题中使用否定词很奇怪,但是前几天有一波讨论正好相应于我正在思考的一些问题。这一切开始于 Jeff Leek 发表的一篇有关说明在小样本范围内使用深度学习的文章。要言之,他认为当样本较小时(这在生物领域很常见),带有少许参数的线性模型甚至比带有少量层和隐藏单元的深度网络性能更优。他继续展示了一个非常简单的带有十大信息特征的线性预测器,在使用大约 80 个样本在 MNIST 数据集中分类 0 和 1 时,性能比一个简单的深度网络更优。这促使 Andrew beam 写了一篇反驳文章(小心训练模型,数据少也可以玩转深度学习),其中写道一个适当训练的深度网络能够完胜简单的线性模型,甚至仅仅使用非常少的训练样本。在争论期间,越来越多的生物医疗信息研究者开始采用深度学习处理不同的问题。hype real 或者线性模型就是我们需要的全部吗?正如往常一样,答案是看情况。在本文中,我将介绍几个机器学习的应用案例,其中深度学习在应用和处理先入为主的观念方面并没有太多实际意义,我认为正是这些先入为主的观念(preconception)阻碍了深度学习的应用,尤其是对于入门者来说。
首先,让我们解决一些先入为主的观念,外行人已经将其误认为半真理。有两个大的先入为主的观念以及一个比较技术的先入为主的观念,这在某种程度上是对 Andrew Beam 关于「错误之见」的延伸。
深度学习的声望建立在大量数据之上(比如首个谷歌大脑工程向深度网络馈送了大量的 YouTube 视频),并且作为复杂算法运行大量数据以来一直被公开化。不幸的是,大数据和深度学习的关系也有时对反:一个深度学习不能应用于小数据样本的神话。如果你的神经网络样本数据很少,带有较高的参数样本比,表面上看很可能会出现过拟合。然而,如果只考虑给定问题的样本大小和维度,不管是监督学习还是无监督学习,这是凭空地建模数据,无需语境。很可能是这种情况,你有与问题相关的数据资源,或者某个领域专家可以提供 strong prior,或者数据的组织结构很特殊。在所有这些情况中,深度学习有机会成为一种有效方法,例如,可以为更大的相关数据集编码有用的表征,并将其应用在你的问题之中。其经典图示在自然语言处理中非常普遍,其中你可以学习大型语料库的词嵌入,并将其作为更小更窄语料库中的嵌入来完成有监督学习任务。极端地说,你可以联合一组神经网络学习一个表征和一个有效的方式以在小样本集中重复使用表征。这被称作 one-shot learning,并被成功用在诸多高维数据领域,比如计算机视觉和药物发现。
用于药物发现的 one-shot learning,引自 Altae-Tran 等人的论文。ACS Cent. Sci. 2017。
第二个我听到最多的先入之见是 hype。许多准从业者希冀深度网络可以带给他们一个神秘的性能提升,仅仅因为神经网络在其他领域也行之有效。其他人从建模和操控图像、音乐、语言的工作中获得启发,并通过尝试训练最新的 GAN 架构猛冲进这个领域。hype 真实存在,且方式多样。深度学习在机器学习中一枝独秀,并成了数据建模的一件重要工具。深度学习的流行催生出了一些核心的框架比如 TensorFlow 和 PyTorch,它们出奇地好用,甚至在深度学习之外也是。超级巨星源自失败者的故事启发了研究者重拾以前被埋没的方法,比如进化策略和强化学习。但这无论如何不是万能药。除却没有免费午餐的考量,深度学习模型可以非常细微,需要小心、有时非常昂贵的超参数搜索、调试和测试(后文将有详述)。此外,在很多情况下深度学习并无太多实际价值,反而是更简单的模型效率更高。
来自机器学习其他领域的翻译多多少少埋没掉了深度学习的一个方面。很多教程和入门材料描述深度学习模型由层级互联层(由节点构成)构成,其中第一层是输入层,最后一层是输出层。你可以使用随机梯度下降训练它们。也许在简短提及随机梯度下降如何工作以及什么是反向传播之后,大部分的解释聚焦在了神经网络类型的丰富上。优化方法本身需要很少的额外注意力,这很不幸,因为很可能相当一部分深度学习奏效的原因是由于这些特殊的方法,并指导如何优化它们的参数;以及如何分割数据以有效使用它们对于在合理的时间范围内获得良好卷曲至关重要。为什么随机梯度如此重要依然不得而知,但是一些线索正到处浮现。我最喜欢的一个是将该方法阐释为贝叶斯推理执行的一部分。本质上讲,每次当你做某些形式的数运算,你就在使用特定假设和 prior 执行一些贝叶斯推理。
随机梯度下降并不难,最近的工作表明该步骤实际上是一个马尔可夫链,在特定假设下有一个静态分布,可被看作是对 posterior 的变分近似。所以当你停止你的 SGD 并采用最后的参数时,你基本上是在从这一近似分布中采样。我发现这一想法很有启发力,因为优化器的参数通过这种方式发挥了很大作用。比如,由于你可以增加 SGD 的学习参数,马尔可夫链会变的不稳定直到找到大面积采样的局部极小值;即,你增加了步骤的方差。另一方面,如果你减少学习参数,马尔可夫链会慢慢近似更窄的极小值,直到它在严密区域内收敛;即,你增加了一个特定区域的方差。另一个参数,SGD 中的批大小,也控制着算法收敛的区域类型。对于小批的更宽广区域,以及更大批的更窄区域。
SGD 优选宽或窄的依赖于其学习率或批大小的最小值。
这一复杂性意味着深度网络的优化器成了第一等级:它们是模型的核心部分,和层架构同等重要。这种情况在机器学习的其他许多模型中并不常见。线性模型和支持向量机是凸优化问题,这些问题实际上没有太多差别,且只有一个真实答案。这就是为什么其他领域的人或者使用诸如 scikit-learn 等工具的人在没有找到带有.fit() 的非常简单的 API 时深感困惑。
因此,什么时候深度学习确实不适合一项任务?依我看,以下几个主要场景中深度学习并不适用。
深度学习模型非常灵活,有大量的架构和节点类型、优化器以及归一化策略。依靠应用,你的模型也许会有卷积层或者循环结构;它也许真的很深,或者仅有几个隐藏层;它也许使用整流线性单元或者其他的激活函数;它或许有 dropout,或许没有,并且权重很可能被归一化。以上只是一个部分列表,还有很多其他的类型的节点、链接甚至损失函数可以尝试。有很多超参数可以微调,很多架构可以探索,尽管训练一个大型的神经网络非常耗时。谷歌最近鼓吹其 AutoML 流程可自动找到最佳架构,但是需要超过 800 块 GPU 全力运转数周,这可不适合所有人去做。重点是训练深度网络在计算和调试方面成本很高,这种费用对于许多日常预测问题并没有任何意义,甚至调整小型网络速度也太慢。即使有足够的预算和承诺,首先作为基准也没有理由不尝试其他方法。你可能会惊喜地发现,线性支持向量机才是你真正需要的全部。
深度网络之所以臭名昭著是因为它是一个黑箱,预测能力强大却无法被解释。即使最近有很多工具在一些领域表现显著,它们并不会彻底转向全部的应用。这些工具在你想要确保网络是否欺骗你时工作良好,这主要是通过存储数据集或者聚焦特定的假特征实现的。但是向深度网络的整体决策阐释预特征的重要性依然很困难吗?在这一领域,由于学习系数与回应存在直接关系,没有什么可以真正打败线性模型。这在向一般听众传递这些阐释时尤其关键。例如,内科医生需要整合所有类型的分散数据从而做出诊断。变量与结果之间的关系越简单和直接,内科医生对其利用就越好,并且不会低估/高估其价值。进而,在很多案例中模型的精确度并没有理论阐释那么重要。例如,一个策略决策者也许想要知道人口统计的变量对死亡率的影响,并且相比于预测精度,他很可能对两者关系的直接近似值更感兴趣。在这两种案例中,相对于更简单、更深入的方法,深度学习处于劣势。
模型阐释的极端案例是试图建立一个机制模型,即,一个可以真正捕捉数据背后的现象的模型。好的实例包括试图猜测两个分子是否在一个特定的细胞环境中交互?或者假设一个特定的市场策略如何对销售产生实际影响。该领的专家认为,老式的贝叶斯方法不可替代;它是我们进行因果表征和推理的最佳方式。Vicarious 最近在这方面有一些杰出成果(https://www.vicarious.com/img/icml2017-schemas.pdf),证明了为什么这一更加原则性的方法可以在视频游戏任务中比深度学习泛化地更好。
这个有待讨论。我发现深度学习擅长的一个领域是为一个特定任务找到数据的有用表征。一个比较好的示例是上述的的词嵌入。自然语言有着丰富而复杂的结构,其可通过「语境-意识」网络被近似:每个词可表征为一个向量,它编码了其被使用最多的语境。使用在自然语言处理任务的大型语料库中学习的词嵌入有时可使另一个语料库中的特殊任务获得提升。然而,如果有问题的语料库是彻底非结构的,那么深度学习将毫无用武之地。例如,你正在通过查看关键词的非结构列表进行目标分类。由于关键词并不被用于任何特定结构,词嵌入并不可能帮助太多。在这一情况中,数据是真正的词包,表征对于任务也充足。一个反方论点也许是词嵌入实际上并没有那么昂贵,如果使用预训练的词嵌入,你也许可以更好地捕捉到关键词相似性。然而,我依然倾向于从词包表征开始,并查看我是否能够得到好的预测。毕竟,相比于对应的词嵌入槽,词包的每一个维度更容易阐释。
深度学习很热,资金充足,且发展飞快。当你在一个会议上读到一篇深度学习论文时,它可能是两三次迭代后的结果。这给我的上述观点提出了很大的注意:不久的将来,深度学习也许在一些场景中依然超级有用。阐释深度学习的工具变得越来越好。最近的软件(比如 Edward)融合了贝叶斯建模和深度网络框架(详见:深度概率编程语言 Edward:融合了贝叶斯、深度学习和概率编程),借助概率编程和自动变分推理,量化了神经网络参数和简单贝叶斯推理的不确定性。长远看,存在一个简化的建模词汇表,揭示深度网络可以具有的显著属性,从而减少需要测试的事物的参数空间。因此,继续刷 arXiv 吧,没准一两个月这篇文章已被迭代。
Edward 在 TensorFlow 中融合了概率编程,可同时用于深度学习和贝叶斯模型。摘自 Tran 等人的 ICLR 2017 论文。
原文链接:http://hyperparameter.space/blog/when-not-to-use-deep-learning/
本文为机器之心编译,转载请联系本公众号获得授权。
点击下方“阅读原文”下载同声译 ↓↓↓