深度学习二三事

标签: 专栏 深度学习 | 发表时间:0002-11-30 00:00 | 作者:饭团君
出处:http://www.freebuf.com

666666666.jpg

1.引文

我知道博客标题中使用否定词很奇怪,但是前几天有一波讨论正好相应于我正在思考的一些问题。这一切开始于 Jeff Leek 发表的 一篇有关说明在小样本范围内使用深度学习的文章。要言之,他认为当样本较小时(生物领域中属于常见现象),带有少许参数的线性模型甚至比带有少量层和隐藏单元的深度网络性能更优。他继续展示了一个非常简单的带有十大信息特征的线性预测器,在使用大约 80 个样本在 MNIST 数据集中分类 0 和 1 时,性能比一个简单的深度网络更优。

这促使 Andrew beam 写了一篇反驳文章(注意训练模型,数据少也可以玩转深度学习),其中写道一个适当训练的深度网络能够完胜简单的线性模型,甚至仅仅使用非常少的训练样本。在讨论期间,越来越多的生物医疗信息研究者开始采用深度学习处理不同的问题。hype real 或者线性模型就是我们需要的全部吗?正如往常一样,答案总是取决于事物本身。在本文中,我将介绍几个机器学习的应用案例,其中深度学习在应用和处理先入为主的观念方面并没有太多实际意义,我认为正是这些先入为主的观念阻碍了深度学习的应用,尤其是对于新手来说。

2.打消深度学习成见

首先,让我们解决一些先入为主的观念,外行人已经将其误认为半真理。有两个大的先入为主的观念以及一个比较技术的先入为主的观念,这在某种程度上是对 Andrew Beam 关于“错误之见”的延伸。

3.深度学习可真正应用于小数据样本

深度学习的名声是在大量数据的背景下声名鹊起(第一个谷歌大脑项就把大量的YouTube视频传输到一个深度网络),并且作为复杂算法运行大量数据以来一直被公开化。不幸的是,大数据和深度学习的关系也有时对反:一个深度学习不能应用于小数据样本的神话。

如果你的神经网络样本数据很少,带有较高的参数样本比,表面上看很可能会出现过拟合。然而,如果只考虑给定问题的样本大小和维度,不管是监督学习还是无监督学习,这是凭空地建模数据,无需语境。很可能是这种情况,你有与问题相关的数据资源,或者某个领域专家可以提供 strong prior理论,或者数据的组织结构很特殊。在所有这些情况中,深度学习有机会成为一种有效方法,比如,可以为更大的相关数据集编码有用的表征,并将其应用在你的问题之中。其经典图示在自然语言处理中非常普遍,其中你可以学习大型语料库的词嵌入,并将其作为更小更窄语料库中的嵌入来完成有监督学习任务。

进一步来说,你可以联合一组神经网络学习一个表征和一个有效的方式以在小样本集中重复使用表征。这被称作 “one-shot learning”,并被成功用在诸多高维数据领域,比如计算机视觉和新药物的发现。

11111111111111111.png

4.深度学习并不是一切的答案

第二个我听到最多的先入之见是 hype。许多准从业者希望借助深度网络可以带给他们一个神秘的性能提升,仅仅因为神经网络在其他领域也行之有效。其他人从建模和操控图像、音乐、语言的工作中获得启发,并通过尝试训练最新的 GAN 架构冲击这个领域。hype 真实存在,且方式多样。深度学习可以说在机器学习中一枝独秀,并成了数据建模的一件重要工具。深度学习的流行催生出了一些核心的框架比如 TensorFlow 和 PyTorch,但它们出奇地好用,甚至在深度学习之外也是。《超级巨星起源》的故事启发了研究者重拾以前被埋没的方法,比如进化策略和强化学习。但这无论如何不是万能药。除却没有免费午餐的考量,

深度学习模型可以非常细微,需要小心、有时非常昂贵的超参数搜索、调试和测试(后文有阐述)。此外,在很多情况下深度学习并无太多实际价值,反而是更简单的模型效率更高。

5.深度学习不仅仅是.fit()

来自机器学习其他领域的翻译多多少少埋没掉了深度学习的一个方面。很多教程和入门材料描述深度学习模型由层级互联层(由节点构成)构成,其中第一层是输入层,最后一层是输出层。你可以使用随机梯度下降训练它们。也许在简短提及随机梯度下降如何工作以及什么是反向传播之后,大部分的解释聚焦在了神经网络类型的丰富上。优化方法本身需要很少的额外注意力,但这很不幸,因为很可能相当一部分深度学习奏效的原因是由于这些特殊的方法,并指导如何优化它们的参数;以及如何分割数据以有效使用它们对于在合理的时间范围内获得良好卷曲至关重要。为什么随机梯度如此重要依然不得而知,但是一些线索正到处浮现。

