深度网络概览

From Ufldl

Jump to: navigation, search
(局部极值问题)
(局部极值问题)
 
Line 1: Line 1:
-
深度网络概览
 
==概述==
==概述==
-
在之前的章节中,你已经构建了一个包括输入层、隐层以及输出层的三层神经网络。虽然该网络对于MNIST手写数字数据库非常有效,但是它还是一个非常“浅”的网络。这里的“浅”指的是特征(隐藏层的激活值 <math>\textstyle a^(2)</math>)只是用一层计算单元(隐藏层)来得到的。
+
在之前的章节中,你已经构建了一个包括输入层、隐藏层以及输出层的三层神经网络。虽然该网络对于MNIST手写数字数据库非常有效,但是它还是一个非常“浅”的网络。这里的“浅”指的是特征(隐藏层的激活值 <math>\textstyle {a}^{(2)}</math>)只使用一层计算单元(隐藏层)来得到的。
-
在本节中,我们开始讨论深度神经网络,即含有多个隐藏层的神经网络。通过引入深度网络,我们可以计算更多复杂的输入特征。因为每一层隐层可以对上一层的输出进行非线性变换,因此深度神经网络拥有比“浅层”网络更加优异的表达能力(例如可以学习到更加复杂的函数关系)。
+
在本节中,我们开始讨论深度神经网络,即含有多个隐藏层的神经网络。通过引入深度网络,我们可以计算更多复杂的输入特征。因为每一个隐藏层可以对上一层的输出进行非线性变换,因此深度神经网络拥有比“浅层”网络更加优异的表达能力(例如可以学习到更加复杂的函数关系)。
值得注意的是当训练深度网络的时候,每一层隐层应该使用非线性的激活函数 <math>\textstyle f(x)</math>。这是因为多层的线性函数组合在一起本质上也只有线性函数的表达能力(例如,将多个线性方程组合在一起仅仅产生另一个线性方程)。因此,在激活函数是线性的情况下,相比于单隐藏层神经网络,包含多隐藏层的深度网络并没有增加表达能力。
值得注意的是当训练深度网络的时候,每一层隐层应该使用非线性的激活函数 <math>\textstyle f(x)</math>。这是因为多层的线性函数组合在一起本质上也只有线性函数的表达能力(例如,将多个线性方程组合在一起仅仅产生另一个线性方程)。因此,在激活函数是线性的情况下,相比于单隐藏层神经网络,包含多隐藏层的深度网络并没有增加表达能力。
 +
==深度网络的优势==
==深度网络的优势==
-
为什么我们要使用深度网络呢?使用深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合。正式点说,我们可以找到一些函数,这些函数可以用 <math>\textstyle k</math>层网络简洁地表达出来(这里的简洁是指隐层单元的数目只需与输入单元数目呈多项式关系)。但是对于一个只有 <math>\textstyle k-1 </math>层的网络而言,除非它使用与输入单元数目呈指数关系的隐层单元数目,否则不能简洁表达这些函数。
+
为什么我们要使用深度网络呢?使用深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合。正式点说,我们可以找到一些函数,这些函数可以用 <math>\textstyle k</math> 层网络简洁地表达出来(这里的简洁是指隐层单元的数目只需与输入单元数目呈多项式关系)。但是对于一个只有 <math>\textstyle k-1 </math> 层的网络而言,除非它使用与输入单元数目呈指数关系的隐层单元数目,否则不能简洁表达这些函数。
-
举一个简单的例子,比如我们打算构建一个布尔网络来计算n个输入比特的奇偶校验码(或者进行异或运算)。假设网络中的每一个节点都可以进行逻辑“或”运算(或者“与非”运算),亦或者逻辑“与”运算。如果我们拥有一个仅仅由一个输入层、一个隐层以及一个输出层构成的网络,那么该奇偶校验函数所需要的节点数目与输入层的规模 <math>\textstyle n</math>呈指数关系。但是,如果我们构建一个更深点的网络,那么这个网络的规模就可做到仅仅是 <math>\textstyle n</math>的多项式函数。
+
举一个简单的例子,比如我们打算构建一个布尔网络来计算 <math>\textstyle n</math> 个输入比特的奇偶校验码(或者进行异或运算)。假设网络中的每一个节点都可以进行逻辑“或”运算(或者“与非”运算),亦或者逻辑“与”运算。如果我们拥有一个仅仅由一个输入层、一个隐层以及一个输出层构成的网络,那么该奇偶校验函数所需要的节点数目与输入层的规模 <math>\textstyle n</math> 呈指数关系。但是,如果我们构建一个更深点的网络,那么这个网络的规模就可做到仅仅是 <math>\textstyle n</math> 的多项式函数。
-
当处理对象是图像时,我们能够使用深度网络学习到“部分-整体”的分解关系。例如,第一层可以学习将图像中的像素如何组合在一起来检测边缘(正如我们在前面的练习中做的那样)。第二层可以将边缘组合起来检测更长的轮廓或者简单的“目标的部件”。在更深的层次上,可以将这些轮廓进一步组合起来以检测更为复杂的特征。
+
当处理对象是图像时,我们能够使用深度网络学习到“部分-整体”的分解关系。例如,第一层可以学习如何将图像中的像素组合在一起来检测边缘(正如我们在前面的练习中做的那样)。第二层可以将边缘组合起来检测更长的轮廓或者简单的“目标的部件”。在更深的层次上,可以将这些轮廓进一步组合起来以检测更为复杂的特征。
-
最后要提的一点是,大脑皮层进行的计算同样是分多层进行的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的V1区,然后紧跟着进入大脑皮层V2区,以此类推。
+
最后要提的一点是,大脑皮层同样是分多层进行计算的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的“V1”区,然后紧跟着进入大脑皮层“V2”区,以此类推。
 +
 
