【Deep Learning】笔记:Understanding the difficulty of training deep feedforward neural networks

这几天读了这篇论文,在这里将大致内容写在这里。

Abstract

介绍这篇论文的主要内容就是尝试更好的理解为什么使用“标准随机初始化”来计算使用标准梯度下降的网络效果通常来讲都不是很好。

首先研究了不同的非线性激活函数的影响,发现 sigmoid 函数它的均值会导致在隐层中很容易到达函数的饱和区域,因此sigmoid 激活函数在随机初始化的深度网络中并不合适。但同时惊喜的发现,处于饱和的神经元能够自己“逃脱出”饱和状态。

最后研究了激活值和梯度值如何在训练过程中的各层次里发生变化,其中,当与每个层相关联的雅可比矩阵的奇异值远远大于1时,训练可能会变得更加困难。基于这些考虑,提出了一种新的初始化方法,可以带来更快的收敛速度。

PS. 这种初始化权值的方法就是这两年在深度网络中经常使用的 Xavier 初始化

1. Deep Neural Networks.

这里主要是对 深度神经网络 的大致介绍,讲述了这两年的主要发展状况。

这里粗略翻译一下第二段和第三段:

​ 最近的深层神经网络结构的实验结果大多数都可以用 能够转化为深度有监督神经网络的模型 来获得,但是使用了与经典的前馈神经网络不同的初始化或是训练方法。为什么这些新的算法能够获得比经典的随机初始化和梯度优化算法 好得多的结果呢?一部分的原因可能是由于采取了 unsupervised pre-training( 无监督预训练 ) 的策略,表明了它作为一个 “调节器”,在优化过程中 使初始化后的参数处于一个更好的 “基准位置”,使优化过程能够避开与防滑相关的明显的局部最小值。但是早期的工作已经证明了即使是单纯的有监督学习但是采用贪心层次学习的过程也能够取得更好的效果。因此这里我们关注的是分析是良好的之前的(但深层)的多层神经网络可能出现的问题而非关注于无监督的预训练或是半监督标准对深层架构的影响。

​ 我们的实验分析是通过监测在训练迭代过程中不同层之间的激活值 (隐层的饱和状态)和梯度来完成的。同样研究了不同的激活函数和初始化方法对最终结果的影响。

2. Experimental Setting and Datasets

贴一下原文:

Understanding the difficulty of training deep feedforward neural networks.

2.1 Online Learning on an Infinite Dataset: Shapeser-3 × 2

主要介绍了一个无限数据数据集 Shapeser-3 × 2,它这个数据3集上进行在线学习,它的数据的大小是无穷多的,因为为不断地随机生成。在线学习(或不断学习)具有优点的:它可以把我们的任务focus在最优化问题上而不是小样本中回归问题,明白吧,应该。 还应该指出:当面对很大很大的训练集时,从非监督学习预训练中来进行初始化网络仍然使网络的性能有巨大的提升,意思就是当面对在的训练集时,非监督学习预训练的作用依然没有消失。

使用的数据集中随机生成三个图形(平行四边形,椭圆,三角)中的两个,而且允许相互之间存在遮挡关系(不大于 50% 的遮挡),最后将图形全都 resize 成为 32 × 32 大小。

给出示例图像:
这里写图片描述

2.2 Finite Datasets

介绍了使用的有限数据集

MNIST digits ,10个数字的识别,50000个用于训练,10000用于 validation,10000个用于测试。

CIFAR-10 :10种物品的识别,40000个用于训练,10000用于 validation,10000个用于测试。

Small-ImageNet:10个物品的识别,90000个用于训练,10000用于 validation,10000个用于测试。

给出示例图像:

这里写图片描述

2.3 Experimental Setting

这一小节主要介绍了实验中使用的神经网络的参数

使用的是一个具有 1-5 层深度的,每层具有1000个神经元节点,输出层使用一个 softmax logistic regression,代价函数是 logP(y|x)

网络优化的方法是使用随机梯度的反向传播算法,并采用 mini-batches 策略,mini-batches = 10,权值更新过程中的学习率基于验证集误差来确定。

在隐层选用三种不同的激活函数分别进行试验,分别是 sigmoid 函数,双曲正切函数 (tanh) 与 softsign 函数 ,后面两个函数是相似的,唯一的区别在于,双曲正切函数以指数速率接近渐近线,而 softsign 函数以二次速率接近渐近线。

三个函数的表达式分别为:

sigmoid(x)=11+ex

