那么,什么时候深度学习不适合于某些任务呢?从我的角度来看,atv,以下这些情况下,深度学习更多是一种阻碍,而不是福音。 低预算或低投入问题 深度网络是非常灵活的模型,具有多种架构和节点类型、优化器和正则化策略。根据应用程序,你的模型可能具有卷积层(多大?使用什么池操作?)或循环结构(有没有门控?);它可能真的很深(hourglass、siamese,或者其他的架构)?还是只是具有很少的几个隐藏层(有多少单元?);它可能使用整流线性单元或其他激活函数;它可能或可能不会有退出(在什么层次中?用什么分数?),权重应该是正则化的(l1、l2,或者是某些更奇怪的东西?)。这只是一部分列表,还有很多其他类型的节点、连接,甚至损失函数。即便只是训练一个大型网络的示例,那些需要调整的参数以及需要探索的框架的过程也是非常耗时的。谷歌最近吹嘘自己的AutoML方法可以自动找到最好的架构,这是非常令人印象深刻的,但仍然需要超过800个GPU,全天候运行数周,这几乎对于任何人来说是都遥不可及的。关键在于训练深层网络时,在计算和调试部分都会花费巨大的代价。这种费用对于许多日常预测问题并没有意义,即使调整小型网络。调整网络的投资回报率可能太低。即使有足够的预算和承诺,也没有理由不尝试替代方法,即使是基准测试。你可能会惊喜地发现,线性SVM对于你就够用了。 解释和传达模型参数对一般受众的重要性 深度网络也是各臭名昭着的黑匣子,它具有高预测能力但可解释性不足。尽管最近有很多工具,诸如显著图(saliency maps)和激活差异(https://arxiv.org/abs/1704.02685),对某些领域而言是非常有用的,但它们不会完全迁移到所有的应用程序中。主要是,当你想要确保网络不会通过记住数据集或专注于特定的虚假特征来欺骗你时,这些工具就能很好地工作,但仍然难以将每个功能的重要性解释为深度网络的整体决策。在这个领域,没有什么能够真正地打败线性模型,因为学习系数与响应有着直接的关系。当将这些解释传达给一般受众时,这就显得尤为重要。例如,医生需要包含各种不同的数据来确认诊断。变量和结果之间的关系越简单、越直接,医生就能更好地利用,而不是低于/高于实际值。此外,有些情况下,模型的精度并不像可解释性那样重要。例如,策略制定者可能想知道一些人口统计变量对于死亡率的影响,并且相较于预测的准确性来说,可能对这种关系的直接近似比更有兴趣。在这两种情况下,与更简单、更易渗透的方法相比,深度学习处于不利地位。 建立因果机制 模型可解释性的极端情况是当我们试图建立一个机械模型,即实际捕捉数据背后的现象的模型。一个好的例子包括试图猜测两个分子(例如药物、蛋白质、核酸等)是否在特定的细胞环境中相互作用,或者假设特定的营销策略如何对销售产生实际的影响。在这个领域,根据专家意见,没有什么可以击败老式的贝叶斯方法,它们是我们表达并推断因果关系的最好方式。Vicarious有一些很好的最新研究成果,说明为什么这个更原则的方法在视频游戏任务中比深度学习表现得更好。 学习“非结构化”特征 这可能是具有争议性的。我发现深度学习擅长的一个领域是为特定任务找到有用的数据表示。一个很好的例子就是上述的词语嵌入。自然语言具有丰富而复杂的结构,可以说与“上下文感知”(context-aware)网络相近似:每个单词都可以在向量中表示,而这个向量可以编码其经常使用的文本。在大型语料库中学习的NLP任务中使用单词嵌入,它有时可以在另一个语料库的特定任务中提升效果。然而,如果所讨论的语料库是完全非结构化的,则可能不会起到任何作用。例如,假设你正在通过查看关键字的非结构化列表来对对象进行分类,由于关键字不是在任何特定结构中都会使用的(比如在一个句子中),所以单词嵌入不太可能有助于所有这些情况。在这种情况下,数据是真正的一个单词包,这种表示很有可能足以满足任务所需。与此相反的是,如果你使用预训练的话,可以更好地捕获关键字的相似度,而且单词嵌入并不是那么昂贵。不过,我还是宁愿从一个单词的表示开始,看看能否得到很好的预测结果。毕竟,这个词包的每个维度都比对应的词嵌入槽更容易解读。 前景广阔 (责任编辑:本港台直播) |