具有启发性的十种深度学习方法

 不管是AI也好,其他学科也好,学习、研究的过程中不断反思学科的历史,总结学科的发展现状,找出重要的理念,总能让人能“吾道一以贯之”。软件工程师James Le近期根据他研究的经验总结出了AI研究必须要知道的十种深度学习方法,非常具有启发性。

The 10 Deep Learning Methods AI Practitioners Need to Apply

  人们对机器学习的兴趣在过去十年经历了爆炸式的发展。计算机科学项目中、业界会议中、媒体报道中,你都能够看到机器学习的影子。但是似乎所有关于机器学习的讨论中,人们常常会把AI能做什么和他们希望AI能做什么混为一谈。

  从根本上来讲,机器学习其实就是使用算法从原始数据中提取信息,并以某种类型的模型表示出来;然后我们使用这个模型来推断我们尚未建模的其他数据。

  神经网络作为机器学习的一类模型,它们已经存在了至少50年。神经网络的基本单元是节点,大致上模仿了哺乳动物大脑中的生物神经元的节点;节点之间的链接(也是模仿生物大脑)随着时间的推移(训练)而演化。

  在上世纪八十年代中期和九十年代早期,许多重要的神经网络构架都已经做出了,不过要想获得好的结果还需要足够强大的计算能力和大体量的数据集,这些当时在当时很不理想,所以也导致人们对机器学习的热情逐渐冷淡了下来。在21世纪初,计算机的计算能力呈现了指数级的增长——业界见证了计算机技术的“寒武纪大爆发”,这在之前几乎是不可想象的。深度学习作为这个领域中一个重要的架构,在计算能力爆发式增长的十年中,赢得了许多重要的机器学习竞赛。这个红利的热度直到今年仍未降温;今天,我们看到在机器学习的每个角落里都会提到深度学习。

  为了更深入地了解这些,我参加了一门“深度学习”课程,并开发了一个图像识别的神经网络以及基于循环神经网络(RNN)和长短项记忆(LSTM)的自然语言处理。可以去我的Github仓库中查看这些代码:

  https://github.com/khanhnamle1994/deep-learning

  最近,我也开始阅读一些深度学习方面的学术论文。下面这些是我收集到的几篇对深度学习领域的发展有重大影响的几篇论文:

1、Gradient-Based Learning Applied to Document Recognition (1998)

  意义:向机器学习世界引进了卷积神经网络

  作者:Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner

2、Deep Boltzmann Machines (2009)

  意义:为玻尔兹曼机提出了一种新的学习算法,其中包含许多隐藏变量层。

  作者:Ruslan Salakhutdinov, Geoffrey Hinton

3、Building High-Level Features Using Large-Scale Unsupervised Learning (2012)

  意义:解决了仅从未标记的数据构建高层次、特定类别的特征检测器的问题。

  作者:Quoc V. Le,Marc’Aurelio Ranzato,Rajat Monga,Matthieu Devin,Kai Chen,Greg S. Corrado,Jeff Dean,Andrew Y. Ng

4、DeCAF — A Deep Convolutional Activation Feature for Generic Visual Recognition (2013)

  意义:释放了一个深度卷积激活特征的开源实现——DeCAF,以及所有相关的网络参数,使视觉研究人员能够深入地在一系列视觉概念学习范例中进行实验。

  作者:Jeff Donahue,Yangqing Jia,Oriol Vinyals,Judy Hoffman,Ning Zhang,Eric Tzeng,Trevor Darrell