==训练深度网络的困难==
==训练深度网络的困难==
虽然几十年前人们就发现了深度网络在理论上的简洁性和较强的表达能力,但是直到最近,研究者们也没有在训练深度网络方面取得多少进步。
虽然几十年前人们就发现了深度网络在理论上的简洁性和较强的表达能力,但是直到最近,研究者们也没有在训练深度网络方面取得多少进步。
-
问题原因在于研究者们主要使用的学习算法是:首先随机初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集 <math>\textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {{m}_{l}} \right)},{{y}^{\left( {{m}_{l}} \right)}} \right) \right\}</math> 上进行训练。例如通过使用梯度下降法来降低训练误差。然而,这种方法通常不是十分奏效。这其中有如下几方面原因。
+
问题原因在于研究者们主要使用的学习算法是:首先随机初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集 <math>\textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {{m}_{l}} \right)},{{y}^{\left( {{m}_{l}} \right)}} \right) \right\}</math> 上进行训练。例如通过使用梯度下降法来降低训练误差。然而,这种方法通常不是十分奏效。这其中有如下几方面原因:
 +
 
===数据获取问题===
===数据获取问题===
-
使用上面提到的方法,我们需要依赖于有标签的数据进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的参数。例如,考虑到深度网络具有强大的表达能力,在不充足的数据上进行训练将会导致过拟合。
+
使用上面提到的方法,我们需要依赖于有标签的数据才能进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的参数。例如,考虑到深度网络具有强大的表达能力,在不充足的数据上进行训练将会导致过拟合。
 +
 
