假设一个三层的神经网络结构图如下:

对于一个单独的训练样本x其二次代价函数可以写成:

C = 1/2|| y - aL||2 = 1/2∑j(yj - ajL)2

ajL=σ(zjL)

zjl = ∑kωjklakl-1 + bjl

代价函数C是ajL的函数,ajL又是zjL的函数,zjL又是ωjkL的函数,同时又是akL-1的函数......

证明四个基本方程(BP1-BP4),所有这些都是多元微积分的链式法则的推论

δjL = (∂C/∂ajL)σ'(zjL)                                                         (BP1)

δjl = ∑ωkjl+1δkl+1σ'(zjl)                                                    (BP2)

      ∂C/∂ωjk= δjlakl-1                                                                           (BP3)

∂C/∂bj= δjl                                                                                      (BP4)

1.让我们从方程(BP1)开始,它给出了输出误差δL的表达式。

δjL = ∂C/∂zjL

应用链式法则,我们可以就输出激活值的偏导数的形式重新表示上面的偏导数:

δjL = ∑(∂C/∂akL)(∂akL/∂zjL)

这里求和是在输出层的所有神经元k上运行的,当然,第kth个神经元的输出激活值akL只依赖于当k=j时第jth个神经元的带权输入zjL。所以当k≠j

时,∂akL/∂zjL=0。结果简化为:

δjL = (∂C/∂ajL)(∂ajL/∂zjL)

由于ajL=σ(zjL),右边第二项可以写成σ'(zjL),方程变成

δjL = (∂C/∂ajL)σ‘(zjL)

2.证明BP2,它给出了下一层误差δl+1的形式表示误差δl。为此我们要以δkl+1=∂C/∂zkl+1的形式重写 δjl = ∂C/∂zjl

δjl = ∂C/∂zjl

=∑(∂C/∂zkl+1)(∂zkl+1/∂zjl)

=∑(∂zkl+1/∂zjlkl+1

这里最后一行我们交换了右边的两项,并用δkl+1的定义带入。为此我们对最后一行的第一项求值,

注意:

zkl+1 = ∑jωkjl+1ajl + bkl+1 =  ∑jωkjl+1σ(zjl) + bkl+1 

做微分得到

∂zkl+1 /∂zjl = ωkjl+1σ'(zjl)

带入上式:

δjl = ∑ωkjl+1δkl+1σ'(zjl)

3.证明BP3。计算输出层∂C/∂ωjkL:

∂C/∂ωjkL = ∑m (∂C/∂amL)(∂amL/∂ωjkL )

这里求和是在输出层的所有神经元k上运行的,当然,第kth个神经元的输出激活值amL只依赖于当m=j时第jth个神经元的输入权重ωjkL。所以当k≠j

   时,∂amL/∂ωjkL=0。结果简化为:

      ∂C/∂ωjkL = (∂C/∂ajL)(∂ajL/∂zjL)*(∂zjL/∂ωjkL)

= δjLakL-1

计算输入层上一层(L-1):

∂C/∂ωjkL-1= (∑m(∂C/∂amL)(∂amL/∂zmL)(∂zmL/∂ajL-1))(/∂ajL-1/∂zjL-1)(∂zjL-1/∂ωjkL-1)

= (∑mδmLωmjL)σ'(zjL-1)akL-2

= δjL-1akL-2

对于处输入层的任何一层(l):

∂C/∂ωjkl = (∂C/∂zjl )(∂zjl/∂ωjkl ) = δjlakl-1

4.证明BP4。计算输出层∂C/∂bjL:

∂C/∂bjL = ∑m (∂C/∂amL)(∂amL/∂bjL )

这里求和是在输出层的所有神经元k上运行的,当然,第kth个神经元的输出激活值amL只依赖于当m=j时第jth个神经元的输入权重bjL。所以当k≠j

   时,∂amL/∂bjL=0。结果简化为:

      ∂C/∂bjL = (∂C/∂ajL)(∂ajL/∂zjL)*(∂zjL/∂bjL)

= δjL

计算输入层上一层(L-1):

∂C/∂bjL-1= (∑m(∂C/∂amL)(∂amL/∂zmL)(∂zmL/∂ajL-1))(/∂ajL-1/∂zjL-1)(∂zjL-1/∂bjL-1)

= (∑mδmLωmjL)σ'(zjL-1)

= δjL-1

对于处输入层的任何一层(l):

∂C/∂bj= (∂C/∂zjl )(∂zjl/∂bjl) = δjl

参考文献

[1]]神经网络基础

