Backpropagation反向传播算法【总结】

embedded/2024/9/25 4:27:47/

概念介绍

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.ppmy.cn/embedded/35884.html

相关文章

【深度学习实战(30)】训练框架之使用tensorboard记录loss

一、 安装Tensorboard库 pip install tensorflow pip install tensorboardx二、LossHistory类实现过程 1. init构造函数 传入参数log保存路径,模型,模型输入尺寸 def __init__(self, log_dir, model, input_shape):实例化SummaryWriter对象 self.wr…

OpenCV 库来捕获和处理视频输入和相似度测量(73)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :使用 OpenCV 创建视频(74) ​ 目标 如今,拥有数字视频录制系统供您使用是很常见的。因此,您最终会遇到不再处理一批图像&#xf…

Node.js及其生态:分享Node.js的基础知识,包括调试,流,模块等。同时也可以介绍一些流行框架如Express,Koa,NestJS等

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 模型,使其轻量又高效。Node.js 的包生态系统(npm)是全球最大的开源库生态系统。 一些基础概念: 调试:你可以使用…

Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

在 CentOS 7 上部署 ASP.NET Core 应用程序并配置 Nginx 作为反向代理服务器以及 Supervisor 作为守护服务涉及几个步骤。以下是详细的步骤指南: 1. 安装 .NET Core SDK 首先,你需要在 CentOS 7 上安装 .NET Core SDK。你可以从 Microsoft 的官方文档中…

2024年第七届可再生能源与环境工程国际会议(REEE 2024)即将召开!

2024年第七届可再生能源与环境工程国际会议(REEE 2024)将于2024 年8月28-30日在法国南特举行。共绘绿色未来,全球同频共振!REEE 2024将汇聚全球可再生能源与环境工程领域的专家学者和业界精英,共同探讨行业发展的前沿技…

X 推出 Stories 功能,由 Grok AI 生成新闻摘要

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

设备自动化技术商务咨询

​南京纳恩自动化科技有限公司,成立于 2010年。高新技术企业、软件企业,致力于为客户提供最佳的继电保护、电力监控、智慧用电、工业自动化系统以及基于大数据、云系统的产品解决方案和服务。 自动化行业深耕多年,成就丰富的电力自动化行业经…

AngusTester安装执行器

一、介绍 执行器(AngusRunner)提供两个方面作用: 执行控制器(AngusCtrl)下发给代理程序(AngusAgent)的运行测试和模拟数据任务,并将测试结果发送到服务端。提供通过AngusRunner命令行方式运行测试和模拟数据任务方式,如果是本地模式(LOCAL)…