码迷,mamicode.com
首页 > 其他好文 > 详细

全连接的BP神经网络

时间:2015-08-26 15:18:04      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

《全连接的BP神经网络》

本文主要描述全连接的BP神经网络的前向传播和误差反向传播,所有的符号都用Ng的Machine learning的习惯。下图给出了某个全连接的神经网络图。

技术分享

  1. 前向传播

    1. 前向传播

分别计算第l层神经元的输入和输出;

  1. 偏执项为1时

向量整体形式:

技术分享

分量形式:

????技术分享

  1. 偏执项为b时

向量整体形式:

技术分享

分量形式:

????技术分享

  1. 网络误差

    1. 偏执项为1时

对于某一个输入样本,它的输出为技术分享,它所对应的真实输出应该为技术分享,那么,该样本对应的误差E

????技术分享 ????

注意到输出层的第k个神经元的输出技术分享可以计算如下:

????技术分享 ????

那么,误差E可以展开至隐藏层(第L-1层)的形式

????技术分享 ????

又注意到隐藏层(第L-1层)的第j个神经元的输出技术分享可以计算如下:

????技术分享 ????

那么,误差E进一步展开至隐藏层(第L-2层)

????技术分享 ????

可以发现,E是权值技术分享的函数。

  1. 偏执项为b时

对于某一个输入样本,它的输出为技术分享,它所对应的真实输出应该为技术分享,那么,该样本对应的误差E

????技术分享 ????

注意到输出层的第k个神经元的输出技术分享可以计算如下:

????技术分享 ????

那么,误差E可以展开至隐藏层(第L-1层)的形式

????技术分享 ????

又注意到隐藏层(第L-1层)的第j个神经元的输出技术分享可以计算如下:

????技术分享 ????

那么,误差E进一步展开至隐藏层(第L-2层)

????技术分享 ????

可以发现,E是权值技术分享和偏执项技术分享的函数。

  1. 误差反向传播中的敏感度

技术分享

某一层的敏感度的定义为:网络的误差对该层的输入的偏导数,即技术分享

  1. 偏执项为1时的敏感度

    1. 输出层的敏感度

输出层(第L层)的第k个神经元的敏感度定义如下:

????技术分享

为了计算该敏感度,利用链式法则,引入中间变量技术分享(第L层的第k个神经元的输出):

????技术分享 ????

首先,计算技术分享

技术分享

然后,计算技术分享

技术分享

这里的f为sigmoid函数,有:技术分享

从而可以得到:

????技术分享 ????

那么,第L层的所有神经元的敏感度为:

????技术分享 ????

  1. 其他层

计算第L-1层的第j个神经元的敏感度,定义如下:

????技术分享

为了计算该敏感度,利用链式法则,引入中间变量技术分享(第L-1层的第j个神经元的输出):

????技术分享 ????

首先,计算技术分享:????

技术分享

其中:技术分享

则有:

????技术分享

然后,计算技术分享

技术分享

从而可以得到:

????技术分享 ????

其中:技术分享

那么,第L-1层的所有神经元的敏感度为

????技术分享 ????

以上推导是由第L层的敏感度计算第L-1层的敏感度,那么,利用递推方法可以得到第l层的敏感度的计算方法(l=L-1,…,2):

????技术分享 ????

  1. 偏执项为b时的敏感度

推导过程中,只有一处发生改变,即隐藏层的技术分享计算式发生如下改变,但结果并没有改变,所以不会对最终的敏感度的计算公式造成影响:

技术分享

  1. 梯度的计算

    1. 单个样本(偏执项为1时)的梯度

      此时的待优化参数只有权值矩阵中的元素,计算误差E对第l层的权值矩阵的偏导数:

????技术分享

对于其中的某一个元素,计算如下:

技术分享

那么,整个求导矩阵计算如下:

技术分享

即:技术分享

  1. 单个样本(偏执项为b时)的梯度

    此时的待优化参数为权值矩阵中的元素和偏执项b;

    首先计算误差E对第l层的权值矩阵的偏导数:

????技术分享

对于其中的某一个元素,计算如下:

技术分享

那么,整个求导矩阵计算如下:

技术分享

接下来,计算误差E对第l层的偏执项矩阵的偏导数:

技术分享

对于其中的某一个元素,计算如下:

技术分享

所以,整个偏执项求得到计算如下:

技术分享

  1. m个样本的梯度求解(未加入其他惩罚项)

如前所述,对于单个样本而言,它的代价函数为E,现在有m个训练样本,它的代价函数应该为所有样本的代价函数的均值,用Ei表示第i个训练样本的代价函数(也就是前文一直使用的代价函数),E表示所有样本的代价函数,则它们有如下关系:

????技术分享

则有:

????技术分享 ????

如果有偏执项b的话,则有

????技术分享 ????

如果有m个样本,前面计算所得得到的技术分享技术分享都是矩阵,它们的每一列是每个样本对应的第l层的敏感度和输出值。那么,可以按照如下方式计算m个样本所对应的梯度值:

  • 偏执项为1

????技术分享 ????

  • 偏执项为b

????技术分享 ????

????技术分享 ????

  1. 加了正则化项和稀疏项后

    1. 网络误差

      加入了正则化项和稀疏项后的网络误差计算公式如下:

????技术分享 ????

其中:

技术分享

J1J2J3的计算方法分别如下:

技术分享k个隐藏层中j个神经元的相对熵技术分享的计算公式如下:

????技术分享 ????

其中:技术分享技术分享为第k个隐藏层中j个神经元相对于第i个输入样本的激励值,而技术分享为第k个隐藏层中j个神经元相对于所有输入样本激励值的均值。

  1. 网络代价函数的偏导数

网络代价函数的偏导数:

技术分享

其中:

技术分享

技术分享

技术分享

  • 偏执项为1

????技术分享 ????

  • 偏执项为b

????技术分享 ????

  1. 敏感度的计算

加入了权值惩罚项和稀疏项后,输出层的敏感度计算不发生变化,而其余各层的敏感度公式变为如下:

????技术分享 ????

  1. 计算流程

    1. 利用前向传播算法计算各层的激励值

      技术分享

    2. 计算整个网络的代价函数

      利用式

      技术分享

    3. 利用反向传播算法计算各层的敏感度

      技术分享

    4. 计算代价函数对权值矩阵和偏执项的梯度

      利用式计算代价函数对权值矩阵和偏执项的梯度

      技术分享

全连接的BP神经网络

标签:

原文地址:http://www.cnblogs.com/lutingting/p/4760426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!