tanh(x)=sinhcosh=exexex+ex

softsign(x)=x1+|x|

网络权值的初始化使用下面的均匀分布,其中 n 是前一层的神经元

WijU[1n,1n]

3. Effect of Activation Functions and Saturation During Training

在选择激活函数时,我们总要避免两点:

  1. 避免激活函数处于过饱和状态,在这种状态,梯度就不能很好的得到传递。
  2. 激活函数过度线性化,因为只有非线性才能拟合更多的函数。

3.1 Experiments with the Sigmoid

Sigmoid 函数它会降低学习速率的(由于它的mean不是0)。对于这个函数的问题,LeCun 已经研究过了。

这里选择 Sigmoid 函数是为了通过观察它的激活值来反映它的饱和程度,使用的数据集是前面提到的 Shapeset-3 × 2 ,但是在其他数据集上也会观察到相似的效果。

具体如下图所示:
这里写图片描述

图说明:

竖直方向表示激活值,其中实线表示的是均值,上下的浮动表示上下标准差,水平方向表示迭代的次数。

我们可以看到,对于第 1~4 层,其均值都在 0.5 左右,且按照输出到输入方向激活值依次降低,但这个位置处于 Sigmoid 函数的线性区附近,而第 5 层在迭代的过程中很快就到达了饱和区,而且这种饱和状态会持续很长的时间,很可能在整个训练过程中这一层都处于饱和状态。但是,令人惊奇的是,随着迭代次数的增加,第 5 层隐层有 “逃离” 饱和状态的趋势,而前面的 4 层有逐渐趋于饱和的趋势,因此会逐渐趋于稳定。

对于上面这种情况,文中假设是由于 采用随机初始化和对于饱和的 Sigmoid 函数输出接近为 0 共同造成的。同时也应该注意到,对于经过 pre-training 的深度网络并不会出现这种饱和情况。所以,前面几层的输出对于最后输出的各类的预测是基本没有作用的,或者说直到第三层为止,前几层的输出都是随机的,而非像经过了 pre-training 得到的初始化参数,预训练得到的初始化参数是有意义的。第四层的输出加权后的值直接影响到的最后的代价函数的,因为它后面接的是 softmax 的输出层的,因此,输出层的 softmax(b+Wh) 的最终正确性可能更依赖于偏置 b 而非由前几层共同作用得到的 h,因此为了在一开始让 h 的值不至于影响到 b+Wh 值,网络自己就在代价函数的作用下学习了,学习的结果就是:反向梯度算法导致 Wh 的结果趋向于0,而这可以通过让 h 趋向于 0 来完成,偏置 b 迅速学习,并支撑起了整个预测结果。但是同时,将 h 推向 0 会导致处于 Sigmoid 函数的饱和区,使得反向梯度学习缓慢。最终 (但会经过很长时间 ),前面的隐层会向提取更有意义的特征方向移动,而最后层也会逐渐移出饱和区,但是即便是在这样之后,网络最终也无法得到很好的训练效果 (以及泛化能力)。

3.2 Experiment with the Hyperbolic tangent

这部分对比了随着迭代次数的增加采用双曲正切函数 (tanh) 和 softsign 函数作为激活函数的激活值情况。

先简单翻译一下:

上面提到了 Sigmoid 函数在 0 附近会到达饱和区域,但是 tanh 函数在 0 附近则不会达到饱和,因为 tanh 函数在 0 附近呈现对称线性特征,但是,使用标准权重分布来初始化权重,我们会发现同样会很快达到饱和状态,正如下图中所示,为什么会出现这种情况还需要进一步讨论。

这里写图片描述

这里写图片描述

图片说明:

上面两张图分别是 tanh 作为激活函数的激活值情况和 softsign 函数作为激活函数的激活值情况。

其中实线表示上下标准差,而没有实线的点则表示 98% 的数据分布。

首先看上面的图像,可以看出从第一层到第五层,在标准均匀初始化权值的前提下,逐渐每层都慢慢到了饱和区, 对于这个现象,文中也没有给出合理的解释。

再观察下面的图像,可以看出 softsign 函数的激活值比 tanh 函数的激活值区域饱和区的速度慢,因此效果也就更好。

3.3 Experiments with the Softsign

Softsign 函数在形状上与 tanh 函数具有一定的相似性,但是在前面也有提到,在趋近渐近线的速度上,tanh 是指数级趋近,而 tanh 则是二次趋近。图 3 给出的是 tanh 激活函数与 softsign 激活函数在训练完成以后的激活值的分布图。

