深度网络概览
From Ufldl
(→梯度弥散问题) |
(→局部极值问题) |
||
Line 8: | Line 8: | ||
值得注意的是当训练深度网络的时候,每一层隐层应该使用非线性的激活函数 <math>\textstyle f(x)</math>。这是因为多层的线性函数组合在一起本质上也只有线性函数的表达能力(例如,将多个线性方程组合在一起仅仅产生另一个线性方程)。因此,在激活函数是线性的情况下,相比于单隐藏层神经网络,包含多隐藏层的深度网络并没有增加表达能力。 | 值得注意的是当训练深度网络的时候,每一层隐层应该使用非线性的激活函数 <math>\textstyle f(x)</math>。这是因为多层的线性函数组合在一起本质上也只有线性函数的表达能力(例如,将多个线性方程组合在一起仅仅产生另一个线性方程)。因此,在激活函数是线性的情况下,相比于单隐藏层神经网络,包含多隐藏层的深度网络并没有增加表达能力。 | ||
+ | |||
==深度网络的优势== | ==深度网络的优势== | ||
Line 21: | Line 22: | ||
最后要提的一点是,大脑皮层同样是分多层进行计算的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的“V1”区,然后紧跟着进入大脑皮层“V2”区,以此类推。 | 最后要提的一点是,大脑皮层同样是分多层进行计算的。例如视觉图像在人脑中是分多个阶段进行处理的,首先是进入大脑皮层的“V1”区,然后紧跟着进入大脑皮层“V2”区,以此类推。 | ||
+ | |||
==训练深度网络的困难== | ==训练深度网络的困难== | ||
Line 26: | Line 28: | ||
虽然几十年前人们就发现了深度网络在理论上的简洁性和较强的表达能力,但是直到最近,研究者们也没有在训练深度网络方面取得多少进步。 | 虽然几十年前人们就发现了深度网络在理论上的简洁性和较强的表达能力,但是直到最近,研究者们也没有在训练深度网络方面取得多少进步。 | ||
问题原因在于研究者们主要使用的学习算法是:首先随机初始化深度网络的权重,然后使用有监督的目标函数在有标签的训练集 <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)}} | + | 使用监督学习方法来对浅层网络(只有一个隐藏层)进行训练通常能够使参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并不能取得很好的效果。特别的,使用监督学习方法训练神经网络时,通常会涉及到求解一个高度非凸的优化问题(例如最小化训练误差 <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等方法)效果并不好。 |
===梯度弥散问题=== | ===梯度弥散问题=== | ||
Line 41: | Line 45: | ||
与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。 | 与梯度弥散问题紧密相关的问题是:当神经网络中的最后几层含有足够数量神经元的时候,可能单独这几层就足以对有标签数据进行建模,而不用最初几层的帮助。因此,对所有层都使用随机初始化的方法训练得到的整个网络的性能将会与训练得到的浅层网络(仅由深度网络的最后几层组成的浅层网络)的性能相似。 | ||
+ | |||
==逐层贪婪训练方法== | ==逐层贪婪训练方法== | ||
- | + | 那么,我们应该如何训练深度网络呢?逐层贪婪训练方法是取得一定成功的一种方法。我们会在后面的章节中详细阐述这种方法的细节。简单来说,逐层贪婪算法的主要思路是每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,我们把已经训练好的前 <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 | ||
+ | |||
+ | :非线性变换 non-linear transformation | ||
+ | |||
+ | :激活函数 activation function | ||
+ | |||
+ | :简洁地表达 represent compactly | ||
+ | |||
+ | :“部分-整体”的分解 part-whole decompositions | ||
+ | |||
+ | :目标的部件 parts of objects | ||
+ | |||
+ | :高度非凸的优化问题 highly non-convex optimization problem | ||
+ | |||
+ | :共轭梯度 conjugate gradient | ||
+ | |||
+ | :梯度的弥散 diffusion of gradients | ||
+ | |||
+ | :逐层贪婪训练方法 Greedy layer-wise training | ||
+ | |||
+ | :自动编码器 autoencoder | ||
+ | |||
+ | :微调 fine-tuned | ||
+ | |||
+ | :自学习方法 self-taught learning | ||
+ | |||
+ | |||
+ | |||
+ | ==中文译者== | ||
- | + | 郑胤(yzheng3xg@gmail.com), 谭晓阳(x.tan@nuaa.edu.cn), 许利杰(csxulijie@gmail.com) | |
- | |||
- | |||
+ | {{建立分类用深度网络}} | ||
- | + | {{Languages|Deep_Networks:_Overview|English}} |