Bengio Deep Learning 初探 —— 第6章:前馈神经网络

转自:https://blog.csdn.net/qsczse943062710/article/details/61912464?locationNum=9&fps=1

基于梯度的学习

      1)深度前馈网络(deep feedforward network),又名前馈神经网络或多层感知机(multilayer perceptron,MLP),前馈的意思是指在这个神经网络里信息只是单方向的向前传播而没有反馈机制。

      2)整流线性单元(rectified linear unit,ReLU),拥有一些优美的性质,比sigmoid函数更适合当隐藏单元,其激活函数为:g(z)=max{0,z}

      3)代价函数(cost function):3)通过变分法得到的平均绝对误差和均方误差都不能很好的适用于基于梯度的优化方法,如当某个神经元趋于饱和,它的梯度将会很小很小,因此一般采用交叉熵代价函数:C=1/mΣyloga+(1-y)log(1-a),a为神经元的输出。交叉熵代价函数可以避免上述的梯度饱和问题,并且能在我们预测错误时都能有一个较大的代价。

输出单元

      4)线性单元:基于仿射变换的输出单元称为线性单元,常用来产生条件高斯分布的均值,因为线性模型不会饱和,基于梯度的算法会工作的较好。

      5)基于二分类Bernoulli输出分布的sigmoid单元: 
      假设我们使用线性单元来进行学习:P(y=1|x)=max{0,min{1,wTx+b}} 
      我们并不能使用梯度下降来高效地训练它。任何时候当 wTx+b处于单位区间外时,模型的输出对它的参数的梯度都将为0。我们希望使用一种方法保证无论何时,模型给出错误答案的时候总有一个很强的梯度。 
      sigmoid函数定义的输出单元就可以满足这一点:y = σ(wTx+b),这里σ即sigmoid函数。具体推导见书P158页,这里附上deep learning中文PDF地址

      6)基于多分类Multinoulli输出分布的softmax单元:Multinoulli分布可以说是Bernoulli分布的扩展,其特性与Bernoulli分布相似,两者都会饱和,但是sigmoid函数具有单个输出,当它的输入极端负或者极端正时会饱和;对于 softmax 的情况,它有多个输出值。当输入值之间的差异变得极端时,这些输出值可能饱和。softmax的形式:softmax(z)i=exp(zi)/Σexp(zj)

      其对数log softmax(z)i=zi-log Σexp(zj) 
      注意到,第一项表示输入zi总是对代价函数有直接的贡献。因为这一项不会饱和,所以即使zi对上式的第二项的贡献很小,学习依然可以进行。当最大化对数似然时,第一项鼓励zi 被推高,而第二项则鼓励所有的 z 被压低。为了对第二项log Σexp(zj)有一个直观的理解,注意到这一项可以大致近似为maxj zj 这种近似是基于对任何明显小于 maxj zj 的 zk,exp(zk) 都是不重要的。我们能从这种近似中得到的直觉是,负对数似然代价函数总是强烈地惩罚最活跃的不正确预测。 
      除了对数似然之外的许多目标函数对 softmax 函数不起作用。具体来说,那些不使用对数来抵消 softmax 中的指数的目标函数,当指数函数的变量取非常小的负值时会造成梯度消失,从而无法学习。 
      观察到,对所有的输入都加上一个相同常数时 softmax 的输出不变。为此导出softmax的稳定版本:softmax(z)=softmax(z-maxizi),变换后的形式允许我们在对 softmax 函数求值时只有很小的数值误差,即使是当 z包含极正或者极负的数时。 