我们可以看到对于 tanh 激活函数,它的激活值大多分布在 -1 和 +1 处,而这两个位置都是出于饱和区的位置,第 5 层还有许多出于 0 附近的激活值,但是对于 tanh 激活函数,0 附近具有良好的线性性质,而不具有良好的非线性性质,因此对于拟合函数来说整体并不理想。

对于 softsign 函数,我们可以看到处于饱和取得值并不占数据的大多数,除了第 5 层有相当数量的激活值处于0附近,其余隐层的激活值在 (-0.8, -0.6) 和 (0.6, 0.8) 这两个非线性区也有大量的分布,因此具有良好的非线性拟合能力,对于拟合函数来说比较理想。

这里写图片描述

这里写图片描述

图像说明:

上面两图示激活值在学习结束时归一化的直方图,分布在同一层上的所有神经元和300个测试示例。

两幅图中上面的表示的是激活函数为 tanh ,下面表示的是激活函数为 softsign,处在 0 附近的激活值是线性区,而 (-0.8, -0.6) 和 (0.6, 0.8) 区域处于非线性区。

4. Studying Gradients and their Propagation

4.1 Effect of the Cost Function

在1986年 Rumelhart 已经发现:logistic function 或者叫 conditional log-likelihood function: -log P(y|x) 的效果比 quadratic cost function(平方代价函数)的效果好很多的,原因在于 quadratic cost function(平方代价函数)在训练过程中会出现更多的 plateaus(平坦区域)。文章给出了一个两个参数下的图,图中采用的是具有单隐层的神经网络,激活函数使用的是 tanh 函数,对于输入信号进行随机初始化,可以看到二次代价函数具有更多的 plateaus (平坦区域)。

这里写图片描述

说明:

图中上面的曲面表示的是交叉熵代价函数,下面的曲面表示的是二次代价函数,W~1~W~2~ 分别表示层与层之间的连接权值。

4.2 Gradient at initialization

说明,这部分是这篇论文的重点内容,提出了一种新的权重初始化方法。

4.2.1 Theoretical Considerations and a New Normalized Initialization

这部分基于 Bradley 在 2009 年的理论分析 the variance of the back-progated gradients,并提出一种新的权值初始化的方法。

进行翻译:

我们研究反向传播的梯度,或是代价函数对于每一层输入偏置的梯度。Bradley 在 2009 年发现在初始化权重后反向梯度从输出层到输入层逐渐减小。它使用线性的激活函数,发现了反向传播的梯度的方差随网络的向后而逐渐减小,在这部分的开始,我们在线性领域进行研究。

对于一个密集连接的使用线性激活函数的 ANN,且激活函数在 0 处的导数值为 1,即有 f’(0) = 1,这里我们设 z^i^ 是第 i 层的激活向量,s^i^ 表示输入第 i 层激活函数的向量,所以有 si=ziWi+bi zi+1=f(si) ,从这些定义中可以得到下面这两个式子

Costsik=f(sik)Wi+1k, Costsi+1

Costsil,k=zilCostsik

对上面这两个公式进行简单的推导说明

上面第一个公式可以由下面这个公式推导得出:

si+1=Wi+1k, f(ski)+bi+1

上面第二个公式可以由下面这个公式推导得出:

Wil,kzil+bil,k=sik

方差可以用输入,输出和随机权重初始化推导得出,考虑考虑我们在初始化时处于线性状态的假设,权重是独立初始化的,输入特征差异是相同的 ( = Var[x] ),然后我们就可以得出,对于第 i 层共有 n~i~ 个神经元和网络的输入向量为 x ,有下面的公式:

f(sik)1

Var[zi]=Var[x]i1i=0niVar[Wi]

我们为第i层的所有权重的共享标量方差写入Var[W^i’^],因此,对于一个有 d 层的神经网络:

Var[Costsi]=Var[Costsd]i1i=0ni+1Var[Wi]

Var[Costωi]=i1i=0niVar[Wi]d1i=iVar[Wi]×Var[x]Var[Costsd]

对于一个前向网络来说,为了保持信息的流动,我们希望有:

(i,i), Var[zi]=Var[zi]

而对于一个误差反向传播的网络来说,我们希望有

(i,i), Var[Costsi]=Var[Costsi]

从上面这两个条件我们就可以推断出:

i, niVar[Wi]=1

i, ni+1Var[Wi]=1

由上面这两个公式可以推出下面的式子:

