Backpropagation反向传播算法【总结】

概念介绍

Backpropagation本质上就是一个提升Gradient Descent效率的算法,核心在于其可以有效率地计算出一个偏移量来update下一组未知参数。

难点在于:Neural Network有很多层,而且每层参数都非常多,所以不能立即算出来该组未知参数的偏微分,如果只有一层当然可以快速计算,无需使用Backpropagation进行优化

推理步骤

1.Loss function定义: L ( θ ) = ∑ n = 1 N C n ( θ ) L(\theta)=\displaystyle\sum_{n=1}^NC^n(\theta) L(θ)=n=1NCn(θ)
在这里插入图片描述
C n C^n Cn是一个function,代表模型计算出来的值 y n y^n yn和真实的值 y ^ n \widehat{y}^n y n的距离,两个向量之间的距离。在所有参数 θ \theta θ已知的情况下 y n y^n yn也是一个已知量,那么他们之间的距离也是一个已知量(是通过 C n C^n Cn计算出来的一个已知量)

那么难点在于我们要求 θ \theta θ的偏微分

2.对w进行偏微分

这些未知参数用w来表示,b在计算微分的时候无用所以忽略

∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ C n ( θ ) ∂ w \dfrac{{\partial}L(\theta)}{\partial{w}}=\displaystyle\sum_{n=1}^N\dfrac{{\partial}C^n(\theta)}{\partial{w}} wL(θ)=n=1NwCn(θ)

3.先考虑一个Neuron
在这里插入图片描述

(1)假设w只有2个w1和w2,并且n=1,现在要计算 ∂ C ∂ w \dfrac{{\partial}C}{\partial{w}} wC

∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \dfrac{{\partial}C}{\partial{w}}=\dfrac{{\partial}z}{\partial{w}}\dfrac{{\partial}C}{\partial{z}} wC=wzzC
(两个z的偏微分可以约掉,所以可以写成这样)

其中计算 ∂ z ∂ w \dfrac{{\partial}z}{\partial{w}} wz叫做【Forward pass】,计算 ∂ C ∂ z \dfrac{{\partial}C}{\partial{z}} zC叫做【Backword pass】

(2)求解 ∂ z ∂ w \dfrac{{\partial}z}{\partial{w}} wz

假设w只有2个w1和w2

我们发现:w1的微分就是 x 1 x_1 x1;w1的微分就是 x 2 x_2 x2

∂ z ∂ w = x 1 + x 2 \dfrac{{\partial}z}{\partial{w}}=x_1+x_2 wz=x1+x2

如果我们知道输入,那可以很快求出任何一个w在activation function上的偏微分就是他的输入
在这里插入图片描述
第一层的输入x是已知量,第二层的输入也是可以通过activation function计算出来

现在已经解决了 ∂ z ∂ w \dfrac{{\partial}z}{\partial{w}} wz,还需要解决的是 ∂ C ∂ z \dfrac{{\partial}C}{\partial{z}} zC

(2)求解 ∂ C ∂ z \dfrac{{\partial}C}{\partial{z}} zC

假设输出只有2个z
在这里插入图片描述

如图假设a是sigmoid function通过z计算出来的

因为 ∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a \dfrac{{\partial}C}{\partial{z}}=\dfrac{{\partial}a}{\partial{z}}\dfrac{{\partial}C}{\partial{a}} zC=zaaC,所以我们现在需要求后面两个偏微分

∂ a ∂ z \dfrac{{\partial}a}{\partial{z}} za是很容易求出来的,因为是一个已知的激活函数sigmoid function,在进行forward pass计算的时候z就是一个已知量了,那么 ∂ a ∂ z \dfrac{{\partial}a}{\partial{z}} za就可以当做一个常量