===局部极值问题===
===局部极值问题===
-
使用监督学习方法来对浅层网络(有一个隐藏层)进行训练通常能够使参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并不能取得很好的效果。特别的,使用监督学习方法训练神经网络时,通常会涉及到求解一个高度非凸的优化问题(例如最小化训练误差 <math>\textstyle \sum\nolimits_{i}{||{{h}_{W}}\left( {{x}^{\left( i \right)}}-{{y}^{\left( i \right)}} \right)|{{|}^{2}}}</math>,其中参数 <math>\textstyle W</math>是要优化的参数。对深度网络而言,这种非凸优化问题的搜索区域中充斥着大量“坏”的局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)效果并不好。
+
使用监督学习方法来对浅层网络(只有一个隐藏层)进行训练通常能够使参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并不能取得很好的效果。特别的,使用监督学习方法训练神经网络时,通常会涉及到求解一个高度非凸的优化问题(例如最小化训练误差 <math>\textstyle \sum\nolimits_{i}{||{{h}_{W}}\left( {{x}^{\left( i \right)}} \right)-{{y}^{\left( i \right)}}|{{|}^{2}}}</math>,其中参数 <math>\textstyle W</math> 是要优化的参数。对深度网络而言,这种非凸优化问题的搜索区域中充斥着大量“坏”的局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)效果并不好。
-
==梯度弥散问题==
+
===梯度弥散问题===
梯度下降法(以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”.
梯度下降法(以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”.
-
与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,用随机初始化的方式来训练整个网络所能得到的性能,就和用一些被损坏的输入(这是最初几层干的好事)来训练一个仅由最后几层构成的浅层网络差不多。
+
与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。
 +
 
==逐层贪婪训练方法==
==逐层贪婪训练方法==
-
那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是取得一定成功的方法。我们会在后面的章节中详细阐述这种方法的细节。简单来说,逐层贪婪算法的主要思路是每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,我们把已经训练好的前 <math>\textstyle k-1 </math> 层固定,然后增加第 <math>\textstyle k </math> 层(也就是将我们已经训练好的前 <math>\textstyle k-1 </math >的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但更通常使用无监督方法(例如自动编码器,我们会在后边的章节中给出细节)。这些各层单独训练所得到的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(即把所有层放在一起来优化有标签训练集上的训练误差).
+
那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是取得一定成功的一种方法。我们会在后面的章节中详细阐述这种方法的细节。简单来说,逐层贪婪算法的主要思路是每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,我们把已经训练好的前 <math>\textstyle k-1 </math> 层固定,然后增加第 <math>\textstyle k </math> 层(也就是将我们已经训练好的前 <math>\textstyle k-1 </math> 的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但更通常使用无监督方法(例如自动编码器,我们会在后边的章节中给出细节)。这些各层单独训练所得到的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(即把所有层放在一起来优化有标签训练集上的训练误差).
逐层贪婪的训练方法取得成功要归功于以下几方面:
逐层贪婪的训练方法取得成功要归功于以下几方面:
-
==数据获取==
 
-
虽然获取有标签数据的代价是昂贵的,但获取大量的无标签数据是容易的。自学习方法(self-taught learning)的潜力在于它能通过使用大量的无标签数据来学习到更好的模型。具体而言,该方法使用无标签数据来学习得到所有层(不包括用于预测标签的最终分类层)<math>\textstyle {{W}^{\left( l \right)}}</math> 的最佳初始权重。相比纯监督学习方法,这种自学习方法能够利用多得多的数据,并且能够学习和发现数据中存在的模式。因此该方法通常能够提供分类器的性能。
+
===数据获取===
 +
虽然获取有标签数据的代价是昂贵的,但获取大量的无标签数据是容易的。自学习方法(self-taught learning)的潜力在于它能通过使用大量的无标签数据来学习到更好的模型。具体而言,该方法使用无标签数据来学习得到所有层(不包括用于预测标签的最终分类层)<math>\textstyle {{W}^{\left( l \right)}}</math> 的最佳初始权重。相比纯监督学习方法,这种自学习方法能够利用多得多的数据,并且能够学习和发现数据中存在的模式。因此该方法通常能够提高分类器的性能。
-
==更好的局部极值==
 
-
当用无标签数据训练完网络后,相比于随机初始化而言,各层初始权重会位于参数空间中较好的位置上。然后我们可以从这些位置出发进一步微调权重。从经验上来说,以这些位置为起点开始梯度下降更有可能收敛到好的局部极值点,这是因为无标签数据已经提供了大量关于输入数据中包含模式的先验信息。
+
===更好的局部极值===
 +
 
 +
当用无标签数据训练完网络后,相比于随机初始化而言,各层初始权重会位于参数空间中较好的位置上。然后我们可以从这些位置出发进一步微调权重。从经验上来说,以这些位置为起点开始梯度下降更有可能收敛到比较好的局部极值点,这是因为无标签数据已经提供了大量输入数据中包含的模式的先验信息。
Line 63: Line 68:
 +
==中英文对照==
 +
:深度网络 Deep Networks
 +
:深度神经网络  deep neural networks
-
初译: 郑胤        新浪微博:@郑胤THU      email:yzheng3xg@gmail.com,
+
:非线性变换  non-linear transformation
-
一审:谭晓阳      新浪微博:@谭晓阳_南航
+
:激活函数  activation function
 +
:简洁地表达  represent compactly
 +
:“部分-整体”的分解  part-whole decompositions
-
Wiki上传者:郑胤  新浪微博:@郑胤THU      email:yzheng3xg@gmail.com
+
:目标的部件  parts of objects
 +
:高度非凸的优化问题    highly non-convex optimization problem
-
{{Overview}}
+
:共轭梯度    conjugate gradient
-
{{概述}}
+
 +
:梯度的弥散    diffusion of gradients
-
:【原文】:
+
:逐层贪婪训练方法  Greedy layer-wise training
-
In the previous sections, you constructed a 3-layer neural network comprising an input, hidden and output layer. While fairly effective for MNIST, this 3-layer model is a fairly shallow network; by this, we mean that the features (hidden layer activations a(2)) are computed using only "one layer" of computation (the hidden layer)
+
-
:【初译】:
+
-
在之前的章节中,你已经构建了一个包括输入层、隐层以及输出层的三层神经网络。虽然该网络对于MNIST数据库非常有效,但是它还是一个非常“浅”的网络。这里的“浅”指的是特征(隐层单元的响应a(2))只是用一层计算单元(隐层)来得到的。
+
-
:【一审】:
+
-
在之前的章节中,你已经构建了一个包括输入层、隐层以及输出层的三层神经网络。虽然该网络对于MNIST数据库非常有效,但是它还是一个非常“浅”的网络。这里的“浅”指的是特征(隐层单元的响应a(2))只是用一层计算单元(隐层)来得到的。
+
-
:【原文】:
+
:自动编码器    autoencoder
-
In this section, we begin to discuss deep neural networks, meaning ones in which we have multiple hidden layers; this will allow us to compute much more complex features of the input. Because each hidden layer computes a non-linear transformation of the previous layer, a deep network can have significantly greater representational power (i.e., can learn significantly more complex functions) than a shallow one.
+
-
:【初译】:
+
-
在本节中,我们开始讨论深度神经网络,即含有多层隐层的网络。通过引入深度网络,可以使我们得到表征输入的更加复杂的特征。因为每一层隐层计算的是上一层输出的非线性的变换,那么深度神经网络就能够拥有比“浅层”网络更加优异的表达能力(例如学习到更加复杂的函数关系)。
+
-
:【一审】:
+
-
在本节中,我们开始讨论深度神经网络,即含有多层隐层的网络。通过引入深度网络,可以使我们得到表征输入的更加复杂的特征。因为每一层隐层计算的是上一层输出的非线性的变换,那么深度神经网络就能够拥有比“浅层”网络更加优异的表达能力(例如学习到更加复杂的函数关系)。
+
-
:【原文】:
+
:微调  fine-tuned
-
Note that when training a deep network, it is important to use a non-linear activation function <math>\textstyle f(x)</math> in each hidden layer. This is because multiple layers of linear functions would itself compute only a linear function of the input (i.e., composing multiple linear functions together results in just another linear function), and thus be no more expressive than using just a single layer of hidden units.
+
-
:【初译】:
+
-
值得注意的是当训练深度网络的时候,每一层隐层使用非线性的响应函数<math>\textstyle f(x)</math>是非常重要的。这是因为多层的线性函数本质上也只能表达输入的线性关系(例如,将多个线性方程组合在一起仅仅产生另一个线性方程),因此相比于单层的隐层,拥有多层隐层的深度网络在响应函数是线性的条件下并没有增加表达能力。
+
-
:【一审】:
+
-
值得注意的是当训练深度网络的时候,每一层隐层使用非线性的响应函数<math>\textstyle f(x)</math>是非常重要的。这是因为多层的线性函数本质上也只能表达输入的线性关系(例如,将多个线性方程组合在一起仅仅产生另一个线性方程),因此相比于单层的隐层,拥有多层隐层的深度网络在响应函数是线性的条件下并没有增加表达能力。
+
-
{{Advantages of deep networks}}
+
:自学习方法    self-taught learning
-
{{深度网络的优势}}
+
-
:【原文】:
 
-
Why do we want to use a deep network? The primary advantage is that it can compactly represent a significantly larger set of functions than shallow networks. Formally, one can show that there are functions which a k-layer network can represent compactly (with a number of hidden units that is polynomial in the number of inputs), that a(k − 1)-layer network cannot represent unless it has an exponentially large number of hidden units.
 
-
:【初译】:
 
-
为什么我们要使用深度网络呢?使用深度网络最主要的优势在于它能够比浅层网络更简洁的表达更多的函数关系。正式点说,我们可以找到一些函数,这些函数可以用<math>\textstyle k</math>层网络简洁的表达出来的(这里的简洁指的是使用隐层单元的数目与输入单元数目是多项式关系),但是使用<math>\textstyle k-1 </math>层的网络的话则我们不能简洁的表达出来,除非使用与输入单元数目呈指数关系的隐层单元数目。
 
-
:【一审】:
 
-
为什么我们要使用深度网络呢?使用深度网络最主要的优势在于,它能以简洁的方式来表达比浅层网络大得多的函数集合。正式点说,我们可以找到一些函数,这些函数可以用<math>\textstyle k</math>层网络简洁的表达出来(这里的简洁指的是使用隐层单元的数目与输入单元数目是多项式关系),但是对一个只有<math>\textstyle k-1 </math>层的网络而言,除非它使用与输入单元数目呈指数关系的隐层单元数目,否则不能简洁表达这些函数。
 
-
:【原文】:
 
-
To take a simple example, consider building a boolean circuit/network to compute the parity (or XOR) of n input bits. Suppose each node in the network can compute either the logical OR of its inputs (or the OR of the negation of the inputs), or compute the logical AND. If we have a network with only one input, one hidden, and one output layer, the parity function would require a number of nodes that is exponential in the input size n. If however we are allowed a deeper network, then the network/circuit size can be only polynomial in n.
 
-
:【初译】:
 
-
举一个简单的例子,考虑我们打算构建一个布尔网络来计算n个输入比特的奇偶校验码(或者进行异或运算)的情况。假设网络的每一个节点可以进行逻辑“或”运算(或者“与非”运算),或者逻辑“与”运算。如果我们拥有一个仅仅由一个输入层、一个隐层以及一个输出层构成网络,那么该奇偶校验函数需要的节点数目是与输入层的规模<math>\textstyle n</math>呈指数关系的。但是,如果我们能够构建一个深层的网络,那么这个网络的规模将会仅仅是<math>\textstyle n</math>的多项式函数。
 
-
:【一审】:
 
-
举一个简单的例子,比如我们打算构建一个布尔网络来计算n个输入比特的奇偶校验码(或者进行异或运算)。假设网络的每一个节点可以进行逻辑“或”运算(或者“与非”运算),或者逻辑“与”运算。如果我们拥有一个仅仅由一个输入层、一个隐层以及一个输出层构成的网络,那么该奇偶校验函数所需要的节点数目就与输入层的规模<math>\textstyle n</math>呈指数关系。但是,如果我们能够构建一个更深层点的网络,那么这个网络的规模就可做到仅仅是<math>\textstyle n</math>的多项式函数。
 
-
:【原文】:
+
==中文译者==
-
By using a deep network, in the case of images, one can also start to learn part-whole decompositions. For example, the first layer might learn to group together pixels in an image in order to detect edges (as seen in the earlier exercises). The second layer might then group together edges to detect longer contours, or perhaps detect simple "parts of objects." An even deeper layer might then group together these contours or detect even more complex features.
+
-
:【初译】:
+
郑胤(yzheng3xg@gmail.com), 谭晓阳(x.tan@nuaa.edu.cn), 许利杰(csxulijie@gmail.com)
-
在处理对象是图像的情况下,通过使用深度网络我们还能够学习到“部分-整体”的分解关系。例如,第一层可以将图像中的像素组合在一起来检测边缘(正如我们在前面的练习中做的那样)。第二层可以将边缘组合成轮廓,或者可以检测简单的“目标的部件”。更深的层次可以进一步将这些轮廓组合起来或者可以检测更加复杂的特征。
+
-
:【一审】:
+
-
在处理对象是图像的情况下,我们还能够通过使用深度网络学习到“部分-整体”的分解关系。例如,第一层可以学习将图像中的像素组合在一起来检测边缘(正如我们在前面的练习中做的那样)。第二层可以将边缘组合起来检测更长的轮廓或者简单的“目标的部件”。在更深的层次上,可以将这些轮廓进一步组合起来以检测更为复杂的特征。
+
-
:【原文】:
 
-
Finally, cortical computations (in the brain) also have multiple layers of processing. For example, visual images are processed in multiple stages by the brain, by cortical area "V1", followed by cortical area "V2" (a different part of the brain), and so on.
 
-
:【初译】:
 
-
最后要提的一点是,大脑皮层进行的计算同样是分多层进行的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的V1区,然后紧跟着进入大脑皮层V2区,以此类推。
 
-
:【一审】:
 
-
最后要提的一点是,大脑皮层进行的计算同样是分多层进行的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的V1区,然后紧跟着进入大脑皮层V2区,以此类推。
 
-
{{Difficulty of training deep architectures}}
 
-
{{训练深度网络的困难}}
 
 +
{{建立分类用深度网络}}
-
:【原文】:
 
-
While the theoretical benefits of deep networks in terms of their compactness and expressive power have been appreciated for many decades, until recently researchers had little success training deep architectures.
 
-
The main learning algorithm that researchers were using was to randomly initialize the weights of a deep network, and then train it using a labeled training set <math>\textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {{m}_{l}} \right)},{{y}^{\left( {{m}_{l}} \right)}} \right) \right\}</math>using a supervised learning objective, for example by applying gradient descent to try to drive down the training error. However, this usually did not work well. There were several reasons for this.
 