我最喜欢的一个是将该方法阐释为贝叶斯推理执行的一部分。本质上讲,每次当你做某些形式的数运算,你就在使用特定假设和 prior 执行一些贝叶斯推理方程。随机梯度下降并不难,最近的工作表明该步骤实际上是一个马尔可夫链,在特定假设下有一个静态分布,可被看作是对 posterior 的变分近似。所以当你停止你的 SGD 并采用最后的参数时,你基本上是在从这一近似分布中采样。我发现这一想法很有启发力,因为优化器的参数通过这种方式发挥了很大作用。比如,由于你可以增加 SGD 的学习参数,马尔可夫链会变的不稳定直到找到大面积采样的局部极小值;即,你增加了步骤的方差。另一方面,如果你减少学习参数,马尔可夫链会慢慢近似更窄的极小值,直到它在严密区域内收敛;

即,你增加了一个特定区域的方差。另一个参数,SGD 中的批尺寸大小,也控制着算法收敛的区域类型。对于小批尺寸的更宽广区域,以及更大批尺寸的更窄区域。

SGD 优选宽或窄的依赖于其学习率或批大小的最小值。

222222222222.png

这一复杂性意味着深度网络的优化器成了第一等级:它们是模型的核心部分,和层架构同等重要。这种情况在机器学习的其他许多模型中并不常见。线性模型和支持向量机是凸优化问题,这些问题实际上没有太多差别,且只有一个真实答案。这就是为什么其他领域的人或者使用诸如 scikit-learn 等工具的人在没有找到带有.fit() 的非常简单的 API 时深感困惑。

6.深度学习的局限性

因此,什么时候深度学习确实不适合某一项任务?依我看,以下几个主要场景中深度学习并不适用。

7.低预算或低承诺问题

深度学习模型非常灵活,有大量的架构和节点类型、优化器以及归一化策略。依靠应用,你的模型也许会有卷积层或者循环结构;它也许真的很深,或者仅有几个隐藏层;它也许使用整流线性单元或者其他的激活函数;它或许有 dropout,但也或许没有,并且权重很可能被归一化。以上只是一个部分列表,还有很多其他的类型的节点、链接甚至损失函数可以尝试。有很多超参数可以微调,很多架构可以探索,尽管训练一个大型的神经网络非常耗时。谷歌最近称其 AutoML 流程可自动找到最佳架构,但是需要超过 800 块 GPU 全力运转数周,可这并不适合所有人去做。重点是训练深度网络在计算和调试方面成本很高,这种费用对于许多日常预测问题并没有任何意义,甚至调整小型网络速度也太慢。即使有足够的预算和承诺,首先作为基准也没有理由不尝试其他方法。你可能会惊喜地发现,线性支持向量机才是你真正需要的全部。

8.向一个普通听众解释和传达模型参数/特征重要性

深度网络之所以声名狼藉是因为它是一个黑箱,预测能力强大却无法被解释。即使最近有很多工具在一些领域表现显著,它们并不会彻底转向全部的应用。这些工具在你想要确保网络是否欺骗你时工作良好,这主要是通过存储数据集或者聚焦特定的假特征实现的。但向深度网络的整体决策阐释预特征的重要性依然很困难吗?在这一领域,由于学习系数与回应存在直接关系,没有什么可以真正打败线性模型。这在向一般听众传递这些阐释时尤其关键。比如,内科医生需要整合所有类型的分散数据从而做出诊断。变量与结果之间的关系越简单和直接,内科医生对其利用就越好,并且不会低估/高估其价值。进而,在很多案例中模型的精确度并没有理论阐释那么重要。例如,一个策略决策者也许想要知道人口统计的变量对死亡率的影响,并且相比于预测精度,他很可能对两者关系的直接近似值更感兴趣。在这两种案例中,相对于更简单、更深入的方法,深度学习处于劣势。

9.建立因果机制

模型阐释的极端案例是试图建立一个机制模型,即,一个可以真正捕捉数据背后的现象的模型。好的实例包括试图猜测两个分子是否在一个特定的细胞环境中交互?或者假设一个特定的市场策略如何对销售产生实际影响。该领的专家认为,老式的贝叶斯方法不可替代;它是我们进行因果表征和推理的最佳方式。Vicarious 最近在这方面有一些 杰出的成果,同时证明了为什么这一更加原则性的方法可以在电视游戏任务中比深度学习泛化地更好。

10.从「非结构」特征中学习

这个有待讨论。我发现深度学习擅长的一个领域是为一个特定任务找到数据的有用表征。一个比较好的示例是上述词的嵌入。自然语言有着丰富而复杂的结构,其可通过「语境-意识」网络被近似:每个词可表征为一个向量,它编码了其被使用最多的语境。使用在自然语言处理任务的大型语料库中学习的词嵌入有时可使另一个语料库中的特殊任务获得提升。然而,如果有问题的语料库是彻底非结构的,那么深度学习将毫无用武之地。例如,你正在通过查看关键词的非结构列表进行目标分类。由于关键词并不被用于任何特定结构,词嵌入并不可能帮助太多。在这一情况中,数据才是真正的词包,表征也可处理任务。一个反方论点也许是词嵌入实际上并没有那么昂贵,如果使用预训练的词嵌入,你也许可以更好地捕捉到关键词相似性。然而,我依然倾向于从词包表征开始,并查看我是否能够得到好的预测。毕竟,相比于对应的词嵌入槽,词包的每一个维度更容易阐释。

