​通俗理解神经网络BP反向传播算法

转载自  ​通俗理解神经网络BP反向传播算法

通俗理解神经网络BP反向传播算法

在学习深度学习相关知识,无疑都是从神经网络开始入手,在神经网络对参数的学习算法bp算法,接触了很多次,每一次查找资料学习,都有着似懂非懂的感觉,这次趁着思路比较清楚,也为了能够让一些像我一样疲于各种查找资料,却依然懵懵懂懂的孩子们理解,参考了梁斌老师的博客BP算法浅谈(Error Back-propagation)(为了验证梁老师的结果和自己是否正确,自己python实现的初始数据和梁老师定义为一样!),进行了梳理和python代码实现,一步一步的帮助大家理解bp算法!

为了方便起见,这里我定义了三层网络,输入层(第0层),隐藏层(第1层),输出层(第二层)。并且每个结点没有偏置(有偏置原理完全一样),激活函数为sigmod函数(不同的激活函数,求导不同),符号说明如下:

对应网络如下:

 

其中对应的矩阵表示如下:

首先我们先走一遍正向传播,公式与相应的数据对应如下:

那么:

同理可以得到

那么最终的损失为

我们当然是希望这个值越小越好。这也是我们为什么要进行训练,调节参数,使得最终的损失最小。这就用到了我们的反向传播算法,实际上反向传播就是梯度下降法中(为什么需要用到梯度下降法,也就是为什么梯度的反方向一定是下降最快的方向,我会再写一篇文章解释,这里假设是对的,关注bp算法)链式法则的使用。

 

下面我们看如何反向传播

根据公式,我们有:

这个时候我们需要求出C对w的偏导,则根据链式法则有

上面插入sigmod函数求导公式:

(在这里我们可以看到不同激活函数求导是不同的,所谓的梯度消失,梯度爆炸如果了解bp算法的原理,也是非常容易理解的!)
同理有

到此我们已经算出了最后一层的参数偏导了.我们继续往前面链式推导:

我们现在还需要求

下面给出其中的一个推到,其它完全类似

同理可得到其它几个式子:

则最终的结果为:

再按照这个权重参数进行一遍正向传播得出来的Error为0.165

而这个值比原来的0.19要小,则继续迭代,不断修正权值,使得代价函数越来越小,预测值不断逼近0.5.我迭代了100次的结果,Error为5.92944818e-07(已经很小了,说明预测值与真实值非常接近了),最后的权值为:

好了,bp过程可能差不多就是这样了,可能此文需要你以前接触过bp算法,只是还有疑惑,一步步推导后,会有较深的理解。

 

分享链接:

中文版资料:链接:http://pan.baidu.com/s/1mi8YVri 密码:e7do

下面给出我学习bp时候的好的博客

Backpropagation (里面的插图非常棒,不过好像有点错误,欢迎讨论~)

A Neural Network in 11 lines of Python (Part 1)(非常赞的博客,每个代码一行一行解释)

Neural networks and deep learning     (很好的深度学习入门书籍,实验室力推!我有中文翻译版,欢迎留言)

 

上面实现的python代码如下:

源文件下载链接如下:http://pan.baidu.com/s/1slpmYPR

 

我也是在学习过程中,欢迎大家提出错误问题。真心希望加深大家对bp算法的理解。

参考自梁斌老师博客.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssl初一组周六模拟赛【2018.3.31】

前言 先说一下成绩: 姓名成绩hjq300wyc(本人千年老二)270zyc260xjq240lw223xxy220lrz200hzb200 正题 题目1:ssl2406 约数【水题】 水题 链接: https://blog.csdn.net/mr_wuyongcong/article/details/79768338 题目2:ssl2407 …

CSS动画示例(上一篇是CSS过渡…)

大家好,欢迎来到雄雄的小课堂,前面,我们将CSS的变形和过渡都整理了,有需要的可以移步这里看:CSS3中的动画示例CSS3的几个变形案例……今天,我们来看看CSS3的动画。CSS3使用动画分为两个步骤:1.通…

Health Check in eShop -- 解析微软微服务架构Demo(五)

引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况、项目之间的连接情况等),还包括了应用程序对外部或者第三方依赖库的状态检测。 W…

为什么梯度反方向是函数下降最快的方向

转载自 为什么梯度反方向是函数下降最快的方向 为什么梯度反方向是函数下降最快的方向? 刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝着梯度的反方向变动&a…

ssl1335-最佳派对【二分图,最大匹配,图论】

正题 题目 有n个中国学生与若干个外国学生&#xff0c;一些中国学生与外国学生之间可以很好的配对&#xff0c;求能配成的最多对数 解题思路 二分图匈牙利算法 代码 #include<cstdio> #include<cstring> using namespace std; struct line{int x,y,next; }a[100…

javaweb中实现分页,持续更新……

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;昨天分享了个分页工具类一个简单的分页工具类&#xff0c;其实&#xff0c;也是为今天的分享做的铺垫&#xff0c;今天&#xff0c;给大家带来的是javaweb实现分页的全过程&#xff01;前言&#xff1a;为什么需要分页&…

Redis(入门)