-
:【初译】:
+
{{Languages|Deep_Networks:_Overview|English}}
-
虽然几十年前人们就发现了深度网络在理论上拥有在简洁性、表达能力方面的优势,但是直到最近研究人员才仅仅开始在训练深度网络方面取得一点点成功。
+
-
研究人员使用的主要的学习算法是:首先随机的初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集<math>\textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {{m}_{l}} \right)},{{y}^{\left( {{m}_{l}} \right)}} \right) \right\}</math>上进行训练。例如通过使用梯度下降法来试图降低训练误差。然而,这种方法通常不是十分奏效。这其中有如下几方面原因。
+
-
 
+
-
:【一审】:
+
-
虽然几十年前人们就发现了深度网络在理论上拥有在简洁性、表达能力方面的优势,但是直到最近,研究者们在训练深度网络方面也没取得多少成功。
+
-
研究者们使用的主要学习算法是:首先随机初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集<math>\textstyle \left\{ \left( x_{l}^{\left( 1 \right)},{{y}^{\left( 1 \right)}} \right),...,\left( x_{l}^{\left( {{m}_{l}} \right)},{{y}^{\left( {{m}_{l}} \right)}} \right) \right\}</math>上进行训练。例如通过使用梯度下降法来试图降低训练误差。然而,这种方法通常不是十分奏效。这其中有如下几方面原因。
+
-
 
