转载自  ​通俗理解神经网络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算法的理解。

参考自梁斌老师博客.

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

  1. 入门深度学习,理解神经网络、反向传播算法是第一关

    向AI转型的程序员都关注了这个号

  2. BP反向传播算法的思考和直观理解 -卷积小白的随机世界

    https://www.toutiao.com/a6690831921246634504/ 2019-05-14 18:47:24 本篇文章,本来计划再进一步完善对CNN卷积神经网络的理解,但在对卷积 ...

  3. 零基础入门深度学习(3) - 神经网络和反向传播算法

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  4. [AI 笔记] BP反向传播算法

    [AI 笔记] BP反向传播算法 说明 BP算法 链式法则 计算图 简单例子 前向传播 反向传播 聚焦计算节点,深入理解 计算节点的代码实现 例子 各种门的功能 多元链式法则 向量化BP算法 参考资料 ...

  5. 神经网络之反向传播算法(均方根反向传播算法RMSProp)

    文章目录 均方根反向传播算法(RMSProp) 1.算法原理 2.算法实现 2.1 训练过程 2.2 测试过程及结果 3.参考源码及数据集 均方根反向传播算法(RMSProp) 自适应梯度算法(Ada ...

  6. July深度学习笔记之神经网络与反向传播算法

    July深度学习笔记之神经网络与反向传播算法 一.神经网络 神经网络的大致结构如下: 大致可以分为输入层.隐藏层与输出层. 而我们可以单独拿出来一个结点,可以发现,其实它就是类似一个逻辑回归(LR), ...

  7. 使用随机梯度下降SGD的BP反向传播算法的PyTorch代码实现

    Index 目录索引 写在前面 PyTorch的 .data() PyTorch的 .item() BP with SGD的PyTorch代码实现 参考文章 写在前面 本文将用一个完整的例子,借助Py ...

  8. 神经网络(NN)+反向传播算法(Backpropagation/BP)+交叉熵+softmax原理分析

    神经网络如何利用反向传播算法进行参数更新,加入交叉熵和softmax又会如何变化? 其中的数学原理分析:请点击这里. 转载于:https://www.cnblogs.com/code-wangjun/ ...

  9. 深度学习(4) - 神经网络和反向传播算法

    神经元 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数:而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数.如下图所示: 计算一个神经元的输出的方法 ...

最新文章

  1. python异常机制
  2. SQL Server系统表sysobjects介绍与使用
  3. opt eclipse jre bin java_Linux下安装JDK和Eclipse的配置方法
  4. ScrollView嵌套ListView处理事件冲突
  5. 【MySQL】Got fatal error 1236原因和解决方法
  6. 【数理知识】《数值分析》李庆扬老师-第4章-数值积分与数值微分
  7. 吴恩达《优化深度神经网络》精炼笔记(3)-- 超参数调试、Batch正则化和编程框架...
  8. java语言的编译器可以用python_jython实现java运行python代码
  9. 质数判断,不同算法效率比较
  10. spring boot jar包_「Spring Boot 新特性」 jar 大小自动瘦身
  11. oracle gg 有两个字段没同步到,GG配置Oracle同步到SQLServer
  12. androidwear环境搭建以及android进入之后出现(Error:Failed to resolve: com.android.support:support-v4:26.0.0)
  13. java 反射 调用私有构造函数_使用反射调用私有方法
  14. sudo报错案例-RHEL6
  15. 构造函数_析构函数_深拷贝与浅拷贝
  16. ()用于创建python与数据库之间的联系_第一篇-Django建立数据库各表之间的联系(上)...
  17. 空间计量经济学(1)---空间计量简介与空间权重矩阵设置
  18. Fall 2020 Berkeley cs61a hw03答案
  19. 棋牌游戏开发制做花费,您知多少呢?
  20. App Inventor学习环境搭建

热门文章

  1. leetcode--912--排序数组
  2. leetcode47. 全排列 II
  3. 紧跟月影大佬的步伐,一起来学习如何写好JS(上)
  4. vue2的响应式原理学“废”了吗?继续观摩vue3响应式原理Proxy
  5. [SpringBoot2]定制化原理_SpringBoot定制化组件的几种方式
  6. 单链表式并查集应用举例
  7. C++vector容器-构造函数
  8. CoreJava 笔记总结-第七章 异常,断言和日志
  9. UVA12298 Super Poker II(多项式/背包问题)
  10. Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