deep_learning_backprop
反向传播理解–从抽象到具体
神经网络从计算的角度看,数据是从底层输入,经过每一层,根据与该层之间的权重计算以一个中间结果,这个中间结果再经过一个非线性激活函数作用,得到该层的输出结果,然后把该层的输出结果传递给下一层,继续进行下一层的中间结果计算与非线性函数激活,直到最后一层,得到最终的结果,最后的结果或者用来表示分类结果,或者表示回归结果。
如果一个网络训练好了,所有层之间的权重都是确定好的,给定任意的一个输入,根据每一层之间的权重系数,从底层到顶层,计算出最终的结果,这一阶段叫做推理或者叫做测试。
反向传播发生是在学习过程中,每一次迭代根据计算出的结果与实际对应结果的误差,反向调整网络层之间的系数。
网络结构对于解决特定的问题是关键,但是最底层还是网络的反向传播过程,这是学习过程的基础,理解这部分,才能更清晰的理解一个网络结构,以及如何修改网络或者涉及全新的网络。
很久之前,写过一个从BP神经网络理解反向传播文章,那是从细节描述,反而理解起来不是很容易,尤其是跟同事讲或者带新人的时候,不太容易让他们清晰的理解反向传播的过程。这里反过来,从高层的抽象开始,逐步到细节,先从整体上有一个概念,然后逐步细化。
————————————————
一个典型的网络结构
如下图,表示一个抽象的多层神经网络的结构。
第0层是数据层,没有特别的,用xx表示;
第1层是中间网络层,不管是卷积层,还是全连接层,还是BN层,与前一层之间的权重是$$,这一层的非线性激活函数是 ;
第2层也是中间网络层,不知道是个什么东西,与第一层之间的权重是 ,非线性激活函数是 ;
第3层是最后的输出层,与第2层之间的权重是 ,非线性激活函数是 。
带有前向传播的网络结构
一般的网络结构都类似于上面的这个样子,下面图描述了网络的前向计算过程中的数据传递。 
从图中可以看出,第1、2、3层之间的计算过程。前向传递理解起来比较容易,不管这样抽象的表示,还是具体的网络实现。下面看看反向传递是怎么回事。
带有反向传播的网络结构
下图是反向传播时,从顶端的误差如何反向传递给下面的每一层。
第3层是最后一层,可以直接计算误差的损失,根据损失计算对权重的导数;但是到了内部的层,没有办法直接获取损失,只能通过上图中的链式规则计算对内层权重大导数。
整理一下
从上面的图中发现,层次越深,这个导数计算越多,这哪能受得了,每一层的导数对输入的导数,在下面一层的计算中还会有用,所以,可以把这一部分直接传递给下面的层,这也就是误差回传的本质。
对上面的图进行修改能更清晰的理解。 
具体的推导
从上面的图中,应该可以从宏观的角度理解反省传播的链式规则,那么剩下的就是如何从细节理解,在之前的文章中,是从数学计算的角度,如何逐步推导每一个公式(全连接层),对于其它层,也会有类似的方式,或者更简单的方法。
转自:https://blog.csdn.net/qust_waiwai/article/details/82657246
deep_learning_backprop的更多相关文章
随机推荐
- centos7 忘记mysql root登录密码
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的状态下,其他的用户也可以任意地登录和 ...
- STS中AOP的实现
1. 在pom.xml中加入aop依赖: <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
[VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...
- python 删除文件或文件夹
os.remove(path) 删除文件 path. 如果path是一个目录, 抛出 OSError错误.如果要删除目录,请使用rmdir(). remove() 同 unlink() 的功能是一样的 ...
- JS字符串格式化~欢迎来搂~~
/* 函数:格式化字符串 参数:str:字符串模板: data:数据 调用方式:formatString("api/values/{id}/{name}",{id:101,name ...
- P2709 小B的询问 【普通莫队】
这是我的莫队入门题,我也了解到了莫队分为普通莫队以及带修莫队.顾名思义,普通莫队不需要修改区间的值,而带修莫队处理区间的值会修改的查询. 能用莫队的前提条件: 1.在知道 [l, r]中信息时,可以在 ...
- VUe兄弟通信
用过Vue,你肯定知道,Vue组件之间的通信常见的有$dispatch - 通过冒泡的方式传递事件$broadcast - 通过广播的方式向子孙组件传递事件 如果组件之间的关系只是父-子关系,那么di ...
- mysql函数使用报错
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法 解决办法也有两种,第一种是在创建 ...
- redis5.0 数据结构与命令
1.redis 支持如下5种数据结构 数据结构 说明 简介 String 字符串 key-val Hash 哈希 filed-val 映射表 List 列表 双向链表 Set 集合 element(元 ...
- Log4j2配置之Appender详解
Log4j2配置之Appender详解 Appender负责将日志事件传递到其目标.每个Appender都必须实现Appender接口.大多数Appender将扩展AbstractAppender,它 ...