全连接的BP神经网络
《全连接的BP神经网络》
本文主要描述全连接的BP神经网络的前向传播和误差反向传播,所有的符号都用Ng的Machine learning的习惯。下图给出了某个全连接的神经网络图。
1前向传播
1.1前向传播
分别计算第l层神经元的输入和输出;
1.1.1偏执项为1时
向量整体形式:
分量形式:
1.1.2偏执项为b时
向量整体形式:
分量形式:
1.2网络误差
1.2.1偏执项为1时
对于某一个输入样本,它的输出为,它所对应的真实输出应该为,那么,该样本对应的误差E为
(1)
注意到输出层的第k个神经元的输出可以计算如下:
(2)
那么,误差E可以展开至隐藏层(第L-1层)的形式
(3)
又注意到隐藏层(第L-1层)的第j个神经元的输出可以计算如下:
(4)
那么,误差E进一步展开至隐藏层(第L-2层)
(5)
可以发现,E是权值的函数。
1.2.2偏执项为b时
对于某一个输入样本,它的输出为,它所对应的真实输出应该为,那么,该样本对应的误差E为
(6)
注意到输出层的第k个神经元的输出可以计算如下:
(7)
那么,误差E可以展开至隐藏层(第L-1层)的形式
(8)
又注意到隐藏层(第L-1层)的第j个神经元的输出可以计算如下:
(9)
那么,误差E进一步展开至隐藏层(第L-2层)
(10)
可以发现,E是权值和偏执项的函数。
2误差反向传播中的敏感度
某一层的敏感度的定义为:网络的误差对该层的输入的偏导数,即
2.1偏执项为1时的敏感度
2.1.1输出层的敏感度
输出层(第L层)的第k个神经元的敏感度定义如下:
为了计算该敏感度,利用链式法则,引入中间变量(第L层的第k个神经元的输出):
(11)
首先,计算:
然后,计算:
这里的f为sigmoid函数,有:
从而可以得到:
(12)
那么,第L层的所有神经元的敏感度为:
(13)
2.1.2其他层
计算第L-1层的第j个神经元的敏感度,定义如下:
为了计算该敏感度,利用链式法则,引入中间变量(第L-1层的第j个神经元的输出):
(14)
首先,计算:
其中:
则有:
然后,计算:
从而可以得到:
(15)
其中:
那么,第L-1层的所有神经元的敏感度为
(16)
以上推导是由第L层的敏感度计算第L-1层的敏感度,那么,利用递推方法可以得到第l层的敏感度的计算方法(l=L-1,…,2):
(17)
2.2偏执项为b时的敏感度
推导过程中,只有一处发生改变,即隐藏层的计算式发生如下改变,但结果并没有改变,所以不会对最终的敏感度的计算公式造成影响:
3梯度的计算
3.1单个样本(偏执项为1时)的梯度
此时的待优化参数只有权值矩阵中的元素,计算误差E对第l层的权值矩阵的偏导数:
对于其中的某一个元素,计算如下:
那么,整个求导矩阵计算如下:
即:
3.2单个样本(偏执项为b时)的梯度
此时的待优化参数为权值矩阵中的元素和偏执项b;
首先计算误差E对第l层的权值矩阵的偏导数:
对于其中的某一个元素,计算如下:
那么,整个求导矩阵计算如下:
接下来,计算误差E对第l层的偏执项矩阵的偏导数:
对于其中的某一个元素,计算如下:
所以,整个偏执项求得到计算如下:
3.3m个样本的梯度求解(未加入其他惩罚项)
如前所述,对于单个样本而言,它的代价函数为E,现在有m个训练样本,它的代价函数应该为所有样本的代价函数的均值,用Ei表示第i个训练样本的代价函数(也就是前文一直使用的代价函数),E表示所有样本的代价函数,则它们有如下关系:
则有:
(18)
如果有偏执项b的话,则有
(19)
如果有m个样本,前面计算所得得到的和都是矩阵,它们的每一列是每个样本对应的第l层的敏感度和输出值。那么,可以按照如下方式计算m个样本所对应的梯度值:
(1)偏执项为1
(20)
(2)偏执项为b
(21)
(22)
4加了正则化项和稀疏项后
4.1网络误差
加入了正则化项和稀疏项后的网络误差计算公式如下:
(23)
其中:
J1、J2和J3的计算方法分别如下:
第k个隐藏层中j个神经元的相对熵的计算公式如下:
(24)
其中:,为第k个隐藏层中j个神经元相对于第i个输入样本的激励值,而为第k个隐藏层中j个神经元相对于所有输入样本激励值的均值。
4.2网络代价函数的偏导数
网络代价函数的偏导数:
其中:
(1)偏执项为1时
(25)
(2)偏执项为b时
(26)
4.3敏感度的计算
加入了权值惩罚项和稀疏项后,输出层的敏感度计算不发生变化,而其余各层的敏感度公式变为如下:
(27)
5计算流程
- 利用前向传播算法计算各层的激励值
- 计算整个网络的代价函数
利用式 (23)
- 利用反向传播算法计算各层的敏感度
- 计算代价函数对权值矩阵和偏执项的梯度
利用式(26)计算代价函数对权值矩阵和偏执项的梯度
全连接的BP神经网络的更多相关文章
- 直观理解神经网络最后一层全连接+Softmax
目录 写在前面 全连接层与Softmax回顾 加权角度 模板匹配 几何角度 Softmax的作用 总结 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 这篇文章将从3 ...
- RBF神经网络和BP神经网络的关系
作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- TensorFlow------单层(全连接层)实现手写数字识别训练及测试实例
TensorFlow之单层(全连接层)实现手写数字识别训练及测试实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist ...
- 全连接BP神经网络
前馈神经网络 前馈神经网络(feedforward neural network)是最朴素的神经网络,通常我们所说的前馈神经网络有两种,一种叫反向传播网络(Back propagation Netwo ...
- TensorFlow之DNN(二):全连接神经网络的加速技巧(Xavier初始化、Adam、Batch Norm、学习率衰减与梯度截断)
在上一篇博客<TensorFlow之DNN(一):构建“裸机版”全连接神经网络>中,我整理了一个用TensorFlow实现的简单全连接神经网络模型,没有运用加速技巧(小批量梯度下降不算哦) ...
- TensorFlow之DNN(一):构建“裸机版”全连接神经网络
博客断更了一周,干啥去了?想做个聊天机器人出来,去看教程了,然后大受打击,哭着回来补TensorFlow和自然语言处理的基础了.本来如意算盘打得挺响,作为一个初学者,直接看项目(不是指MINIST手写 ...
- MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(三)
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 在前两篇文章MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网 ...
- 基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络
包含一个隐含层的全连接神经网络结构如下: 包含一个隐含层的神经网络结构图 以MNIST数据集为例,以上结构的神经网络训练如下: #coding=utf-8 from tensorflow.exampl ...
- Python3 卷积神经网络卷积层,池化层,全连接层前馈实现
# -*- coding: utf-8 -*- """ Created on Sun Mar 4 09:21:41 2018 @author: markli " ...
随机推荐
- WindowsService的调试方法
本人转载:http://www.cnblogs.com/xiebin1986/archive/2011/12/15/2288893.html 调试WindowsService,以前用过一个附加到进程的 ...
- python中的lambda表达
C++中的lambda表达式与C++11增加标准库,是一个简短的匿名的可调用对象,编译器会将其转化为一个匿名类的对象.lambda表达式的最大特点就是简短灵活.调用方便.它不须要处理非常复杂的逻辑.通 ...
- WPF组件开发之组件的基类
之前在网上看到很多关于组件开发的资料,但真正可以用到框架内的却很少.今天贴出自己做的组件,并适合大部分框架的代码. 组件开发需要先做出组件的基类,然后由其他的各类组件去继承这个基类,下面是组件基类的代 ...
- apache、mod_jk负载均衡与tomcat集群
最近需要搭建apache和tomcat的集群,实现静态网站直接通过apache访问,动态网站转交给tomcat处理,实现负载均衡和tomcat集群配置. apache安装 wget http://ap ...
- apache源码编译安装详解
查看是否安装 rpm -qa httpd 如果已安装,则卸载:rpm -e 卸载 --nodeps 不考虑意外 下载 wget http://mirrors.sohu.c ...
- JS 时间格式化函数
//时间格式化函数 Date.prototype.format = function (format) { var o = { "M+": this.getMonth() + 1, ...
- SQL 中case when then else 用法
SQL如下: SELECT DISTINCTsy_haken_type,sy_sagyo_type,sy_kokyaku_cdFROm tbl_syukeiWHERE (sy_sagyo_ymd be ...
- c语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)
(第一篇博文) 今天在一个交流群里见他们无聊,然后找到之前收藏的一些c语言题目放出去想让他们做,结果反倒是自己不会做,于是花了很多时间去想. 原题:张三说李四在说谎,李四说王五在说谎,王五说张三和李四 ...
- [功能帮助类] JsHelper--Javascript操作帮助类 (转载)
点击下载 JsHelper.rar 这个类是关于加密,解密的操作,文件的一些高级操作1.Javascript弹出信息,并跳转指定页面. 2.Javascript弹出信息,并返回历史页面3.Javasc ...
- Chart图形 [GDI+] OWCChart统计图的封装类 (转载)
点击下载 OWCChart.zip 利用OWC11进行作统计图的封装类. /// <summary> /// 类说明:进行作统计图的封装类 /// 联系方式:361983679 /// 更 ...