论文: LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. “Deep learning.” Nature 521.7553 (): 436-444. [pdf] (Three Giants’ Survey)
监督学习
机器学习最常见的形式,不管是否深入都是监督学习。我们计算一个目标函数,它度量输出分数与期望的分数模式之间的误差(距离)。然后,机器修改其内部可调参数,以减少这种误差。这些可调参数通常称为权重,它们是实数,可以看做是定义机器输入输出函数的按钮。在一个典型的深度学习系统中,可能有数亿个这样的可调权重,以及数亿个用于训练机器的带标签的例子。在实践中,大多数从业者使用一种称为随机梯度下降(SGD)的程序。这包括显示几个示例的输入向量,计算输出和误差,计算这些示例的平均梯度,并相应地调整权重。从训练集到目标函数的平均值停止下降,对许多小样本重复这个过程,它们之所以被称为随机,是因为每个小样本集都给出了所有样本平均梯度的这里会有的噪声的估计。传统方法是手工设计良好的特征提取器,这需要大量的工程技术和专业领域知识。但是如果通过使用通过学习过程而得到的良好的特征,那么这些都是可以避免的了。这就是深度学习的关键优势。深度学习的体系结构是简单模块的多层栈,所有(或大部分)模块的目标是学习,还有许多计算机非线性输入输出的映射。栈中每个模块将其输入进行转换,以增加表达的可选择性和不变性。反向传播来训练多层神经网络
在最早期的模式识别任务中,研究者的目标一直是使用可以训练的多层网络来替代经过人工选择的特征,虽然使用多层神经网络很简单,但得出来的解很糟糕。知道20世纪80年代,使用简单的随机梯度下降来训练多层神经网络,这种糟糕的情况才有所改变。只要网络的输入和内部权值之间的函数相对平滑,使用梯度下降就奏效。计算目标函数相对于多层模块堆栈权重的梯度的反向传播过程只不过是一个导数链式法则的一个实际应用。关键的观点是,目标对模块输入的导数(或)梯度可以通过对该模块输出(或后续模块的输入)的梯度进行反向计算来计算。深度学习型的许多应用使用前馈神经网络体系结构,它学习将固定大小的输入映射到固定大小的输出(例如,每种类别的概率)。为了从一层到另一层,一组单元计算上一层输入的加权和,并将结果传递给一个非线性函数。目前最初欢迎的非线性函数修正线性单元(ReLU)f (z) = max (z, 0)。在过去的几十年,神经网络使用光滑的非线性,如tanh(z)或 sigmoid(1 / (1 + exp (z)))。ReLU通常学习更快的网络有很多层,允许没有无监督pre-training训练的监督网络。不在输入或输出层中的单位通常称为隐藏单元。隐藏层可以看作是非线性的扭曲输入,使得类别可以被最后一层线性分离。在20世纪90年代末,神经网络和反向传播在很大程度上被机器学习社区所抛弃,而被计算机视觉和语音识别社区所忽视。人们普遍认为,学习有用的、多阶段的、几乎没有先验知识的特征提取器是不可行的。特别是,人们普遍认为,简单的梯度下降会陷入局部极小值很差的情况,在这种情况下,任何小的变化都不能减少平均误差。但在实践中,在大型网络中,较差的本地极小值的出现问题是很少的。前后,CIFAR(加拿大高级研究院)研究者们提出了一种非监督的学习方法。这种方法可以创建一些网络层来检测特征而不使用带标签的数据,这些网络层可以用来重构或者对特征检测器的活动进行建模。通过预训练过程,深度网络的权值可以被初始化为有意思的值。然后一个输出层被添加到该网络的顶部,并且使用标准的反向传播算法进行微调。这种预训练方法的第一个主要应用是:语音识别,它是由于快速图形处理单元(gpu)的出现而成为可能,gpu便于编程,并且允许研究人员以10或20倍的速度训练网络。对于较小的数据集,无监督的预训练有助于防止过度拟合。有一种特殊类型的深度前馈网络比相邻层之间完全连接的网络更容易训练和推广,这是卷积神经网络(CNN)。A图:多层神经网络(两个输入单元,两个隐藏单元,一个输出单元)但是用于目标识别或自然语言处理的网络通常包含数十个或者数百个这样的节点。对输入数据进行训练,使得数据(红色和蓝色线表示的样本)线性可分。
B图:链式法则告诉我们两个小的影响(x对y的微小变化,以及y对z的微小变化)之间的联系。x的微小变化量Δx首先会通过乘以∂y/∂x(偏导数)得到y的变化量Δy。类似的,Δy会给z带来变化。也就是Δx通过乘以∂y/∂x和∂z/∂y得到Δz的过程。
C图:具有两个隐层和一个输出层的神经网络中计算前向传播的公式。在每一层上,我们首先计算前一层输出的加权和。然后利用一个非线性函数f(.)来计算节点的输出。
D图:计算反向传播的公式。在隐藏层,我们计算每个单元输出的误差导数,从最开始的误差导数开始算起,从输入层的误差开始算起,然后我们将相对于输出的误差导数,转换为输入的误差导数,方法是乘以它的f()的梯度,在输出层,通过对成本函数的微分来计算对于单位输出的误差的导数。
卷积神经网络
卷积神经网络被设计用来处理到多维数组数据的。很多数据形态都是这种多维数组的:1D用来表示信号和序列包括语言,2D用来表示图像或者声音,3D用来表示视频或者有声音的图像。卷积神经网络的基本概念:卷积层得到特征,卷积核的尺度以及个数对模型效果也有一定的影响;对卷积的结果进行非线性函数的处理,目前常用的是ReLU;激活函数对结果此话操作,取区域的最大值或者平均值,目的是来保留其显著的特征,来提升我们对畸变的容忍能力;全连接表示对结果的输出和确认;卷积神经网络减少参数秘密: **CNN提取重要特征,使得模型大量的减少参数,提高效率,减低计算复杂度。**如果直接拆分图片作为全连接层的数量,计算量是超级大。卷积神经网络被设计用来处理多个数组形式的数据,它使用4个关键的想法来利用自然信号的属性:局部连接、权值共享、池化以及多网络层的使用。在特征图中,每一个单元通过一组叫做滤波器的权值被连接到上一层的特征图的一个局部块,然后,这个局部加权和被传给一个非线性函数,比如ReLU。在一个特征图中的全部单元享用相同的过滤器,不同层的特征图使用不同的过滤器。使用这种结构处于两方面的原因:1)在数组数据中,比如图像数据,一个值的附近的值经常是高度相关的,可形成比较容易被探测到的有区分性的局部特征。2)不同位置局部统计特征不太相关的,换句话说,在一个地方出现的某个特征,也可能出现在别的地方,因此,不同位置的单元可以共享权值以及可以探测相同的样本。在数学上,这种由一个特征图执行的过滤操作是一个离散的卷积,卷积神经网络也是这么得名来的。由于构成主题的特征的相对位置可能有所不同,因此可以通过粗粒化每个特征的位置来可靠地检测主题。深度神经网络利用的很多自然信号是层级组成的属性,在这种属性中高级的特征是通过对低级特征的组合来实现的。自本世纪初以来,卷积神经网络在图像中对目标和区域的检测、分割和识别方面取得了很大的成功。重要的是,图像可以在像素级进行标记,这将在技术上得到应用。图2 卷积神经网络内部
应用于Samoyed狗图像的典型卷积网络结构的每一层(水平方向)的输出(而不是过滤器);和RGB(红,绿,蓝)输入,右下角。每个矩形图像都是一个特征映射,对应于在图像的每个位置检测到的一个已知特征的输出。信息自底向上流动,低层特征作为面向边缘的检测器,并在输出中计算每个图像类的得分。ReLU,纠正线性单元。
使用深度卷积网络进行图像理解
尽管取得了这些成功,但直到的ImageNet大赛,convnet在很大程度上还是被主流的计算机视觉和机器学习社区所抛弃。主要是因为来自有效地利用了GPU、ReLU、一个新的被称为dropout的正则技术,以及通过分解现有样本产生更多训练样本的技术。Dropout正则化介绍:(1)大型网络但是数据集缺少的时候可以使用dropout防止过拟合,对于小型网络或者说不缺数据集的网络不推荐使用。(2)dropout使用:input 的dropout概率推荐是0.8, hidden layer 推荐是0.5, 但是也可以在一定的区间上取值。(3)dropout缺点:明显增加训练时间,因为引入dropout之后相当于每次只是训练的原先网络的一个子网络,为了达到同样的精度需要的训练次数会增多。(4)dropout优点:防止过拟合。如今,卷积神经网络用于几乎全部的识别和探测任务中。最近一个更好的成果是,利用卷积神经网络+循环神经网络 用来产生图像标题。卷积神经网络很容易在芯片或者现场可编程门阵列(FPGA)中高效实现。图3 从图像到文字
将深度卷积神经网络(CNN)从测试图像中提取的表征作为额外输入,训练RNN将图像的高级表示法“翻译”为标题(top)。当RNN在生成每个单词(粗体)时,它能够将注意力集中在输入图像中的不同位置时,我们发现它利用这一点来更好地将图像“翻译”成字幕。
分布式表示和语言处理
深度学习理论表明,与不使用分布式表示的传统学习算法相比,深度网络具有两种不同的指数级的优势:**学习分布式表示使泛化成为学习特征值的新组合,超出了在训练期间看到的值。(比如,n元特征就有2n种可能的组合);在深层网络中构成表示法层可能带来另一个指数级的优势(指数级的深度)。**这两个优点都源于组合的强大功能,并且依赖于具有适当组件结构的底层数据生成分布。**多层神经网络中的隐藏层利用网络中输入的数据进行特征学习,使之更加容易预测目标输出。**在第一层,每个单词创建一个不同的激活状态,或单词向量(图4)。图4 词向量学习可视化
左图:一个为建模语言学习的单词表示,使用t-SNE算法将非线性投影到2D以进行可视化。右图:一个由英法编码器译码器循环神经网络学习的短语的二维表示。
可以观察到,语义相似的单词或单词序列映射到附近的表示。分布式表征词是通过使用反向传播,共同学习每个词的表示一个函数,预测目标数量等下一个单词在一个序列(语言模型)或整个序列的翻译词(机器翻译)。
在语言模型中,**网络的其他层学习将输入的单词向量转换为预测的下一个单词的输出单词向量,**该向量可用于预测词汇表中任何单词作为下一个单词出现的概率。**这些语义特征在输入中没有显式地显示出来。它们是通过学习过程发现的,是将输入和输出符号之间的结构化关系分解为多个“微规则”的好的方式。**当单词序列来自真实文本的大型语料库且单个的微观规则不可靠时,学习单词向量的效果也很好。例如,当被训练预测新闻故事中的下一个单词时,周二和周三所学的单词向量非常相似,瑞典和挪威的单词向量也是如此。从文本中学习单词的向量表示现在在自然语言应用中得到了广泛的应用。表征问题是认知的逻辑启发范式和神经网络启发范式之间争论的核心。在引入神经语言模型之前,语言统计建模的标准方法并没有利用分布式表示:而是基于统计简短符号序列出现的频率增长到N(N-grams,N元文法)。(图4)
循环神经网络
当反向传播首次被引入时,它最令人兴奋的用途是训练递归神经网络(RNNs)。包括顺序输入、语音和语言等任务,通常最好使用RNNs(图5)。RNNs过程输入序列的一个元素,保持隐藏单位的状态向量,隐式地包含所有过去的历史信息的元素序列。
图5:一种递归神经网络,其正演计算中所涉及的计算在时间上的展开。
人工神经元(例如,在节点st下分组的隐藏单元,在t时间的值为st)在之前的时间步得到其他神经元的输入(这用黑色方块表示的,左边表示一个时间步的延迟)。这样,循环神经网络可以将输入序列与元素xt映射到一个带有元素ot的输出序列中,每个元素都依赖于前一个xtʹ(tʹ≤t)。每一步都使用相同的参数(矩阵U, V, W)。许多其他体系结构都是可能的,包括网络可以生成输出序列(例如单词)的变体,其中每个输出都用作下一个时间步的输入。反向传播算法(图1)可以直接应用于右侧展开网络的计算图,计算总误差的导数(例如,生成正确的输出序列的对数概率)以及所有的状态st和所有参数。
如果是深度多层网络不同神经元的输出,我们就会考虑这种在不同离散时间步长的隐式单元的输出,我们就清楚了如何应用反向传播来训练RNNs。RNNs是非常强大的动态系统,但事实证明对它们进行训练是有问题的,因为反向传播的梯度在每个时间步长时要么增长要么收缩,所以在很多时间步长时,它们通常会爆炸或消失。第一个提议是**长短记忆( LSTM:long short-term memory network)**网络,它使用特殊的隐藏单元,其自然行为是长时间记住输入。LSTM网络后来被证明比传统的RNNs更有效,特别是当它们在每个时间步长都有多个层时,使得整个语音识别系统能够从声学一直到转录中的字符序列。目前LSTM网络或者相关的门控单元同样用于编码和解码网络,并且在机器翻译中表现良好。在过去的一年里,一些作者提出了不同的建议,用内存模块来增强RNNs。除了简单的记忆,神经图灵机和记忆网络被用于通常需要推理和符号操作的任务。还可以教神经图灵机学习“算法”。除了简单的记忆,神经图灵机和记忆网络被用于通常需要推理和符号操作的任务。神经图灵机器可以学习“算法”。
深度学习的未来
人类 和 动物的学习在很大程度上是不受监督的:我们通过观察世界来发现世界的结构,而不是通过被告知每个物体的名称。所以,无监督学习从长远来看会变得更加重要!
目前无监督学习的光芒已经盖过监督学习,即使本篇论文没有提及太多关于无监督学习的内容。最终,人工智能的重大进展将通过将 表征学习 与 复杂推理 相结合的系统实现。虽然深度学习和简单推理已经在语音和手写识别中应用了很长一段时间,但是需要新的范式来取代基于规则的符号表达式操作,代之以对大向量的操作,还需要很长一段路要走。
——当你每天时间利用不充分时,那就是最危险的时候。