+
-
 
+
-
{{Availability of data}}
+
-
{{数据获取问题}}
+
-
 
+
-
 
+
-
:【原文】:
+
-
With the method described above, one relies only on labeled data for training. However, labeled data is often scarce, and thus for many problems it is difficult to get enough examples to fit the parameters of a complex model. For example, given the high degree of expressive power of deep networks, training on insufficient data would also result in overfitting.
+
-
:【初译】:
+
-
使用上面提到的方法,我们仅仅依赖于有标签的数据进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂的模型的参数。例如,考虑到深度网络的高度的表达能力,在不充足的数据上进行训练将会导致过拟合。
+
-
:【一审】:
+
-
使用上面提到的方法,我们仅仅依赖于有标签的数据进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的参数。例如,考虑到深度网络具有高度表达能力,在不充足的数据上进行训练将会导致过拟合。
+
-
 
+
-
{{Local optima}}
+
-
{{局部极值问题}}
+
-
 
+
-
:【原文】:
+
-
Training a shallow network (with 1 hidden layer) using supervised learning usually resulted in the parameters converging to reasonable values; but when we are training a deep network, this works much less well. In particular, training a neural network using supervised learning involves solving a highly non-convex optimization problem (say, minimizing the training error<math>\sum\nolimits_{i}{||{{h}_{W}}\left( {{x}^{\left( i \right)}}-{{y}^{\left( i \right)}} \right)|{{|}^{2}}}</math>as a function of the network parameters <math>W</math>). In a deep network, this problem turns out to be rife with bad local optima, and training with gradient descent (or methods like conjugate gradient and L-BFGS) no longer work well.
+
-
:【初译】:
+
-
通过有监督学习对浅层网络(有一层隐层)进行训练通常会使得参数收敛到何理的范围内。但是当用其来训练深度网络的时候,这种方法并没有取得很好的效果。特别的,使用有监督的方法训练神经网络通常会涉及到接一个高度非凸的优化问题(例如最小化训练误差<math>\sum\nolimits_{i}{||{{h}_{W}}\left( {{x}^{\left( i \right)}}-{{y}^{\left( i \right)}} \right)|{{|}^{2}}}</math>,其中参数<math>W</math>是要优化的参数)。在深度网络中,此类问题充满着大量的非优局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)不再有效
+
-
:【一审】:
+
-
通过有监督学习对浅层网络(有一层隐层)进行训练通常会使得参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并没有取得很好的效果。特别的,使用有监督方法训练神经网络通常会涉及到解一个高度非凸的优化问题(例如最小化训练误差<math>\sum\nolimits_{i}{||{{h}_{W}}\left( {{x}^{\left( i \right)}}-{{y}^{\left( i \right)}} \right)|{{|}^{2}}}</math>,其中参数<math>W</math>是要优化的参数)。对深度网络而言,这种高度非凸优化问题的搜索区域中充斥着大量的“坏”局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)效果不好。
+
-
 