[2]Neural Networks and Deep Learning.       Michael A. Nielsen

[3]一文弄懂神经网络中的反向传播法

[4]深度神经网络(DNN)反向传播算法(BP)

第一节,windows和ubuntu下深度学习theano环境搭建的更多相关文章

  1. ubuntu 深度学习cuda环境搭建,docker-nvidia 2019-02

    ubuntu 深度学习cuda环境搭建 ubuntu系统版本 18.04 查看GPU型号(NVS 315 性能很差,比没有强) 首先最好有ssh服务,以下操作都是远程ssh执行 lspci | gre ...

  2. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

  3. ubuntu下的c/c++环境搭建

    原文地址:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274556.html ubuntu下的c/c++环境搭建是比较简单,因为有apt和新立得 ...

  4. Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda

    Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda Ubuntu16.04安装 参考https://blog.csdn.net/flyy ...

  5. 深度学习开发环境搭建教程(Mac篇)

    本文将指导你如何在自己的Mac上部署Theano + Keras的深度学习开发环境. 如果你的Mac不自带NVIDIA的独立显卡(例如15寸以下或者17年新款的Macbook.具体可以在"关 ...

  6. Ubuntu下kafka集群环境搭建及测试

    kafka介绍: Kafka[1是一种高吞吐量[2]  的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能 ...

  7. Ubuntu下php网站运行环境搭建

    第一步:查看是否安装lamp相关软件: dpkg -s 软件名称,比如php.mysql.apache. dpkg-query -l 软件名称 要列出你系统中安装的所有包,输入下面的命令:dpkg - ...

  8. ubuntu下android开发工作环境搭建

    www.bubuko.com/infodetail-655571.html 解压软件安装: sudo apt-get install unrar rar zip gzip  串口工具安装: sudo ...

  9. linux下安卓编译apk环境搭建

    ubuntu下linux安卓编译环境搭建. 配置好编译环境 (前提是已经安装了jdk,可以用java -verison 命令查看) 一.设置环境变量 用vi  ~/.bashrc  打开编译环境 JA ...

随机推荐

  1. python设计模式第九天【策略模式】

    1. 定义 对一系列算法进行封装,为所有算法定义一个抽象的算法接口,可以平滑的进行算法切换 2. 策略模式的UML图 3.代码实现 #!/usr/bin/env python #! _*_ codin ...

  2. JMeter 连接 sql server

    1.安装驱动 http://www.microsoft.com/zh-CN/download/details.aspx?id=11774 下载后解压后复制sqljdbc.jar到 “jmeter的安装 ...

  3. Spring Boot 构建电商基础秒杀项目 (一) 项目搭建

    SpringBoot构建电商基础秒杀项目 学习笔记 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包, Spring Boot ...

  4. Matlab提供了两种除法运算:左除(\)和右除(/)

    Matlab提供了两种除法运算:左除(\)和右除(/).一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解.例:a=[1  2  3; 4  2  6; 7  4  9]b ...

  5. codeforces525B

    Pasha and String CodeForces - 525B Pasha got a very beautiful string s for his birthday, the string ...

  6. iOS WKWebView全屏浏览网页返回 状态栏问题

    问题: 用这个方法隐藏显示状态栏,总是带有残余 过一会才能消失掉 [[UIApplication sharedApplication]setStatusBarHidden:YES]; 可以切换状态栏的 ...

  7. OneinStack——PHP多版本共存

    前言 我事先安装的是LNMP环境,PHP版本为7.2,但是现在环境需要一个PHP5.6,所以就准备安装个上版本,顺带写个安装教程,写完后我发现了原来有直接安装的命令!所以后面的内容大家可以忽略了!从配 ...

  8. 【AGC013C】Ants on a Circle 弹性碰撞

    题目大意 一个长度为\(lm\)的环上有\(n\)只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为\(1m/s\),两只蚂蚁相遇后都会掉头,问你\(t\)秒后每只蚂蚁的位置. \(n\le ...

  9. codeforces 242E - XOR on Segment (线段树 按位数建树)

    E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...

  10. Error fetching command 'collectstatic': You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path. Command 'collectstatic' skipped

    报错现象 报错解决 在 settings.py 中添加这一句话则可以解决 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 测试不在有问题