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

神经网络从计算的角度看,数据是从底层输入,经过每一层,根据与该层之间的权重计算以一个中间结果,这个中间结果再经过一个非线性激活函数作用,得到该层的输出结果,然后把该层的输出结果传递给下一层,继续进行下一层的中间结果计算与非线性函数激活,直到最后一层,得到最终的结果,最后的结果或者用来表示分类结果,或者表示回归结果。
如果一个网络训练好了,所有层之间的权重都是确定好的,给定任意的一个输入,根据每一层之间的权重系数,从底层到顶层,计算出最终的结果,这一阶段叫做推理或者叫做测试。
反向传播发生是在学习过程中,每一次迭代根据计算出的结果与实际对应结果的误差,反向调整网络层之间的系数。
网络结构对于解决特定的问题是关键,但是最底层还是网络的反向传播过程,这是学习过程的基础,理解这部分,才能更清晰的理解一个网络结构,以及如何修改网络或者涉及全新的网络。
很久之前,写过一个从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. .Netcore 2.0 Ocelot Api网关教程(1)- 入门

    Ocelot(Github)Ocelot官方文档(英文)本文不会介绍Api网关是什么以及Ocelot能干什么需要对Api网关及Ocelot有一定的理论了解 开始使用Ocelot搭建一个入门级Api网关 ...

  2. postman生成格式化时间

    方法一: var moment = require('moment'); var data = moment().format(" YYYYMMDDHHmmss"); consol ...

  3. DP————LIS(最长上升子序列)和LCS(最长公共子序列)问题

    LIS问题 https://www.acwing.com/problem/content/898/ 思路:首先数组a中存输入的数(原本的数),开辟一个数组f用来存结果,最终数组f的长度就是最终的答案: ...

  4. 拿下id_rsa

    ssh配置公私钥远程登录Linux主机 ssh-keygen cat id_rsa.pub >>authorized_keys cat authorized_keys 拿下id_rsa h ...

  5. 腾讯云服务器的CPU ---发现大厂都很那啥

    今天给同事看了下 腾讯云上面的ora从了数据库的启动问题 简单看了下 硬件配置如下: System: Host: VM_0_8_centos Kernel: -.el6.x86_64 x86_64 b ...

  6. acm java入门(转载)

    ACM中java的使用 http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输入输出 ...

  7. 【模板】dijkstra与floyd

    (我永远喜欢floyd) 温馨提示:与SPFA一起食用效果更佳 传送门:https://www.cnblogs.com/Daz-Os0619/p/11388157.html Floyd 大概思路: 对 ...

  8. JZOJ.1150【贪心算法】IQ

    欢迎转载,请附上原链接https://www.cnblogs.com/Code-Garden/p/11276741.html(也没人会看) 一道对我来说较难的贪心题 题目描述 根据世界某权威学会的一项 ...

  9. PAT A1065 A+B and C (64bit) (20 分)

    AC代码 #include <cstdio> int main() { #ifdef ONLINE_JUDGE #else freopen("1.txt", " ...

  10. PAT B1001 害死人不偿命的(3n+1)猜想 (15)

    AC代码 #include <cstdio> int main() { int n,step; scanf("%d", &n); while(n != 1) { ...