5、Playing Atari with Deep Reinforcement Learning (2016)

  意义:提供了第一个可以使用强化学习从高维感官输入中直接学习控制策略的深度学习模型。

  作者:Volodymyr Mnih,Koray Kavukcuoglu,David Silver,Alex Graves,Ioannis Antonoglou,Daan Wierstra,Martin Riedmiller(DeepMind 团队)

  在这些学习和研究中,我发现大量非常有意思的知识点。在这里我将分享十个深度学习的方法,AI工程师可能会将这些应用到他们的机器学习问题当中。

  不过,首先先让我们来定义一下什么是“深度学习”。对很多人来说,给“深度学习”下一个定义确实很有挑战,因为在过去的十年中,它的形式已经慢慢地发生了很大的变化。

  先来在视觉上感受一下“深度学习”的地位。下图是AI、机器学习和深度学习三个概念的一个关系图。

  AI的领域要相对较广泛,机器学习是AI的一个子领域,而深度学习是机器学习领域中的一个子集。

  深度学习网络与“典型”的前馈多层网络之间是有一些区别的,如下:

  深度学习网络比之前的网络有更多的神经元

  深度学习网络具有更复杂的连接层的方式

  深度学习网络需要用强大的计算能力来训练

  深度学习网络能够进行自动特征提取

  因此深度学习可以被定义为在以下四个基本网络框架中拥有大量参数和层的神经网络:

  无监督预训练网络(Unsupervised Pre-trained Networks)

  卷积神经网络(Convolutional Neural Networks)

  循环神经网络(Recurrent Neural Networks)

  递归神经网络 (Recursive Neural Networks)

  在这篇文章中,我主要对后三个框架比较感兴趣。

  卷积神经网络 基本上就是用共享权重在空间中进行扩展的标准神经网络。设计CNN主要是为了通过内部卷积来识别图片,内部卷积可以看到待识别物体的边。

  循环神经网络 基本上是在时间上进行扩展的标准神经网络,因为边进入下一个时间步,而不是在同一时间步进入下一个层。设计RNN主要是为了识别序列,例如语音信号或者文本。它里面的循环意味着网络中存在短暂的记忆。

  递归神经网络 更类似于分层网络,其中输入序列没有真正的时间面,而是输入必须以树状方式分层处理。