PS:Softmax由来,这个函数更接近于 argmax 函数而不是max 函数。“soft”这个术语来源于 softmax 函数是连续可微的。“argmax”函数的结果表示为一个one-hot向量(只有一个元素为 1,其余元素都为 0 的向量),不是连续和可微的。softmax 函数因此提供了 argmax 的“软化”版本。max函数相应的软化版本是 softmax(z)Tz。可能最好是把 softmax 函数称为 “softargmax”,但当前名称是一个根深蒂固的习惯了。

      7)异方差(heteroscedastic)模型:根据x的不同预测出具有不同方差的y,实现它的典型方法是使用精度而不是方差来表示高斯分布,在多维变量的情况下,最常见的是使用一个对角精度矩阵diag(β)(正定,特征值为协方差矩阵特征值的倒数).这个公式适用于梯度下降,因为由 β 参数化的高斯分布的对数似然的公式仅涉及乘法和加法。乘法、加法和对数运算的梯度表现良好。而方差会涉及到除法,可能会导致梯度的不稳定。

      8)多峰回归和混合密度网络:预测条件分布 p(y | x)的实值,该条件分布对于相同的 x 值在 y 空间中有多个不同的峰值。 
      将 Gaussian混合作为其输出的神经网络通常被称为混合密度网络。该网络需要输出三个值:,并且这三个值满足一定的约束,其中包括:第一项中的c是潜变量,在n个不同组件上形成Multinoulli分布;第二项,求负对数似然时要根据每个组件产生这个样例的概率来为每个组件赋予不同的权重;第三项,不同于一个高斯组件是一个对角矩阵。 
      基于梯度的优化方法对于混合条件 Gaussian(作为神经网络的输出)可能是不可靠的:解决方案:一种解决方法是梯度截断 (clip gradient),另外一种是启发式梯度放缩。

隐藏单元

      有些隐藏单元并不是在所有的输入点都是可微的,基于梯度的学习能良好的工作,部分原因是神经网络训练算法通常不会达到代价函数的最小值,而是仅仅显著地减小它的值。计算机在计算底层值真正为0的时候使用的是一个被舍入为0的极小的量。 
PS:除非另有说明,大多数的隐藏单元都可以描述为接受输入向量 x,计算仿射变换,然后使用一个作用于每个元素的非线性函数g(z)。大多数隐藏单元的区别仅仅在于激活函数g(z)的形式。

      1)整流线性单元(Rectified Linear Unit,ReLU):以g(z)=max{0,z}为激活函数的单元,一般用作隐藏层。 
      特点: 
            1.整流线性单元处于激活状态它的导数都能保持较大; 
            2.梯度不仅大而且一直(激活状态时恒为1) 
            3.整流操作的二次导数几乎处处为0 
      可以看到,ReLU在0点处是无法接收到梯度的,并且它的令一个缺陷是它们不能通过基于梯度的方法学习那些使它们激活为零(输入小于0)的样例。

      2)ReLU的扩展:为了解决RuLU的一些缺点而提出的,主要是基于在z<0时使用一个非0的斜率来保证在小于0时也有梯度:g(z,α)i=max{0,zi}+αimin(0,zi),这样能使得它们的行为更接近于线性从而使得优化更简单。 
      绝对值整流:固定αi=1,主要用于图像的对象识别。 
      渗漏线性整流单元(leaky ReLU):固定αi为一个小值 
      参数化ReLU:将αi作为模型参数进行学习。

      3)Maxout单元:将z划分成具有k个值的组,每个单元都输出其中一组的最大元素。 
Maxout 
      优点: 
            1.maxout 单元可以学习具有多达 k 段的分段线性的凸函数,并且当k足够大时,Maxout单元可以以任意精读近似任意凸函数。maxout 单元因此可以视为学习激活函数本身而不仅仅是单元之间的关系。 
            2.在某些情况下,需要更少的参数可以获得一些统计和计算上的优点。具体来说,如果由 n 个不同的线性过滤器描述的特征可以在不损失信息的情况下,用每一组 k 个特征的最大值来概括的话,那么下一层可以获得k倍更少的权重数。 
            3.每个单元由多个过滤器驱动,具有一些冗余来帮助它们抵抗一种被称为灾难遗忘的现象。

      缺点:每个单元需要K个权重向量来参数化而不是一个,需要更多的正则化,但是在训练集很大并且每个单元分的块数很低的话,可以不使用正则化也能正常工作。

      4)sigmoid和双曲正切函数 
  sigmoid:g(z)=σ(z)=1/(1+exp(-z)) 
      双曲正切:g(z)=tanh(z)=2σ(2z)-1 