i,Var[Wi]=2ni+ni+1

需要说明的是,当着两个条件都同时满足时,需要满足所有层的宽度都是相同的,如果我们使用同样的初始化方法对权重进行初始化,就能够得到下面这两个很有意思的结论:

i,Var[Costsi]=[nVar[W]]diVar[x]

i,Var[Costwi]=[nVar[W]]dVar[x]Var[Costsd]

可以看出,对于每一层上的权重的方差都是相等的,但是随着我们考虑更深入的网络,反向传播梯度的方差可能会消失或爆炸。 注意,在研究递归神经网络时,在时间上可以看出是非常深入的网络。

我们使用的标准初始化(eq.1)产生了以下属性的差异:

nVar[W]=13

这里 n 表示的是每一层网络的神经元个数 (假设所有层具有所有相同的神经元数),而这就会导致 BP 算法的梯度的方差取决于层数。

因此,由于通过层次间的乘法效应来初始化深层网络,归一化因子可能很重要,我们建议使用以下初始化过程大致满足维护激活方差和反向传播梯度方差的目标,考虑到网络向上或向下移动。

这里我们叫它 “normalized initialization”:

WU[6nj+nj+1,6nj+nj+1]

上面这部分是这篇论文的重点,但是觉得这部分的推导部分比较繁琐,查阅资料发现了这两篇博客

http://blog.csdn.net/kangroger/article/details/61414426

http://blog.csdn.net/u011534057/article/details/51673458

这两部分的推导比较容易理解。这里不再赘述。

Ps. 重点是记住这种初始化权值的方法,这在以后的深层网络中也会经常用到。

4.2.2 Gradient Propagation Study

简单翻译:

为了经验验证上述理论思想,我们使用两种不同的初始化方法在初始化时绘制了激活值,权重梯度和反向传播梯度的归一化直方图。结果在图6,图7和图8中,实验是在 Shapeset-3x2 数据集上进行的,但是定性的说,在其余数据集上也能够得到相似的结论。

我们观测第 i 层网络的雅可比矩阵的奇异值:

J=zi+1zi

当连续层具有相同的维度时,平均奇异值对应于从 z^i^映射到 z^i+1^ 的平均比例,以及从 z^i^z^i+1^ 的平均激活方差的比率。实验表明,使用我们提出的 normalization initialzation 方法比率大致在 0.8 左右,但是使用标准均匀分布初始化方法的比率降到了 0.5 左右。

这里写图片描述

这里写图片描述

说明:

上图给出的是对于 tanh 激活函数使用不用的初始化方法进行初始化后的激活值的分布情况,上面的图使用的是标准方法初始化,下面的图使用的是我们提出的

normalization initialzation 方法

可以看出,使用标准的初始化方法激活值从外层向内层逐渐衰减,而使用 normalization initialzation 方法进行初始化各层之间的激活值几乎保持不变。

4.3 Back-propagated Gradients During Learning

这种网络中的学习动态很复杂,我们希望开发更好的分析和跟踪工具。 特别地,我们不能在理论分析中使用简单方差计算,因为权重值不再与激活值无关,线性假设也不再成立。

如Bradley(2009)第一次指出,我们观察到(图7),在训练开始时,在标准初始化(等式1)之后,反向传播梯度的方差随着向下传播而变小。 然而,我们发现,在学习过程中,这种趋势非常迅速。 使用我们的归一化初始化,我们看不到这种降低的反向传播梯度(图7的底部)。

这里写图片描述

这里写图片描述

说明,实验中使用的激活函数是 tanh,上面的图像是使用标准随机初始化法法初始化的,而下面的图像使用的是 normalization initialzation 方法

继续正文:

最初令人惊讶的是,即使反向传播的梯度变小(标准初始化),权重梯度的方差大体上是恒定的,如下图所示。

这里写图片描述

这里写图片描述

图像说明

上图是使用 tanh 激活函数在初始化后的权重梯度归一化,上面的图表示的是使用标准初始化,下面的图使用的是 normalized initialization, 可以看出即使是使用标准初始化方法的反向梯度也没有发生明显的衰减。

正文:

然而,这可以通过我们上面的理论分析来解释。 有趣的是,如下图所示,这些关于训练期间标准和归一化初始化变化的权重梯度的检测(此处使用的是 tanh 网络)。 实际上,随着训练的进展,特别是在标准初始化方面,梯度起始大体上相同,它们彼此分开(下层具有更大的梯度)。 请注意,这可能是归一化初始化的优点之一,因为在不同层次上具有非常不同的幅度的梯度可能会导致病态和较慢的训练。