以下10种方法可以应用于所有这些体系结构。

  1、反向传播

  反向传播是“误差反向传播”的简称,它是一种计算函数(在神经网络中以函数形式存在)偏微分的方法。当你要用一个基于梯度的方法来解决一个最优问题时(注意梯度下降只是解决这类问题的一种方法),你希望在每一次迭代中计算函数梯度。

  对于神经网络而言,目标函数具有合成的形式。那么如何计算梯度呢?一般情况下有两种常见的方法:

  微分分析法。当你知道这个函数的形式时,你只需要用链式法则计算导数即可;

  用有限差分方法来近似微分。这种方法的计算量很大,因为函数评估的数量是O(N),其中N是参数的数量。与微分分析法相比,这是比较昂贵的。不过,有限差分通常在调试时验证后端实现。

  2、随机梯度下降

  一个直观理解梯度下降的方法是去想象一条溯源山顶的河流。这条河流会沿着山势梯度的方向流向山麓下的最低点。

  如果让人来走,可能就不一样了,你可能会先随便选一个方向,然后沿着这个方向的梯度向下走;过一会儿再随机换一个方向向下走;最后你发现自己差不多也到了谷底了。

  数学化的理解就是:

  随机梯度下降主要用来求解类似于如下求和形式的优化问题:

  梯度下降法:

  当n很大时,每次迭代计算所有的梯度会非常耗时。

  随机梯度下降的想法就是每次在Delta f_i 中随机选取一个计算代替上面的Delta f_i,以这个随机选取的方向作为下降的方向。这样的方法反而比梯度下降能够更快地到达(局部)最优解。

  3、学习率衰减

  在训练模型的时候,通常会遇到这种情况:我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learning rate),但是训练集的损失下降到一定的程度后就不在下降了,比如training loss一直在0.7和0.9之间来回震荡,不能进一步下降。如下图所示:

  遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。

  学习率衰减(learning rate decay)就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。

  学习率衰减基本有两种实现方法:

  线性衰减。例如:每过5个epochs学习率减半;

  指数衰减。例如:每过5个epochs将学习率乘以0.1。

  4、dropout

  在当前的大规模神经网络中有两个缺点:

  费时;

  容易过拟合

  Dropout 可以很好地解决这个问题。Dropout说的简单一点就是在前向传导的时候,让某个神经元的激活值以一定的概率p停止工作,示意图如下:

  每次做完dropout,相当于从原始的网络中找到一个更瘦的网络。

  Hinton在其论文中做了这样的类比,无性繁殖可以保留大段的优秀基因,而有性繁殖则将基因随机拆了又拆,破坏了大段基因的联合适应性;但是自然选择了有性繁殖,物竞天择,适者生存,可见有性繁殖的强大。dropout 也能达到同样的效果,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,消除减弱了神经元节点间的联合适应性,增强了泛化能力。

  5、max pooling

  池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的向下采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。

  直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

  6、批标准化

  包括深度网络在内的神经网络需要仔细调整权重初始化和学习参数。批标准化使这些变得轻松许多。

  权重问题:

  无论权重的初始化如何,是随机的还是经验性的选择,它们离学习权重都会很远。考虑一个小批量,初期在所需的特征激活方面会有很多异常值。

  深层神经网络本身是病态的,初始层中的微小扰动都会导致后面层的非常大的变化。

  在反向传播过程中,这些现象会导致梯度弥散。这就意味着在学习权重产生所需要的输出前,必须对梯度的异常值进行补偿,这将导致需要额外的时段来收敛。

  批量归一化使这些梯度从分散到正常值并在小批量范围内流向共同目标(通过归一化)。

  学习率问题:一般来说,学习率需要保持较低的值,使得只有一小部分的梯度来校正权重,原因是要使异常激活的梯度不影响已学习到的激活。通过批量标准化,可以减少这些异常激活,因此也就可以使用更高的学习率来加速学习过程。

  7、long short-term memory

  LSTM网络具有以下三个方面,使其与循环神经网络中的常见神经元不同:

  它能够决定何时让输入进入神经元;

  它能够决定何时记住上一个时间步中计算的内容;

  它决定何时让输出传递到下一个时间步。

  LSTM的美妙之处在于它能够根据当前的输入本身来决定所有这些。 所以你看下面的图表:

  当前时间的输入信号x(t)决定所有上述3个点。 输入门决定点1,遗忘门决定点2,输出门决定点3。任何一条输入都能够采取所有这三个决定。这种设计其实是受到了我们大脑如何工作的启发,并且可以基于输入来处理突然的上下文切换。

  8、skip-gram

  词嵌入模型的目标是为每个词项学习一个高维密集表示,其中嵌入向量之间的相似性显示了相应词之间的语义或句法相似性。 Skip-gram是一个学习词嵌入算法的模型。

  skip-gram模型(以及许多其他的词语嵌入模型)背后的主要思想如下:两个词项相似,如果它们共享相似的上下文。

  换句话说,假设你有一个句子,例如“猫是哺乳动物”;如果你用“狗”而不是“猫”,这个句子还是一个有意义的句子。因此在这个例子中,“狗”和“猫”可以共享相同的上下文(即“是哺乳动物”)。

  基于上述假设,你可以考虑一个上下文窗口(一个包含k个连续项的窗口),然后你跳过其中一个单词,试着去学习一个能够得到除跳过项外的所有项的神经网络,并预测跳过的这个项。如果两个词在一个大语料库中反复共享相似的语境,则这些词的嵌入向量将具有相近的向量。

  9、连续词袋

  在自然语言处理问题中,我们希望学习将文档中的每个单词表示为一个数字的向量,使得出现在相似的上下文中的单词具有彼此接近的向量。在连续的单词模型中,目标是能够使用围绕特定单词的上下文并预测特定单词。

  我们通过在一个大的语料库中采取大量的句子来做到这一点,每当我们看到一个单词时,我们就提取周围的单词。 然后,我们将上下文单词输入到一个神经网络,并预测在这个上下文中间的单词。

  当我们有成千上万个这样的上下文单词和中间词时,我们就有一个神经网络数据集的实例。 我们训练神经网络,最后编码的隐藏层输出表示了特定单词的嵌入。 恰巧,当我们对大量的句子进行训练时,类似语境中的单词得到相似的向量。

  10、迁移学习

  让我们想一下如何在CNN中处理一张图片。假设有一张图片,你对它进行卷积处理,然后你得到的输出是像素的组合,我们姑且称之为“边”吧。我们再次使用卷积,这时候你得到的输出将是边的组合,我们称之为“线”。如果再次使用卷积,那么你将得到线的组合,等等。

  每一层都是在寻找相应的特定模式。你的神经网络最后一层一般会给出非常特定的模式。也许你在处理ImageNet,你的网络最后一层可能是在找孩子、狗或飞机或别的任何东西。如果你向前两层看,网络可能是在找眼睛、耳朵、嘴巴或者轮子。

  深度卷积神经网络中的每一层的深入都是在构建越来越高层次的特征表示。最后两层会产生你输入模型的数据中的特定模式。换句话说,早期的层提取的特征则广泛得多,在提取的大量的类中有很多简单的模式。

  迁移学习就是当你用一个数据集训练CNN时,砍掉最后的一(些)层,再用另一个不同的数据集重新训练最后一(些)层的模型。直观地说,你在重新训练模型来识别不同的高级层次特征。作为结果,训练时间大幅减少。所以当你没有足够的数据或者训练的资源时,迁移学习是非常有用的一个工具。

  这篇文章只是展示了这些方法的一般概述。我建议阅读下面这些文章以获得对这些概念更详细的解释:

  Andrew Beam’s “Deep Learning 101

  Andrey Kurenkov’s “A Brief History of Neural Nets and Deep Learning

  Adit Deshpande’s “A Beginner’s Guide to Understanding Convolutional Neural Networks

  Chris Olah’s “Understanding LSTM Networks

  Algobean’s “Artificial Neural Networks

  Andrej Karpathy’s “The Unreasonable Effectiveness of Recurrent Neural Networks

  深度学习非常注重技术,而对每一个新的想法却没有太多具体的解释。大多数新的idea只是用实验结果来证明它们的工作。深度学习就像玩乐高,掌握它有一定的挑战性,但是入门还是很容易的。