sigmoid单元的广泛饱和性(只有在z接近0时才对输入敏感)会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。它们作为输出单元可以与基于梯度的学习相兼容,如果使用了一个合适的代价函数来抵消sigmoid的饱和性的话。在这,双曲正切函数表现的更好。

      5)其他的一些隐藏单元: 
      1.MNIST数据集上的h=cos(Wx+b); 
      2.softmax单元(sigmoid在多分类的扩展,尽管它一般被用作输出单元) 
      3.径向基函数(radial basis function,RBF):该函数在x接近模板W时更加活跃,对于大部分x都饱和到0,很难优化;

 

RBF

 

      4.softplus函数:g(a)=log(1+exp(a)),整流线性单元的平滑版本。然而没有ReLU 效果好。

      5.硬双曲正切函数:g(a)=max(-1,min(1,a))

结构设计

      1)结构是指网络的整体结构,以及它们该如何连接,在这些链式结构中,主要的结构考虑是选择网络的深度和每一层的宽度。

      2)通用近似性质:具有隐藏层的前馈网络提供了一种通用近似框架来近似非线性函数。 
      通用近似定理 (universal approximation theorem)表明,一个前馈神经网络如果具有线性输出层至少一层具有任何一种“挤压”性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。 
      即只要我们有足够多的MLP就一定能表示这个函数,但这不能保证我们的训练算法一定能学习到这个函数,因为可能我们的优化算法找不到期望函数的参数值或者因为过拟合而选择了错误的函数。 
存在一些函数族能够在网络的深度大于某个值 d 时被高效地近似,而当深度被限制到小于或等于 d 时需要一个远远大于之前的模型。 
      用深度整流网络表示的函数可能需要浅层网络(一个隐藏层)指数级的隐藏单元才能表示。更确切的说,他们说明分段线性网络(可以通过整流非线性或maxout 单元获得)可以表示区域的数量是网络深度的指数级的函数。

      具有d个输入,深度为l,每个隐藏层有n个单元的深度整流网络可以描述的线性区域的数量为: 

 

      在每个单元具有K个过滤器的maxout网络中,线性区域的数量为:O(k(l-1)+d)

      3)反向传播(back propagation),神经网络中用来求解参数的核心算法,类似SGD,通过从前往后求解梯度的方式来使参数向代价函数减小的方向靠近。 
      输入 x 提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 y。这称之为前向传播 (forward propagation)。在训练过程中,前向传播可以持续向前直到它产生一个标量代价函数 J(θ)。反向传播(back propagation)允许代价函数的信息向后流动,以便计算梯度(仅仅指用来计算梯度的方法)。 
      算法原理和公式推导可以参考https://my.oschina.net/findbill/blog/529001

      4)交叉熵损失函数(cross entropy cost function):Logistic回归和神经网络中采用的损失函数,其一般形式:C=-1/nΣ[y lna+(1-y)ln(1-a)]。可以证明,二次代价函数在参数更新时有一项是关于激活函数的导数,在某些情况下,如果该神经元趋于饱和,那么梯度就会接近于0,即使此时的误差很大我们得到的代价函数值也会偏小从而导致参数更新缓慢,而交叉熵能在任何误分类的情况下使得损失函数很大(直观上理解,使用交叉熵进行参数更新时,更新步长的大小与神经元的梯度大小无关而仅仅和预测值与真值的差值有关),从而保证在反向传播的过程中使得参数能够更快的收敛。

猜你喜欢

转载自blog.csdn.net/Song_Esther/article/details/82769357