​通俗理解神经网络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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

Redis(入门)

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

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

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

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

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

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

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

java中部的分页实现(二)

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

SpringSecurity授权(访问控制)

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

剥析surging的架构思想

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

javaweb实现分页(二)

前言:我们都知道,实现分页需要三个步骤。第一,确定页大小(每页显示的数据量)。第二,计算显示的总页数。第三,写分页的sql语句。这三步已经在昨天的推文中详细说明,需要的可以点击这里…

滴滴出行基于RocketMQ构建企业级消息队列服务的实践

转载自 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 本文整理自滴滴出行消息队列负责人 江海挺 在Apache RocketMQ开发者沙龙北京站的分享。通过本文,您将了解到滴滴出行: 1. 在消息队列技术选型方面的思考; 2. 为什么选择 RocketMQ…

[信息安全] 1.密码工具箱

0. 何谓安全? 对于信息安全性的重要性,我想大家都不会否认。那么具体来说应该具有哪些特性才能称之为安全呢?举个简单的例子:我给你发送一条消息“借给我100元”,当你收到这条消息并且处理后你的账户里面会少出来100块…

深入理解TCP/IP协议-TCP建立与终止连接

转载自 深入理解TCP/IP协议-TCP建立与终止连接 一、引言 TCP 是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。连接创建与终止的状态变化图如下: 二、三次握手建立连接 过程如下: 客户端发送一个 SY…

在Docker中运行asp.net core 跨平台应用程序

概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署、运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石)。学习docker的最好方式,莫过于它的…

java中的Queue队列的用法

大家好,欢迎来到雄雄的小课堂,今天给大家分享的是“java中的Queue队列的用法” 前言:好多人对Queue不是很熟悉,毕竟平时也不怎么用,遇到集合要么List要么map这些常用的,殊不知,java中还有个Que…

SpringCloud Netflix Eureka

文章目录一、 Eureka简介Eureka组件二、 Eureka和Zookeeper 对比1 什么是CAP定理2 基于CAP定理比对Eureka和Zookeeper三、 搭建Eureka注册中心1 POM文件2 配置文件application.yml3 启动类4 访问Eureka Server WEB服务管理平台四、 Eureka 服务管理平台介绍1 Eureka Server服务…

使用枚举定义常量更好点儿

大家好,欢迎来到雄雄的小课堂,昨天给大家分享的是“java中的Queue队列的用法示例”,今天,分享的主题是“java中,推荐使用枚举定义常量”。 前言:常量,相信大家多不会陌生,常量值一般…

SpringCloud Netflix Ribbon

文章目录一、 Ribbon简介二、 使用Ribbon开发微服务1 创建springcloud工程 和 commons子模块2 开发服务提供者 - ribbonappservice3 开发服务消费者 - ribbonappclient三、 集中式与进程内负载均衡区别四、 Ribbon常见的负载均衡策略1 Ribbon中的常用负载均衡简介2 配置负载均衡…