文章目录一、 Redis简介二、 基于Docker安装Redis单机版三、 Redis常用命令1 Key操作2 字符串值(String)&#xff08;值的长度不超过512MB&#xff09;3 哈希表(Hash)4 列表&#xff08;List&#xff09;5 集合(Set)6 有序集合&#xff08;Sorted Set&#xff09;四、 Redis持久…

浅析神经网络为什么能够无限逼近任意连续函数

转载自 浅析神经网络为什么能够无限逼近任意连续函数 神经网络为什么能够无限逼近任意连续函数&#xff1f; 下面通过一个分类例子一步一步的引出为什么神经网络能够无限逼近任意函数这个观点&#xff0c;并且给出直观感觉! 我们首先有这个需求&#xff0c;需要将下面的数据…

前端模块化工具--webpack学习心得

话说前头 webpack前段时间有听说一下&#xff0c;现在已经到了3.x的版本&#xff0c;自己没去接触。因为之前使用gulp来作为自己的项目构建工具。现在感觉gulp使用的趋势在减少。现在这段时间去接触了webpack&#xff0c;感觉很不错&#xff0c;它的模块化打包机制&#xff0c…

ssl1333-地鼠的困境【二分图,最大匹配,图论】

正题 大意 有n个地鼠有m个地洞&#xff0c;每只地鼠的速度都是v。若不在s秒之内回到地洞就会狗带&#xff0c;每只地洞只能躲一只地鼠&#xff0c;求能活下来多少只 代码 #include<cstdio> #include<cstring> #include<cmath> using namespace std; struct…

javaweb实现分页查询(一)

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;昨天分享了个分页工具类&#xff0c;其实&#xff0c;也是为今天的分享做的铺垫&#xff0c;今天&#xff0c;给大家带来的是javaweb实现分页的全过程&#xff01; 前言&#xff1a;为什么需要分页&#xff1f;假设某大学有…

eclipse搭建多module项目的坑

一、eclipse坑 1、低版本eclipse没有jdk1.8 2、默认使用jre库作为工作空间jdk&#xff0c;项目build path绑定jre&#xff0c;而Maven项目需要jdk 3、Maven项目经常抛错&#xff0c;工作空间和项目缓存了Maven错误信息 二、Maven坑 1、仓库没有包&#xff0c;生成xxx.lastU…

SpringSecurity认证

一、 Spring Security简介 1 概括 Spring Security是一个高度自定义的安全框架。利用Spring IoC/DI和AOP功能&#xff0c;为系统提供了声明式安全访问控制功能&#xff0c;减少了为系统安全而编写大量重复代码的工作。 使用Spring Secruity的原因有很多&#xff0c;但大部分都…

【2018.4.7】模拟赛之一-ssl2382 K好数【数位dp】

正题 大意 如果一个数每一位都小于k那么这个数是好数。给出n和k&#xff0c;求1-n里有多少个好数。 解题思路1 将起改为一个k1进制的数&#xff0c;那么每次加1后这个数都是好数。然后判断一下是否大于n&#xff08;十进制的情况下&#xff09; 解题思路2 数位dp&#xff0…

基于.NET CORE微服务框架 -谈谈surging的服务容错降级

一、前言 对于不久开源的surging受到不少.net同学的青睐&#xff0c;也受到.net core学习小组的关注&#xff0c;邀请加入.NET China Foundation 以方便国内.net core开源项目的推广&#xff0c;我果断接受邀请加入了队伍进行互相交流学习&#xff0c;最近也更新了surging新的…

java中部的分页实现(二)

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;昨天分享了关于分页查询的理论知识&#xff0c;今天我们就来结合代码和案例实际的应用一下&#xff0c;方便大家理解。前言&#xff1a;我们都知道&#xff0c;实现分页需要三个步骤。第一&#xff0c;确定页大小&#xff0…

artTemplate的空白输出坑

一、问题现象 <script type"text/html" id"man_template">{{each list as v i}}<tr><td>{{v.name}}</td><td>{{v.height}}</td><td>{{v.age}}</td></tr>{{/each}} </script> <script>…

SpringSecurity授权(访问控制)

一、 访问控制url匹配 在前面讲解了认证中所有常用配置&#xff0c;主要是对httpSecurity.formLogin()进行操作。而在配置类中httphttpSecurity.authorizeRequests()主要是对url进行控制&#xff0c;也就是我们所说的授权&#xff08;访问控制&#xff09;。httpSecurity.autho…

剥析surging的架构思想

1、前言 前面第一篇阐述了采用基于.NET CORE微服务架构&#xff0c;应用surging服务端与客户端之间进行通信的简单示例以及对于surging服务化框架简单介绍。在这篇文章中&#xff0c;我们将剥析surging的架构思想。 surging源码下载 2、通信机制 2.1 简介 在单体应用中&am…

【2018.4.7】模拟赛之二-ssl2383 睡眠【水题】

正题 大意 输入两个时间点表示起床的时间和睡了多久求开始睡觉的时间 解题思路 直接计算&#xff0c;水题不解释 代码 #include<cstdio> using namespace std; int h1,m1,h2,m2; int main() { scanf("%d:%d %d:%d",&h1,&m1,&h2,&m2);h1-h…