那么就只剩下 ∂ C ∂ a \dfrac{{\partial}C}{\partial{a}} aC,它等于a在 z 1 z^1 z1上的偏微分加上其他其他输出a在z上的微分,那么如图很容易知道 ∂ z ′ ∂ a = w 3 \dfrac{{\partial}z^{'}}{\partial{a}}=w^3 az=w3 ∂ z ′ ′ ∂ a = w 4 \dfrac{{\partial}z^{''}}{\partial{a}}=w^4 az′′=w4

根据后面节点的微分就可以得到当前节点的微分,如下:
在这里插入图片描述

现在就只剩下 ∂ C ∂ z ′ \dfrac{{\partial}C}{\partial{z^{'}}} zC需要求解了,上面只讨论了两层,但实际上有很多层,现在就是求解下面这个模型,下面这个模型和上面的求解是一样的,继续往下分解即可。

但是继续往下分解那不就是和一般的Gradient Descent一样了么?
在这里插入图片描述
我们发现正向的求解过程和逆向的求解过程完全一样
在这里插入图片描述
如果我们知道了 ∂ C ∂ z a \dfrac{{\partial}C}{\partial{z_a}} zaC ∂ C ∂ z b \dfrac{{\partial}C}{\partial{z_b}} zbC,就很容易求出 ∂ C ∂ z ′ \dfrac{{\partial}C}{\partial{z^{'}}} zC

假设 Z a Z_a Za已经是最后一层,那么是可以通过y来计算出 Z a Z_a Za的微分,从而可以往上计算出所有的微分。

如果我们反向计算,那么效率就会高很多,之前是通过x往后计算,现在通过y往前计算,因为x是已知量y也是已知量,所以可以建立一个反向的Neural Network
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
那么现在我们可以很容易知道任何一个w的偏微分,然后就可以算出下一个w’的值
在这里插入图片描述

个人总结

一般的Gradient Descent是从上往下计算偏微分,但在一个函数里面不仅要展开当前层所有的Neuron,而且每个Neuron还要继续展开下一层所有的Neuron,直到最后一层。这样效率是不高的,主要是递归计算带来的开销。

那么优化方案就是递归改递推,就好像算法中【递归】改成【动态规划】,效率会提高很多倍,不仅每次计算的结果不会丢,而且没有栈溢出的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络编程】高级IO——五种IO模型

高级IO 1.什么是IO?什么是高效的IO?2.有那些IO的方式?这么多的方式,有那些是高效的?3.五种IO模型4.高级IO重要概念5.非阻塞IO 点赞👍👍收藏🌟🌟关注💖&#x…

C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

STM32F103学习笔记 | 8. 二,八,十,十六进制表示方式

文章目录 进制基本信息参考文献 进制基本信息 C语言中的表示,前缀加0表示八进制数,前缀加0x表示十六进制数 基数数码名称描述代码和书本中的表示举例20 和 1二进制逢二进一,几乎所有的电子计算机内部都使用二进位制,分别为“0”…

[C/C++] -- 单例模式

1.简介 单例模式是一种创建型设计模式,它确保类只有一个实例,并提供全局访问点以访问该实例。 引入单例模式目的: 全局访问点: 单例模式提供了一个全局访问点,使得任何地方都可以方便地访问该实例,而不需…

掌握JavaScript ES2023新特性

截至2023年底,ECMAScript 2023(也称为ES2023)的一些新特性已经被确定并纳入了JavaScript的最新标准。这些新特性继续增强了JavaScript的功能性和表达力。下面是一些值得关注的ES2023新特性: ### 1. Record 和 Tuple Record和Tup…

信息泄露中的目录遍历,phpinfo,备份文件下载

一、目录遍历漏洞 1.什么是目录遍历漏洞 指的是在没有授权的情况下读取文件,某些情况下还可对服务器里的文件任意写入 2.目录遍历漏洞成因 网站配置存在缺陷,对输入目录缺少验证,没过滤../之类的目录跳转符,可通过提交目录跳转…

cesium模型路径漫游实现

开始调用模拟飞行:(viewer是初始化地图容器对象,具体可参考文章:Cesium初始化地图对象容器配置项汇总_cesium 初始化容器大小-CSDN博客) import flyModelRoam from "../utils/GISRoam";// 开始模拟飞行let f…

超详细——集成学习——Adaboost——笔记

资料参考 1.【集成学习】boosting与bagging_哔哩哔哩_bilibili 集成学习——boosting与bagging 强学习器:效果好,模型复杂 弱学习器:效果不是很好,模型简单 优点 集成学习通过将多个学习器进行结合,常可获得比单一…

代码整洁之道第3章-函数

五一假期结束了, 今天继续读一下第三章:函数的相关内容, 其实函数的相关内容设计到的东西很多, 想把一个函数写好也是很难的; 还是按照之前的样子, 先总结一下本章内容, 然后聊一下相关的话题 内容总结 函数应该尽量小 ​ 在从业生涯中我见过最长的一个函数是几千行, 那简直就是…

AI绘画ComfyUI工作流安装教程,新手入门安装部署教程

ComfyUI 是专为 Stable Diffusion 打造的图形用户界面(GUI),采用了基于节点的操作方式。用户可以通过连接不同的模块(即节点)来创建复杂的图像生成流程。这些节点涵盖了多样的功能,包括加载检查点模型、输入…

慧天卓特干旱监测系统:2023年云南最强冬春连旱分析

2023年开春以来,由于高温少雨,土壤失墒快,我国西南的云贵川渝等地区出现连续快速干旱,云南地区的干旱尤为严重。 2023年1月下旬至6月18日,云南平均降水量197.7毫米,为1961年以来历史同期最少,气…

生成requirements.txt文件

前言 对于Python项目,生成和使用requirements.txt是十分必要的。通过requirements.txt可以一次性保存和安装项目所需要的所有库。尤其是在复现github上的实验代码时。 方法1 常用的命令 pip freeze > requirements.txt然而这种方法并不好用,有时会…

什么是泛域名证书?与普通SSL证书有什么区别

随着互联网的发展,越来越多的网站开始使用SSL证书来保护用户的隐私和安全。在SSL证书中,泛域名SSL证书和普通域名证书是两种常见的类型。那么,什么是泛域名SSL证书,与普通域名证书有什么区别呢? 首先,我们来…

ChatGPT变懒原因:正在给自己放寒假!已被网友测出

ChatGPT近期偷懒严重,有了一种听起来很离谱的解释: 模仿人类,自己给自己放寒假了~ 有测试为证,网友Rob Lynch用GPT-4 turbo API设置了两个系统提示: 一个告诉它现在是5月,另一个告诉它现在是1…

基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法(GA)原理 4.2 BP神经网络原理 4.3 遗传优化BP神经网络结合应用 4.4 遗传算法简要改进 5.完整程序 1.程序功能描述 基于改进遗传优化的BP神经网络金融…

什么是影响力?HR招聘测评,如何考察候选人的影响力?

什么是影响力? 影响力也即是说服别人同你的观点,或者是潜移默化的改变他人,从而形成自我凝聚力,影响力可以推动某一个事务的进行。影响力尤其在管理型岗位上具有重要作用。 在百科中有如下定义:影响力是用别人乐于接受…

Python类方法探秘:从单例模式到版本控制

引言: 在Python编程中,类方法作为一种特殊的实例方法,以其独特的魅力在众多编程范式中脱颖而出。它们不仅提供了无需实例即可调用的便捷性,还在设计模式、版本控制等方面发挥着重要作用。本文将通过几个生动的示例,带您…

大厂常见算法50题-最小栈

专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法! 文章目录 题目解法一 遍历找最小值(不要求时间复杂度情况下)解法二 辅助栈总结 题目 解法一 遍历找最小值(不要求时间复杂度情况下&#xff0…

艾体宝方案 | 加密USB金融解决方案

在现代金融行业中,保护敏感数据和合规性已成为至关重要的任务。为了帮助金融公司应对移动性风险和合规挑战,我们提供了一种高效的加密USB解决方案。 一、为什么金融公司需要加密USB解决方案 1、降低移动性风险 金融服务公司正在迅速过渡到一种模式&a…

《深入理解kafka-核心设计与实践原理》

本文是对于《深入理解kafka-核心设计与实践原理》的笔记和提纲整理 主要用于复习和知识点快速复习 第一章:概念 链接:《深入理解kafka-核心设计与实践原理》第一章:概念 第一章:概念 [1.1] 基本概念 [1.1.1] 基本角色与概念[1.1.…