+
-
 
+
-
{{Diffusion of gradients}}
+
-
{{梯度弥散问题}}
+
-
 
+
-
:【原文】:
+
-
There is an additional technical reason, pertaining to the gradients becoming very small, that explains why gradient descent (and related algorithms like L-BFGS) do not work well on a deep networks with randomly initialized weights. Specifically, when using backpropagation to compute the derivatives, the gradients that are propagated backwards (from the output layer to the earlier layers of the network) rapidly diminish in magnitude as the depth of the network increases. As a result, the derivative of the overall cost with respect to the weights in the earlier layers is very small. Thus, when using gradient descent, the weights of the earlier layers change slowly, and the earlier layers fail to learn much. This problem is often called the "diffusion of gradients."
+
-
:【初译】:
+
-
另一个造成训练深度网络困难的技术原因是梯度变得非常小。这也解释了为什么梯度下降方法(以及相关的诸如L-BFGS算法等)在随机初始化权重的深度网络上效果不好的原因。尤其是当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播过来的梯度(从输出层到网络的最初几层)在幅度上迅速的消失。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”
+
-
:【一审】:
+
-
另一个解释为什么梯度下降法(以及相关的诸如L-BFGS算法等)在随机初始化权重的深度网络上效果不好的技术原因是,梯度可变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会快速而急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”
+
-
 
