反向传播理解–从抽象到具体

神经网络从计算的角度看,数据是从底层输入,经过每一层,根据与该层之间的权重计算以一个中间结果,这个中间结果再经过一个非线性激活函数作用,得到该层的输出结果,然后把该层的输出结果传递给下一层,继续进行下一层的中间结果计算与非线性函数激活,直到最后一层,得到最终的结果,最后的结果或者用来表示分类结果,或者表示回归结果。
如果一个网络训练好了,所有层之间的权重都是确定好的,给定任意的一个输入,根据每一层之间的权重系数,从底层到顶层,计算出最终的结果,这一阶段叫做推理或者叫做测试。
反向传播发生是在学习过程中,每一次迭代根据计算出的结果与实际对应结果的误差,反向调整网络层之间的系数。
网络结构对于解决特定的问题是关键,但是最底层还是网络的反向传播过程,这是学习过程的基础,理解这部分,才能更清晰的理解一个网络结构,以及如何修改网络或者涉及全新的网络。
很久之前,写过一个从BP神经网络理解反向传播文章,那是从细节描述,反而理解起来不是很容易,尤其是跟同事讲或者带新人的时候,不太容易让他们清晰的理解反向传播的过程。这里反过来,从高层的抽象开始,逐步到细节,先从整体上有一个概念,然后逐步细化。
————————————————
一个典型的网络结构

如下图,表示一个抽象的多层神经网络的结构。

第0层是数据层,没有特别的,用xx表示;
第1层是中间网络层,不管是卷积层,还是全连接层,还是BN层,与前一层之间的权重是$$,这一层的非线性激活函数是 ;
第2层也是中间网络层,不知道是个什么东西,与第一层之间的权重是 ,非线性激活函数是 ;
第3层是最后的输出层,与第2层之间的权重是 ,非线性激活函数是 。
带有前向传播的网络结构
一般的网络结构都类似于上面的这个样子,下面图描述了网络的前向计算过程中的数据传递。

从图中可以看出,第1、2、3层之间的计算过程。前向传递理解起来比较容易,不管这样抽象的表示,还是具体的网络实现。下面看看反向传递是怎么回事。
带有反向传播的网络结构
下图是反向传播时,从顶端的误差如何反向传递给下面的每一层。

第3层是最后一层,可以直接计算误差的损失,根据损失计算对权重的导数;但是到了内部的层,没有办法直接获取损失,只能通过上图中的链式规则计算对内层权重大导数。
整理一下
从上面的图中发现,层次越深,这个导数计算越多,这哪能受得了,每一层的导数对输入的导数,在下面一层的计算中还会有用,所以,可以把这一部分直接传递给下面的层,这也就是误差回传的本质。
对上面的图进行修改能更清晰的理解。

具体的推导
从上面的图中,应该可以从宏观的角度理解反省传播的链式规则,那么剩下的就是如何从细节理解,在之前的文章中,是从数学计算的角度,如何逐步推导每一个公式(全连接层),对于其它层,也会有类似的方式,或者更简单的方法。

转自:https://blog.csdn.net/qust_waiwai/article/details/82657246

deep_learning_backprop的更多相关文章

随机推荐

  1. Kafka管理与监控——彻底删除topic

    一.配置 server.properties 设置 delete.topic.enable=true 如果没有设置 delete.topic.enable=true,则调用kafka 的delete命 ...

  2. 【笔记】《CNCF × Alibaba云原生技术公开课》知识点

    一,课时1:第一堂“云原生”课 二,课时2:容器基本概念 1.已运行 docker run -d -t —name demo ubuntu top 命令, 是否可以在 demo 这个容器内部停止容器? ...

  3. 【VS开发】recv函数函数返回值说明(特别有利于工程调试)

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

  4. 【VS开发】关于线程安全一些细节体会

    [VS开发]关于线程安全一些细节体会 标签(空格分隔): [VS开发] 利用C++进行GUI界面开发,最大的问题往往是多线程安全问题,由于C++不具备收集内存垃圾的功能,所以必须由程序员负责维护,因此 ...

  5. Golang语言细节小结

    前段时间,看了菜鸟入门,较浅的认识一下golang的语法习惯和规则,然后跟别人做了个爬虫项目,但是对于golang语言的语法结构还不是很懂.又看了遍<go实战>第二章. 构建程序在构建可执 ...

  6. 记录解决一个项目中遇到的maven打包问题

    拿到同时给的代码,进行打jar包,这个jar包依赖一个第三方的jar包,一开始用IDEA打出来的包,没有把依赖的包打进去,后来查了相关的资料, 发现需要在maven的pom中添加相关的maven插件, ...

  7. Oracle- 数据库知识回顾

    数据库知识回顾: sql语句的语法规范: sql语句不区分大小写,习惯上系统的保留字.关键字.函数名称大写,表名和列名小写 使用空格和换行分隔单词效果一样,一般情况下独立的整句不换行,不同的子句需要换 ...

  8. Ubuntu 下几种软件安装的方法小结

    1.tar.gz软件包的安装 1)解压tar.gz包 .tar.gz -C /home/Desktop # 将软件包名.tar.gz解压到指定的目录下 2)进入解压后的文件目录下      执行“./ ...

  9. 【计数】Simple Addition Expression

    [来源] 2008年哈尔滨区域赛 [题目链接]: http://acm.hdu.edu.cn/showproblem.php?pid=2451 [参考博客]: HDU 2451 Simple Addi ...

  10. ubuntu下npm全局安装包报错的解决方案

    大概就是 npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ERR ...