'); })();

浅谈深度学习基础(上)

编辑时间: 2017-12-26 22:43:24    关键字:

 然后是DBN,DBN也即深度信念网络,深度信念网络可使用多个RBM堆叠而成,并可使用梯度下降法和反向传播算法(BP)进行调优(使用BP对整个DBN微调,对RBM的无监督预训练独立用CD算法)。

  具体的说,在讲自动编码器的时候,我们举了一个逐层贪婪预训练方法的例子,这种无监督逐层预训练是一种通用技术,也就是说,不仅前面的自编码器可以逐层预训练,RBM堆叠起来的DBN也可以进行无监督的逐层预训练,方法与自编码器的训练过程类似,主要分为如下两步:

  第一步:分别单独无监督的训练每一层RBM网络,确保特征向量映射到不同特征空间时,都尽可能多地保留特征信息。

  举个例子,隐含层RBM%20H可以看做是RBM%20H+1的可见层。第一个RBM的输入层即是整个网络的输入层,逐层贪婪预训练的工作模式如下:

  • 通过CD算法对所用训练样本训练第一个RBM
  • 将第一个RBM的隐含层作为第二个RBM的输入层数据进行训练,同样采用CD算法
  • 对所有层重复上面的过程
  • 和栈式自编码器一样,通过预训练后,网络堆叠一个或多个层间全连接的RBM隐含层进行扩展,这构成了一个可以通过反向传播进行微调的多层感知机。

  第二步:在DBN的最后一层设置BP网络,接受RBM的输出特征向量作为它的输入特征向量,有监督地训练实体关系分类器。每一层RBM网络只能确保自身层内权值对该层特征向量映射达到最优,并不是对整个DBN的特征向量映射达到最优,所以反向传播网络还将错误信息自顶向下传播至每一层RBM,微调整个DBN网络。

  每次训练都使当前RBM隐层激活概率无限接近于可见层,实际上,这样的贪婪过程达到了近似的最大似然学习,而且这个学习过程不需要标签信息,用的是可见层输入作为调整依据,所以是无监督的。

  RBM网络训练模型的过程可以看做对一个深层BP网络权值参数的初始化,使DBN克服BP网络因随机初始化权值参数而容易陷入局部最优和训练时间过长的问题点。

  上述训练DBN的过程,第一步叫做预训练,第二步叫做微调。最上面有监督学习的那一层,根据具体的应用可以换成任何分类器模型,不必是BP网络。

  这个过程和栈式自编码器很相似,只是用RBM将自编码器进行替换,用CD算法训练RBM替代BP算法训练自编码器。

  这里再提一下反向传播算法。

  反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。

  BP算法主要分为两个阶段:

  第一个阶段是激励传播:每次迭代中的传播环节也分为两步:1.(前向传播阶段)将训练送入网络以获得激励响应。2.(反向传播阶段)将激励响应与训练输入对应的目标输出求差,从而获得隐层和输出层的响应误差。

  第二个阶段是权重更新:对于每个突触上的权重,更新步骤也有两步(参见上篇文章当中对梯度下降算法的讲述):1.得到对应的梯度。2.用当前权重减去梯度。

 

三层网络BP算法示例

  BP算法实际上就是应用在多层网络中的梯度下降算法,原理与梯度下降算法相同,但区别在于BP算法需要求不同层连接所对应的梯度,而不是像普通的梯度下降算法那样,只需处理一层的问题。

  利用BP算法计算输出层连接的梯度时,过程与普通梯度下降算法相同;但如果j是网络中任一内层神经元,求损失函数E对于相应连接权重wij(i是j下一层的神经元,wij即两者之间连接的权重)的偏导数就不太容易了,需要先求对oj的偏导。

  考虑E为接受来自神经元j输入的所有神经元L = u,v,...,w输入的函数:

 
 

  对oj取全微分,可以得到该导数的一个递归表达式:

 

 

  也即,只要知道所有下一层(指离输出层更近的一层)的输出ol的导数,即可计算oj的导数,把它们放在一起:

  其中:

  所以得到BP算法的权重迭代公式(与普通梯度下降法参数迭代公式形式类似):

 

 

  以上即为BP算法推导的全过程。

  BP算法说到底是种梯度下降算法,前面也提到过,梯度下降法能得到局部最优,但并不能保证一定会得到全局最优。我们通常采用RBM%20pre-train的方法来避免其收敛到局部最小值。

  根据前面的内容,好像稀疏自动编码器(sparse%20autoencoder)堆叠得到栈式自动编码器(stacked%20autoencoders),RBM堆叠得到DBN;而且二者都可以被用来做有监督DNN的预训练,用的还都是同样的无监督逐层预训练方法,二者实际上也都是起到了特征探测器的作用,都是给定一个输入,得到一个中间层,并利用中间层去重构一个和输入相同的样本,然后利用不同的评价指标,通过某种优化方法,尽可能的缩小输出样本和输入样本之间的差异。那它们的区别在什么地方呢?

  首先Autocoder是一个确定模型,它的输入和输出之间有着严格的数学公式;而RBM源于BM,源于玻尔兹曼分布,是一个基于概率的不确定模型。

  Autocoder训练时采用BP算法,直接做梯度下降(看成只有一层的BP神经网络),而RBM采用CD-k算法,只能利用k次吉布斯采样的结果去近似的计算梯度。

深度神经网络的训练

  一般对DNN的训练要从两个角度去考虑,第一个是如何让网络在训练集上有良好的表现,第二个是如何在训练集表现良好的前提下,使其在测试集上也有同样的表现。

如何在训练集上调优

选择合适的损失函数

  前面我们默认采用的都是平方误差损失函数,但很多时候,平方误差损失函数并不是我们最好的选择,比如当我们用Softmax作为输出层时,就更倾向于选择交叉熵损失函数。

 

交叉熵和平方误差损失函数曲面

  前面我们也提到过熵的定义,知道熵是一个不确定性的测度,也就是说,我们对于某件事情知道得越多,那么,熵就越小,因而对于试验的结果我们越不感到意外。交叉熵的概念就是用来衡量估计模型与真实概率分布之间的差异情况的。

多输入单输出神经元交叉熵损失函数

多输入单输出神经元交叉熵损失函数

  其中y为期望的输出,a为神经元实际的输出(a=σ(z), where z=∑Wj*Xj+b)。

  与方差误差函数一样,交叉熵函数同样拥有两个性质,一个是非负性,一个是当真实输出a与期望输出y接近时,损失函数的函数值接近于0。

  另外,它可以克服方差代价函数更新权重过慢的问题。我们看看它的导数:

浅谈深度学习基础

 

浅谈深度学习基础

 

  从式子中我们可以看到,权重的更新是受σ(z)−y这一项影响,也即误差越大,权重更新速度越快,误差越小,更新速度越慢。这项性质在上面的交叉熵损失函数曲面图中也可以体现出来,误差越大,曲面越陡峭,偏导也就越大,梯度下降也就越快。

推荐热图
2010-2016 可思数据版权所有 ICP备案:京ICP备14056871号