反向传播(Backpropagation)

本文深入探讨了反向传播算法的原理,详细解释了链式法则在求解损失函数对权重偏导数中的应用,通过逐步分解复杂的网络结构,简化了梯度计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

由于个人理解能力有限,我看了好几遍李宏毅老师的推导才大致理解,如有错误之处恳请指正。


梯度与传播的关系

前面已经使用泰勒展开推导过损失函数值沿变量梯度的反方向下降最快的结论,考虑如下的网络结构
在这里插入图片描述
其中xnx_nxn代表输入的特征,wnw_nwn代表权重,bbb代表偏置,z=wx1+wx2+bz=wx_1+wx_2+bz=wx1+wx2+bzzz作为激活函数σ(z)\sigma(z)σ(z)的参数。
此时的目的是得到损失函数LLL 对每个wiw_iwi 的偏导(损失函数是针对整个模型来说的)。
LLLw1w_1w1 的偏导并不那么好求,首先,LLL 是所有样本损失函数(也就是所有样本交叉熵CCC)的集合,因此这里考虑单个样本交叉熵CCC 对所有wiw_iwi 的偏导。
在这里插入图片描述
w1w_1w1 举例:从后往前看,lll 包含σ(z′)\sigma(z^{\prime})σ(z)σ(z′′)\sigma(z^{\prime\prime})σ(z)σ(z′)\sigma(z^{\prime})σ(z)σ(z′′)\sigma(z^{\prime\prime})σ(z)包含z′z^{\prime}zz′′z^{\prime\prime}zz′z^{\prime}zz′′z^{\prime\prime}z包含σ(z)\sigma(z)σ(z)σ(z)\sigma(z)σ(z)包含zzzzzz包含w1w_1w1
感觉好复杂,不过也可以因此联想到高数学习的链式法则——g(f(x))g(f(x))g(f(x))xxx积分等于f′(x)g′(f(x))f^{\prime}(x)g^{\prime}(f(x))f(x)g(f(x)).


链式法则(chain rule)

链式法则是反向传播算法的关键,通过链式法则,可以化繁为简,最终求得∂C∂w1\frac{\partial C}{\partial w_{1}}w1C,下图是链式法则的精髓所在:
在这里插入图片描述


反向传播的推导

假设有中间层如下
在这里插入图片描述
则可以根据链式法则求得∂C/∂w1\partial C/\partial w_{1}C/w1,从左向右(输入向输出)一点点看,首先:
∂C∂w1=∂C∂z∂z∂w1 \frac{\partial C}{\partial w_{1}}=\frac{\partial C}{\partial z} \frac{\partial z}{\partial w_{1}} w1C=zCw1z
由于 z=w1x1+w2x2+bz=w_1x_1+w_2x_2+bz=w1x1+w2x2+b,因此 ∂z/∂w1=x1\partial z / \partial w_{1}=x_1z/w1=x1,下面求 ∂C/∂z\partial C/\partial zC/z
∂C∂z=∂C∂a∂a∂z \frac{\partial C}{\partial z}=\frac{\partial C}{\partial a} \frac{\partial a}{\partial z} zC=aCza
由于a=σ(z)a=\sigma(z)a=σ(z),因此∂σ(z)/∂z=σ′(z)\partial \sigma(z)/\partial z=\sigma^{\prime}(z)σ(z)/z=σ(z),下面求∂C/∂a\partial C/\partial aC/a
回过头看链式法则的case 2,CCCaaa 发射出两条路汇成,因此:

∂C∂a=∂C∂z′∂z′∂a+∂C∂z′′∂z′′∂a \frac{\partial C}{\partial a}=\frac{\partial C}{\partial z^{\prime}} \frac{\partial z^{\prime}}{\partial a}+\frac{\partial C}{\partial z^{\prime\prime}} \frac{\partial z^{\prime \prime}}{\partial a} aC=zCaz+zCaz
∂z′/∂a=w3\partial z^{\prime}/\partial a=w_3z/a=w3∂z′′/∂a=w4\partial z^{\prime\prime}/\partial a=w_4z/a=w4,因此上面可以变为:

∂C∂a=w3∂C∂z′+w4∂C∂z′′ \frac{\partial C}{\partial a}=w_3\frac{\partial C}{\partial z^{\prime}} +w_4\frac{\partial C}{\partial z^{\prime\prime}} aC=w3zC+w4zC

那么对于每一层,对照下图,便有:
∂C∂z=σ′(z)[w3∂C∂z′+w4∂C∂z′′] \frac{\partial C}{\partial z}=\sigma^{\prime}(z)\left[w_{3} \frac{\partial C}{\partial z^{\prime}}+w_{4} \frac{\partial C}{\partial z^{\prime \prime}}\right] zC=σ(z)[w3zC+w4zC]
在这里插入图片描述
如果z′z^{\prime}z 后面便对应着输出y1y_1y1z′′z^{\prime\prime}z后面便对应着y2y_2y2,那么显然:
∂C∂z′=∂y1∂z′∂C∂y1且∂C∂z′′=∂y2∂z′′∂C∂y2 \frac{\partial C}{\partial z^{\prime}}=\frac{\partial y_{1}}{\partial z^{\prime}} \frac{\partial C}{\partial y_{1}} \quad且\quad \frac{\partial C}{\partial z^{\prime \prime}}=\frac{\partial y_{2}}{\partial z^{\prime \prime}} \frac{\partial C}{\partial y_{2}} zC=zy1y1CzC=zy2y2C
在这里插入图片描述
此时由于y1y_1y1y2y_2y2 已知,很容易便可以算出上式。

如果a′a^{\prime}aa′′a^{\prime\prime}a 后面还对应结点,则将a′a^{\prime}aa′′a^{\prime\prime}a 作为输入,递归的进行上面的步骤直到输出层。
反向计算会使得很大程度上降低时间复杂度,对于∂C∂w=∂C∂z∂z∂w \frac{\partial C}{\partial w_{}}=\frac{\partial C}{\partial z} \frac{\partial z}{\partial w_{}} wC=zCwz可以前向计算每个结点的值作为∂z/∂w\partial z/\partial wz/w,通过反向传播计算∂C/∂z\partial C/\partial zC/z(计算公式在上面),二者相乘即为损失函数CCC 对所有www 进行偏微分的集合。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值