The 10 Deep Learning Methods AI Practitioners Need to Apply

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

做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、反向传播

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

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

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

2)用有限差分方法来近似微分。
这种方法的打算量很大,由于函数评估的数量是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网络具有以下三个方面,使其与循环神经网络中的常见神经元不同:

1)它能够决定何时让输入进着迷经元;

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

3)它决定何时让输出通报到下一个韶光步。

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只是用实验结果来证明它们的事情。
深度学习就像玩乐高,节制它有一定的寻衅性,但是入门还是很随意马虎的。

via towardsdatascience,雷锋网编译