这里写图片描述

这里写图片描述

图像说明

训练期间具有标准初始化(上面图)和 normalized initialization(下面图)的双曲正切的权重梯度的标准偏差间隔。 我们看到 normalized initialization 允许在训练期间保持层间权重梯度的相同方差。

正文:

最后,我们观察到softsign网络与正态化初始化的tanh网络有类似特性,可以通过比较两种情况下的激活变化来看出。

这里写图片描述

图像说明:

上面两张图分别是 tanh 作为激活函数的激活值情况,其中实线表示上下标准差,而没有实线的点则表示 98% 的数据分布。可以看出很快达到饱和。

5. Error Curves and Conlusions

我们最终关心的是使用不同的训练策略的实验情况,使用错误曲线显示测试错误的演变随着训练进展和渐近是最好的表示方法,下图的曲线是在 Shapeset_3x2 数据集上进行的,表1 给出的是对于所有数据集的最终测试误差。作为基准,我们优化了 RBM SVM 模型在 100,000 个Shapeset 数据上达到了 59.74% 的测试误差,在同样的测试集上使用一个五层的激活函数使用 tanh ,并使用 normalized initialization 进行初始化,最终得到了 50.74% 的错误率。

这里写图片描述

图像说明:

Shapeset 数据集上的使用各种激活函数和初始化方法的测试错误率,后面有字母 N 的激活函数表示的是使用 normalized initialization 初始化方法

上面这个图像还说明了一件有意思的事情,sigmoid 激活函数的网络深度不能超过5层

Table 1:

TYPEShapesetMNISTCIFAR-10ImageNet
Softsign16.271.6455.7869.14
Softsign N16.061.7253.868.13
Tanh27.151.7655.970.58
Tanh N15.601.6452.9268.57
Sigmoid82.612.2157.2870.66

表说明:

使用不同激活函数和初始化策略的 5 层的神经网络的测试错误率。激活函数带有 N 表示的是使用 normalized initialization 正则化策略。 粗体的结果与无假设检验下的非粗体结果有统计学差异,p = 0.005。

继续正文

这些结果说明了激活和初始化的选择的效果。作为参考,我们在图11中引用了在使用去噪自动编码器进行无监督的预训练之后从初始化获得的监督调整的误差曲线。对于每个网络,单独选择学习率来最小化验证集上的错误。 我们可以在Shapeset 数据集上进行测试,由于任务困难,我们在学习过程中观察到重要的饱和度,这可能解释了归一化初始化或 softsign 激活函数的效应更明显。

从这些错误曲线中我们可以推断出以下信息:

  • 使用传统的 sigmoid 或 tanh 激活函数和标准初始化方法效果并不好,它们收敛缓慢而且往往会陷入局部最优。
  • 使用 softsign 激活函数看上去比 tanh 网络对初始化方法具有更好的鲁棒性
  • 对于 tanh 网络,使用 normalized initialization 初始化方法对提升性能很有用,可能是因为层与层之间的激活值和梯度值得以保持。

其他方法可以减轻学习期间层之间的差异,例如利用二阶信息为每个参数分别设置学习率。 例如,我们可以利用 Hesian 矩阵的对角线(LeCun等,1998b)或梯度方差估计。 这两种方法都已经应用于具有双曲正切和标准初始化的以及数据集 Shapeset 上。 我们观察到性能增益,但没有达到归一化初始化获得的结果。 此外,我们通过将归一化初始化与二阶方法组合来观察到进一步的增益:估计的Hessian可能会关注单元之间的差异,而不必纠正层之间的重要初始差异。

在所有报告的实验中,我们每层使用相同数量的单位。 然而,我们证实当层大小增加(或减少)层数时,我们获得相同的增益。

从上面这些研究中可以得出以下结论

  • 通过监测迭代过程中层与层之间的梯度值和激活值对于理解深层网络中的困难是一个有力的工具。
  • Sigmoid 激活函数在使用小随机值初始化时应该尽量避免使用(在0附近处于饱和状态)
  • 保持层间转换,使得激活和渐变都能够很好地发挥作用似乎是有帮助的,并且允许消除纯监督深层网络与预先使用无监督学习训练的深层网络之间的差异的很大一部分。
  • 我们的许多观察结果仍然无法解释,提示进一步研究以更好地了解深层网络的梯度和训练动力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值