原文发布于微信公众号 - 机器人网(robot_globalsources)

原文发表时间:2017-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CreateAMind

光流flownet2视频介绍及代码 及两篇中文文章

http://blog.csdn.net/hysteric314/article/details/50529804

5082
来自专栏机器学习从入门到成神

BAT机器学习面试1000题系列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

5690
来自专栏大数据挖掘DT机器学习

文本挖掘:语义分析的一些方法

语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。 1 文本基本处理 在讲文本语义分析之前,我们先说下文本基本处理,因为它构成了语义分析...

6346
来自专栏大数据挖掘DT机器学习

挖掘算法&模型

原文:一只鸟的天空(http://blog.csdn.net/heyongluoyao8) 在进行数据挖掘时,首先要进行商业理解,即我们需要...

3997
来自专栏AI研习社

做AI必须要知道的十种深度学习方法

不管是AI也好,其他学科也好,学习、研究的过程中不断反思学科的历史,总结学科的发展现状,找出最重要的理念,总能让人能“吾道一以贯之”。软件工程师James Le...

3755
来自专栏SnailTyan

Going Deeper with Convolutions——GoogLeNet论文翻译——中文版

Going Deeper with Convolutions 摘要 我们在ImageNet大规模视觉识别挑战赛2014(ILSVRC14)上提出了一种代号为In...

5490
来自专栏机器之心

深度 | 一文概览图卷积网络基本结构和最新进展

选自tkipf.github 作者:Thomas Kipf 机器之心编译 参与:李诗萌、刘晓坤 本文介绍了图卷积网络的基本结构,和最新的研究进展,并指出了当前...

4419
来自专栏机器学习原理

机器学习(14)——朴素贝叶斯算法思想:基于概率的预测贝叶斯公式朴素贝叶斯算法示例:文本数据分类

前言:在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,...

1.8K4
来自专栏机器之心

学界 | Bengio等人提出图注意网络架构GAT,可处理复杂结构图

3388
来自专栏机器之心

全面解读用于文本特征提取的神经网络技术:从神经概率语言模型到GloVe

选自arXiv 作者:Vineet John 机器之心编译 参与:吴攀、李亚洲、蒋思源 文本特征提取是自然语言处理的核心问题之一,近日,加拿大滑铁卢大学的 Vi...

4538

扫码关注云+社区

领取腾讯云代金券