10-误差反向传播法(一)——计算图
误差反向传播法
上一篇文章介绍的是用数值微分法计算梯度,但这种方法比较耗时间,接下来介绍新的梯度计算法:误差反向传播法。在此之前,先介绍计算图。
一、计算图
计算图用节点和箭头表示,节点表示某种运算(可以是加减乘除等简单计算,也可以是一个复合运算),箭头上是某些参与计算的数据。
计算图分为正向传播和反向传播,下面这幅图,白色箭头是正向的,蓝色箭头是反向的。
局部计算
每个节点的计算只与当前节点及它的数据有关,各个节点的计算互不干扰。
链式法则
计算图的反向传播:
假设存在 y = f(x)的计算,这个计算的反向传播如图所示。
反向传播的计算顺序是,将信号E乘以节点的局部导数 ( d y d x dy\over dx dxdy),然后将结果传递给下一个节点。这里所说的局部导数是指正向传播 中y = f(x)的导数,即y关于x的导数( d y d x dy\over dx dxdy)
通过这样的计算,可以高效地求出导数的 值,这是反向传播的要点
什么是链式法则:
介绍链式法则时,我们需要先从复合函数说起。复合函数是由多个函数 构成的函数。比如, z = ( x + y ) 2 z = (x + y)^2 z=(x+y)2是由式 { z = t 2 t = x + y {z=t2t=x+y的两个式子构成的。
链式法则的原理:如果某个函数由复合函数表示,则该复合函数的导数可以用构成复 合函数的各个函数的导数的乘积表示。用公式表示为:
∂
z
∂
x
=
∂
z
∂
t
∂
t
∂
x
\frac{\partial z}{\partial x }=\frac{\partial z}{\partial t }\frac{\partial t}{\partial x }
∂x∂z=∂t∂z∂x∂t
链式法则和计算图:
以该函数为例: { z = t 2 t = x + y {z=t2t=x+y
其中 a, b, c, d
各字母表示的式子如下:
d
:
∂
z
∂
z
c
:
∂
z
∂
z
×
∂
z
∂
t
b
:
∂
z
∂
z
×
∂
z
∂
t
×
∂
t
∂
y
a
:
∂
z
∂
z
×
∂
z
∂
t
×
∂
t
∂
x
d:\frac{\partial z}{\partial z}~~~~~~~~~~~~~~~~~~~~~\\c:\frac{\partial z}{\partial z}\times\frac{\partial z}{\partial t}~~~~~~~~~~\\b:\frac{\partial z}{\partial z}\times \frac{\partial z}{\partial t} \times\frac{\partial t}{\partial y}\\a:\frac{\partial z}{\partial z}\times \frac{\partial z}{\partial t} \times\frac{\partial t}{\partial x}\\
d:∂z∂z c:∂z∂z×∂t∂z b:∂z∂z×∂t∂z×∂y∂ta:∂z∂z×∂t∂z×∂x∂t
加法节点的反向传播
例: z = x + y z = x + y z=x+y
c
:
∂
L
∂
z
b
:
∂
L
∂
z
×
1
a
:
∂
L
∂
z
×
1
c:\frac{\partial L}{\partial z}~~~~~~~\\b:\frac{\partial L}{\partial z}\times 1\\a:\frac{\partial L}{\partial z}\times 1\\
c:∂z∂L b:∂z∂L×1a:∂z∂L×1
可以看到a, b, c 都是一样的,因此,加法节点的反向传播将上游的值原封不动地输出到下游,下面用具体数据来表示,看下面的图,你会对 原封不动 有更深的印象:
乘法节点的反向传播
以 z = x y z=xy z=xy 为例:
c
:
∂
L
∂
z
b
:
∂
L
∂
z
×
x
a
:
∂
L
∂
z
×
y
c:\frac{\partial L}{\partial z}~~~~~~~\\b:\frac{\partial L}{\partial z}\times x\\a:\frac{\partial L}{\partial z}\times y\\
c:∂z∂L b:∂z∂L×xa:∂z∂L×y
乘法的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值” 后传递给下游。
如上图所示,正向传播时信号是x的话,反向传播时则是y(即 ∂ L ∂ z × y \frac{\partial L}{\partial z}\times y ∂z∂L×y);正向传播时信号是y的话,反向传播时则是x(即 ∂ L ∂ z × x \frac{\partial L}{\partial z}\times x ∂z∂L×x)。
下面用具体数据表示,好好理解下什么是翻转:
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/p/15383592.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人