+
-
 
+
-
:【原文】:
+
-
A closely related problem to the diffusion of gradients is that if the last few layers in a neural network have a large enough number of neurons, it may be possible for them to model the labeled data alone without the help of the earlier layers. Hence, training the entire network at once with all the layers randomly initialized ends up giving similar performance to training a shallow network (the last few layers) on corrupted input (the result of the processing done by the earlier layers).
+
-
:【初译】:
+
-
与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有非常多的神经元的时候,单独这几层就可能足以对有标签数据进行建模,而不用最初几层的帮助。因此,在处理有损失的输入(即使用最初几层进行处理得到的结果)的时候,当对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。
+
-
:【一审】:
+
-
与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有非常多的神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,用随机初始化的方式来训练整个网络所能得到的性能,就和用一些被损坏的输入--这是最初几层干的好事--来训练一个由最后几层构成的浅层网络差不多。
+
-
 
+
-
 
+
-
 
+
-
 
+
-
{{Greedy layer-wise training}}
+
-
{{逐层贪婪训练方法}}
+
-
 
+
-
:【原文】:
+
-
How can we train a deep network? One method that has seen some success is the greedy layer-wise training method. We describe this method in detail in later sections, but briefly, the main idea is to train the layers of the network one at a time, so that we first train a network with 1 hidden layer, and only after that is done, train a network with 2 hidden layers, and so on. At each step, we take the old network with k − 1 hidden layers, and add an additional k-th hidden layer (that takes as input the previous hidden layer k − 1 that we had just trained). Training can either be supervised (say, with classification error as the objective function on each step), but more frequently it is unsupervised (as in an autoencoder; details to provided later). The weights from training the layers individually are then used to initialize the weights in the final/overall deep network, and only then is the entire architecture "fine-tuned" (i.e., trained together to optimize the labeled training set error).
+
-
:【初译】:
+
-
那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是一种取得一定成功的方法。我们会在后面的章节中详细阐述这种方法细节。但是简单来说,逐层贪婪算法的主要思路是每次只训练一层网络,即我们首先训练一个只有一层隐层的网络,然后只有在这层网络训练结束之后才开始一个有两层隐层的网络,以此类推。在每一步中,我们使用已经训练好的前<math>\textstyle k-1 </math>层,然后增加第<math>\textstyle k </math>层(也就是将我们已经训练好的前<math>\textstyle k-1 </math>的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但是更经常遇到的情况是无监督的(例如自动编码器,我们会在后边的章节中给出细节)。这些通过逐层贪婪训练方法训练得到的各层的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(例如,所有层放在一起来优化有标签的训练集的训练误差)
+
-
:【一审】:
+
-
那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是一种取得一定成功的方法。我们会在后面的章节中详细阐述这种方法的细节。简单来说,逐层贪婪算法的主要思路是每次只训练一层网络,即我们首先训练一个只有一层隐层的网络,仅当这层网络训练结束之后才开始训练一个有两层隐层的网络,以此类推。在每一步中,我们把已经训练好的前<math>\textstyle k-1 </math>层固定,然后增加第<math>\textstyle k </math>层(也就是将我们已经训练好的前<math>\textstyle k-1 </math>的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但是更经常是无监督的(例如自动编码器,我们会在后边的章节中给出细节)。这些各层单独训练所得到的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(即,把所有层放在一起来优化在有标签训练集上的训练误差)
+
-
 
+
-
:【原文】:
+
-
The success of greedy layer-wise training has been attributed to a number of factors:
+
-
:【初译】:
+
-
逐层贪婪的训练方法取得成功是因为如下几方面的原因:
+
-
:【一审】:
+
-
逐层贪婪的训练方法取得成功是因为如下几方面的原因:
+
-
 
+
-
{{Availability of data}}
+
-
{{数据获取}}
+
-
 
+
-
 
+
-
:【原文】:
+
-
While labeled data can be expensive to obtain, unlabeled data is cheap and plentiful. The promise of self-taught learning is that by exploiting the massive amount of unlabeled data, we can learn much better models. By using unlabeled data to learn a good initial value for the weights in all the layers <math>{{W}^{\left( l \right)}}</math>(except for the final classification layer that maps to the outputs/predictions), our algorithm is able to learn and discover patterns from massively more amounts of data than purely supervised approaches. This often results in much better classifiers being learned.
+
-
:【初译】:
+
-
虽然获取有标签数据的代价是昂贵的,无标签数据却是廉价和大量的。自学习方法的潜力在于通过使用大量的无标签数据,我们能够学习到更好的模型。相对于纯粹的有监督的方法,通过使用无标签数据来学习到所有层(不包括用于预测标签的最终分类层)的权重<math>{{W}^{\left( l \right)}}</math>的好的初始值,我们的算法能够从大量的数据中学习和发现存在于数据中的模式。这通常会使得我们学习到更好的分类效果。
+
-
:【一审】:
+
-
虽然获取有标签数据的代价是昂贵的,无标签数据却是廉价和大量的。自学习方法(self-taught learning)的潜力在于它能通过使用大量的无标签数据来学习到更好的模型。具体而言,算法通过使用无标签数据来为所有层(不包括用于预测标签的最终分类层)的权重<math>{{W}^{\left( l \right)}}</math>学习一个好的初值,从而能够比纯监督方法利用多得多的大量数据,来学习和发现其中的模式。这样通常会使学得的分类器性能更好。
+
-
 
+
-
{{Better local optima}}
+
-
{{更好的局部极值}}
+
-
 
+
-
 
+
-
:【原文】:
+
-
After having trained the network on the unlabeled data, the weights are now starting at a better location in parameter space than if they had been randomly initialized. We can then further fine-tune the weights starting from this location. Empirically, it turns out that gradient descent from this location is much more likely to lead to a good local minimum, because the unlabeled data has already provided a significant amount of "prior" information about what patterns there are in the input data.
+
-
:【初译】:
+
-
在使用无标签数据训练好神经网络之后,相比于随机初始化的方法得到的权重,这些学习到的权重在参数空间中位于更好的位置上。我们可以以这些学习到的权重为起点来进一步的优化权重参数。从经验上来说,从这些位置为起点进行的梯度下降法更有可能得到好的局部极值点,这是因为无标签的数据已经提供了大量的关于何种模式会出现在输入数据中的先验信息。
+
-
:【一审】:
+
-
当用无标签数据训练完网络后,相比于随机初始化而言,其权重会位于参数空间中更好的位置上。然后我们可以从这些位置开始进一步微调权重。从经验上来说,从这些位置为起点开始梯度下降更有可能收敛到好的局部极值点,这是因为无标签数据已经提供了大量关于输入数据中包含模式的先验信息。
+
-
 
+
-
:【原文】:
+
-
In the next section, we will describe the specific details of how to go about implementing greedy layer-wise training.
+
-
:【初译】:
+
-
在下一节中,我们将会具体阐述如何进行逐层贪婪训练。
+
-
:【一审】:
+
-
在下一节中,我们将会具体阐述如何进行逐层贪婪训练。
+

Latest revision as of 14:30, 17 April 2013

Personal tools