总结:深度学习是未来

深度学习很热,资金充足,且发展飞快。当你在一个会议上读到一篇深度学习论文时,它可能是两三次迭代后的结果。这给我的上述观点提出了很大的注意:也许不久的将来,深度学习也许在一些场景中依然超级有用。阐释深度学习的工具变得越来越好。最近的软件比如 Edward,融合了贝叶斯建模和深度网络框架,借助概率编程和自动变分推理,量化了神经网络参数和简单贝叶斯推理的不确定性。长远看,存在一个简化的建模词汇表,揭示深度网络可以具有的显著属性,从而减少需要测试的事物的参数空间。因此,继续刷 arXiv(网站) 吧,没准一两个月这篇文章已被迭代。

*参考来源: hyperparameter,饭团君编译,转载请注明来自FreeBuf.COM。

相关 [学习] 推荐:

mongo 学习

- - CSDN博客系统运维推荐文章
mongod 启动参数详解:. master 启动: ./mongod --dbpath /data/db/master --logpath /data/db/master.log --logappend  --fork --port 2717 --master --oplogSize 64 . slave 启动: ./mongod  --dbpath /data/db/slave  --logpath  /data/db/slaver.log --logappend  --fork  -port 27018  --slave --slavedelay 5 --autoresync --source localhost:27017  .

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

pushlet 学习

- - 企业架构 - ITeye博客
转自: http://blog.csdn.net/houpengfei111/article/details/7498481.     pushlet是一种comet实现,在servlet机制下,数据从server端的java对象直接推送(push)到(动态)HTML页面,而无需任何java applet或者插件的帮助.

Storm Trident 学习

- - 小火箭
Storm支持的三种语义:. 至少一次语义的Topology写法. 参考资料: Storm消息的可靠性保障 Storm提供了Acker的机制来保证数据至少被处理一次,是由编程人员决定是否使用这一特性,要使用这一特性需要:. 在Spout emit时添加一个MsgID,那么ack和fail方法将会被调用当Tuple被正确地处理了或发生了错误.

「学习笔记-Linux」学习Shell Script

- - CSDN博客系统运维推荐文章
学习Shell Script. 1 什么是Shell Scipt. 2.2 例2 按日期建立相似名字的文件. 3.2.4 整数,字符串,多重条件判断. 4 Shell Script 参数. 5.2 if else 结构. 8 shell script的追踪与Debug. 1 什么是Shell Scipt.

真正的学习

- Yuli - 左岸读书_blog
前天突然发现,身边很多人在当年读书时有神话般的表现,比方说一个哥们小学、初中与高中永远是全校第一名. 比方说,高中的同桌在一次期末考试前生病,在家休养一个月,回来时距离考试仅三四天时间,但没想到他一鸣惊人,从以前的十二三名跃居到第四名. 不过,所有这些神话,都远不如一个看起来有些愚笨的故事令我感动.

学习的艺术

- 白肥 - 左岸读书_blog
一个男嘉宾刚从后面的背景门后走出来,. 一个女嘉宾就以迅雷不及掩耳盗铃响叮当之势把灯按掉. 主持人问她:姑娘,你怎么这么快就把灯按了呀. 第三,我不喜欢个子矮还穿西装的. 我脑中马上想出一个画面:如果这位姑娘看到敬爱的小平同志的尊荣不知是何反应. 当我们初见一个人、初学一门技艺、初尝试一样新的菜式、或者初到一个陌生的地方、、、、、、.

学习JVM的References

- LightingMan - 淘宝JAVA中间件团队博客
本blog中列举了我学习JVM的references,会不断的更新,为了避免版权问题,就不在blog上提供references的下载了,感兴趣的同学可自行下载或购买,:). |— [ Hotspot GC论文 ]. |— [ 其他JVM GC ]. |— Linux内核源代码情景分析. |— Linux 内核中断内幕.

shell 学习笔记

- tiger - 游戏人生
将脚本目录加到 PATH 中. 在 dash 中如何进行字符串替换. 将 rst 格式文档转换为 blog 可用的 html 代码. shell 脚本虽然不是非常复杂的程序, 但对于首次接触的我来讲, 多少还是有些忌惮. 不过, 接触任何新事物都需要勇敢面对, 逐步树立信心. 我是冲着把脚本写好去的, 所以, 我的目标是能够写出友好, 健壮, 优美的脚本..