《全连接的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)

其中:

J1J2J3的计算方法分别如下:

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

    (24)

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

4.2网络代价函数的偏导数

网络代价函数的偏导数:

其中:

(1)偏执项为1时

    (25)

(2)偏执项为b时

    (26)

4.3敏感度的计算

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

    (27)

5计算流程

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

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

    利用式 (23)

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

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

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

全连接的BP神经网络的更多相关文章

  1. 直观理解神经网络最后一层全连接+Softmax

    目录 写在前面 全连接层与Softmax回顾 加权角度 模板匹配 几何角度 Softmax的作用 总结 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 这篇文章将从3 ...

  2. RBF神经网络和BP神经网络的关系

    作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. TensorFlow------单层(全连接层)实现手写数字识别训练及测试实例

    TensorFlow之单层(全连接层)实现手写数字识别训练及测试实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist ...

  4. 全连接BP神经网络

    前馈神经网络 前馈神经网络(feedforward neural network)是最朴素的神经网络,通常我们所说的前馈神经网络有两种,一种叫反向传播网络(Back propagation Netwo ...

  5. TensorFlow之DNN(二):全连接神经网络的加速技巧(Xavier初始化、Adam、Batch Norm、学习率衰减与梯度截断)

    在上一篇博客<TensorFlow之DNN(一):构建“裸机版”全连接神经网络>中,我整理了一个用TensorFlow实现的简单全连接神经网络模型,没有运用加速技巧(小批量梯度下降不算哦) ...

  6. TensorFlow之DNN(一):构建“裸机版”全连接神经网络

    博客断更了一周,干啥去了?想做个聊天机器人出来,去看教程了,然后大受打击,哭着回来补TensorFlow和自然语言处理的基础了.本来如意算盘打得挺响,作为一个初学者,直接看项目(不是指MINIST手写 ...

  7. MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(三)

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 在前两篇文章MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网 ...

  8. 基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络

    包含一个隐含层的全连接神经网络结构如下: 包含一个隐含层的神经网络结构图 以MNIST数据集为例,以上结构的神经网络训练如下: #coding=utf-8 from tensorflow.exampl ...

  9. Python3 卷积神经网络卷积层,池化层,全连接层前馈实现

    # -*- coding: utf-8 -*- """ Created on Sun Mar 4 09:21:41 2018 @author: markli " ...

随机推荐

  1. jsp-javabean-setproperty介绍

    李兴华<java web开发实战经典>第7章关于javabean的讲解中说道:<jsp:setProperty>标签一共有4种使用方法·下面列出了4种操作语法的格式:   设置 ...

  2. 从源码角度深入理解Handler

    为了获得良好的用户体验,Android不允许开发者在UI线程中调用耗时操作,否则会报ANR异常,很多时候,比如我们要去网络请求数据,或者遍历本地文件夹都需要我们在新线程中来完成,新线程中不能更新UI, ...

  3. Java基础知识强化之IO流笔记28:BufferedOutputStream / BufferedInputStream(字节缓冲区流) 之BufferedOutputStream写出数据

    1. BufferedOutputStream / BufferedInputStream(字节缓冲区流)的概述 通过定义数组的方式确实比以前一次读取一个字节的方式快很多,所以,看来有一个缓冲区还是非 ...

  4. 域名解析-delphi 源码

    unit Unit1; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  5. SQL使用存儲過程訪問不同服務器

    用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服 ...

  6. 收集统计信息让SQL走正确的执行计划

    数据库环境:SQL SERVER 2005 今天在生产库里抓到一条跑得慢的SQL,语句不是很复杂,返回的数据才有800多行, 却执行了34分钟,甚至更久. 先看一下执行结果 我贴一下SQL. SELE ...

  7. librarynotfoundforlPodsAFNetworking解决放案

    http://www.it165.net/pro/html/201503/36422.html

  8. React初探

    经过几天根据官方文档和博园中一些大牛的文章,在了解过基础的语法和组件后,总结一下: 1.第一件事就是分析界面,理想状态下是让每个组件只做一件事情,也就是单一职责,相互嵌套.我认为: 构建组件树,整体的 ...

  9. javascript入门学习笔记2

    JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: 实例 var x // x 为 undefined var x = 6; // x 为数字 var x = "Bil ...

  10. 将数字n转换为字符串并保存到s中

    将数字n转换为字符串并保存到s中 参考 C程序设计语言 #include <stdio.h> #include <string.h> //reverse函数: 倒置字符串s中各 ...