今天咱们来唱唱反调,推荐一篇Hacker News和Reddit的双料热文《什么时候该不用深度学习》。编程
做者 | Pablo Cordero网络
翻译 | AI科技大本营(rgznai100)架构
参与 | reason_W,波波框架
前段时间,AI科技大本营讨论过一场关于深度学习应用的争论——【撕起来了!谁说数据少就不能用深度学习?】,某教授认定“没有大数据就不要用深度学习”,这让一位正在辛苦作研究的博士后立时炸了,“只要你能搞懂模型,小数据一样能够用深度学习”。机器学习
这个博士后就是加州大学圣克鲁兹分校系统生物组的Pablo Cordero,他正在用机器学习来研究单细胞测量的问题。他认为,当此深度学习愈来愈多地被用到生物信息学研究之际,你们必定要实事求是向前看,不能让错误的风向吹倒深度学习的大旗。编程语言
毕竟,深度学习不是万能的,更不是万达的。除了“没有免费的午饭”定理,深度学习模型的差异还至关微妙,使用的过程须要很是细心,有时还须要作很是昂贵的超参数搜索、调整与测试。函数
于是,从实用的角度看,深度学习在许多状况下并很差用,反而是简单的模型效果更好。在这里,清醒地认识深度学习所不适用的场景,便成为避免争论的关键。Pablo Corder对这类场景的分析以下:工具
深度神经网络是很是灵活的模型,有着大量的架构和节点类型、优化器与正则化策略。学习
根据不一样的应用场景:测试
你的模型可能会有卷积层(多大?使用什么池化操做?)或循环结构(有或没有门控?);
它可能真的很深(hourglass、siamese或其余架构?)也可能只有几个隐藏的层(有多少单位?);
它可能使用整流线性单元或其余激活函数;
它可能会有或不会有dropout (在什么层次中?用什么分数?),权重颇有可能被正则化(L1范数,L2范数,仍是其余某种方式?)。
这只是一部分列表,还须要尝试不少其余类型的节点,链接,甚至损失函数。
这些都是在训练时须要去调整的超参数,须要去探索的架构,这使得即使只训练一个大型网络都会至关耗时。
最近Google在吹嘘它的AutoML管道能够自动找出最好的架构,虽然说其结果让人印象极深,但该成果是超过800个GPU全天候运行数周才获得的,这种资源可不是每个人都触手可及的。
这里的问题不在于深度学习,而在于训练深度网络的计算和调试,它们的开销太大了。对于许多平常问题的预测,这样的开销没有任何意义,由于即使是调整小型网络,它的性价比也实在过低。
因此,就算你足够的预算和投入,也没有理由不优先尝试替代方法。你颇有可能会惊喜地发现,线性SVM才是真正的需求。
深度神经网络仍是一个臭名昭著的黑箱,尽管预测能力很强,但可解释性不足。
虽然说最近有很多工具在某些领域很见效果,如显著图与激活差别性,但它们还不能彻底迁移到全部的应用场景中。这主要是在于,当你想确保神经网络不是经过记诵数据集或是专一于特定的虚假特征来欺骗你时,此类工具就能作出效果;但如何把每一个特征的重要性解释为深层网络的总体决策,仍旧很难实现。
在这方面,没有什么曾真正的战胜过线性模型,由于线性模型的学习系数与响应有直接的关系。当你须要把这些解释传达给须要据此来作决定的普通人时,这尤为重要。
例如,医生须要结合多种不一样的数据来作出诊断。变量和结果之间的关系越简单和越直接,医生利用的效果就越好,而不是低估/高估实际结果。
此外,有些状况下,模型的准确性(一般这偏偏是深度学习所擅长的)并不像解释性那样重要。
例如,策略制定者可能想知道一些人口统计变量(好比对死亡率)的影响,而且可能对这种关系的直接近似比对预测的准确性更有兴趣。
在这两种状况下,与更简单,更易理解的方法相比,深度学习就会处于不利地位。
模型解释的极端状况是当咱们试图创建一个物理模型,即一个实际捕获数据背后的现象的模型。 好的例子包括试图猜想两个分子(例如药物,蛋白质,核酸等)是否在特定的细胞环境中相互做用,或者假设特定的营销策略如何对销售产生实际的影响。
在这个领域,专家们的意见是,没有什么能够超越老式的贝叶斯方法,这是咱们最好的(即便不完美的)表示和推断因果关系的方式。
Vicarious最近作了一个很好的研究,说明了为何该方法在电子游戏任务的表现上比深度学习效果更好- https://www.vicarious.com/img/icml2017-schemas.pdf
这一点可能还在争论。我发现深度学习擅长的一个领域是为特定任务找到有用的数据表示。
一个很好的例子是刚刚说的词嵌入。天然语言具备丰富而复杂的结构,能够用“上下文感知”网络近似:每一个单词均可以在编码了使用频率较高的上下文的向量中进行表示。在大型语料库中学习的NLP任务中使用词嵌入有时能够在另外一个语料库的特定任务中提高效果。
然而,若是所讨论的语料库是彻底非结构化的,则可能没有任何用处。例如,假设您正在经过查看关键字的非结构化列表来对对象进行分类。因为关键字没有在任何特定的结构中使用(如在一个句子中),因此词嵌入不太可能对此有所帮助。在这种状况下,数据就是一个词袋,这种表示可能就足以知足任务。
与此相反的是,若是您使用预训练的话,而且能更好地捕获关键字类似度,那么词嵌入就并非那么昂贵。不过,我仍是宁愿从一个单词的表示开始,看看可否获得很好的预测。毕竟,这个词袋的每一个维度都比对应的词嵌入槽更容易解读。
深度学习领域煊赫一时,资金充足,发展迅猛。当你读到在会议上发表的论文的时候,它已经通过两三次迭代,而且已经不值得推荐了。
这给我提出的以上几点提了一个很大的醒:在不久的未来,深度学习可能对这些情景来讲是很是有用的。
毕竟,用于解释图像和离散序列的深度学习模型的工具正变的愈来愈好。
像Edward(Google提出的一种深度几率编程语言)这样的新软件,已经在综合使用贝叶斯建模和深度网络框架,以经过几率编程和自动变分推理来量化神经网络参数和简单贝叶斯推断的不肯定性。
从长远来看,可能会出现一个简化的建模词汇表,以揭示深度网络的显著属性,从而缩小你所须要尝试的参数空间。
因此,请继续刷arXiv吧,本文所谈的内容,可能一两个月后就彻底没用了。
原文地址
http://hyperparameter.space/blog/when-not-to-use-deep-learning/