DataLearner 标志DataLearnerAI
最新AI资讯
大模型评测
大模型列表
大模型对比
资源中心
AI工具导航

加载中...

DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
  1. 首页/
  2. 博客列表/
  3. 博客详情

深度学习的反向传播手动推导

2019/06/04 11:37:14
4,133 阅读
反向传播梯度下降深度学习

反向传播算法是深度学习求解最重要的方法。这里我们手动推导一下。

一般来说,我们讲神经网络的层数,是包含输出层,但是不包含输入层的。因此,神经网络第一层的输入是数据,最后一层的输出就是预测结果了。在这里我们主要讲反向传播的推导,因此为了简便,忽略了维度的表示。以下符号并没有考虑维度。

  • 一、符号说明
  • 二、前向传播表示
  • 三、反向传播推导
  • 四、总结

一、符号说明

假设我们的输入数据是$X$,真实的标签是$y$。

首先假设神经网络有$L$层,最后一层是输出层,只有一个神经元。每层的变量和函数都使用上标表示其所在的层。每一层的激活函数的输出为$A$,激活函数的输入是$Z$,它是由权重矩阵$W$和偏移$b$一起,作用于输入得到的。当这个层是第一层的时候,输入是数据$X$,当这个层不是第一层的时候,其输入是前一层的激活函数的输出。假设输出层的输出是$\hat{y}$,即预测结果。

二、前向传播表示

那么,假设我们考虑第$l$个隐层,其输入是$A^{[l-1]}$,那么,其前向传播(forward propagation)的表示为:

Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]}
A^{[l]} = g^{[l]}(Z^{[l]})

当$l=1$的时候,$A^{[0]}=X$。当$l=L$的时候,$A^{[L]}=\hat{y}$。

三、反向传播推导

反向传播是从输出层开始,逐层计算梯度,并更新权重。我们首先定义损失函数,假设这里的标签是连续值,我们采用“平方损失函数(Square Loss)”:

J = \frac{1}{2}(\hat{y} - y )^2 = \frac{1}{2}(A^{[L]} - y )^2

我们先说明一下输出层的前向传播结果。输出层为$L$层,其输入是$A^{[L-1]}$,权重和偏移分别为$W^{[L]}$和$b^{[L]}$,激活函数为$g^{[L-1]}(\cdot)$,那么其前向传播的表示为:

Z^{[L]} = W^{[L]} A^{[L-1]} + b^{[L]}
A^{[L]} = \hat{y} = g^{[L]}(Z^{[L]})

反向传播的第一步,初始化计算最后一层的$dA^{[L]} = \partial J / \partial A^{[L]}$:

\begin{aligned}
dA^{[L]} &= \frac{\partial J }{ \partial A^{[L]}}\\
&\\
&= (\hat{y} - y )\hat{y}'\\
&\\
&= (\hat{y} - y )

\end{aligned}

接下来,就是给定$dA^{[L]}$,计算$dZ^{[L]}$,也就是损失函数对$Z^{[L]}$的偏导:

\begin{aligned}

dZ^{[L]} &= \frac{\partial J}{\partial Z^{[L]}}\\ 
&\\
&= (\hat{y} - y) \cdot \frac{\partial \hat{y}}{\partial Z^{[L]}}  \\
&\\
&=(\hat{y} - y) \cdot g^{[L]'}(Z^{[L]}) \\
&\\
&= dA^{[L]} \cdot g^{[L]'}(Z^{[L]})

\end{aligned}

接下来就是求$dW^{[L]}$:

\begin{aligned}

dW^{[L]} &= \frac{\partial J}{\partial W^{[L]}}\\ 
&\\
&= (\hat{y} - y) \cdot \frac{\partial \hat{y}}{\partial W^{[L]}}  \\
&\\
&=(\hat{y} - y) \cdot g^{[L]'}(Z^{[L]}) \cdot  \frac{\partial Z^{[L]}}{\partial W^{[L]}}  \\
&\\
&=dZ^{[L]} \cdot A^{[L-1]}

\end{aligned}

继续求$db^{[L]}$:

\begin{aligned}

db^{[L]} &= \frac{\partial J}{\partial b^{[L]}}\\ 
&\\
&= (\hat{y} - y) \cdot \frac{\partial \hat{y}}{\partial b^{[L]}}  \\
&\\
&=(\hat{y} - y) \cdot g^{[L]'}(Z^{[L]}) \cdot  \frac{\partial Z^{[L]}}{\partial b^{[L]}}  \\
&\\
&=dZ^{[L]}

\end{aligned}

最后求$dA^{[L-1]}$:

\begin{aligned}

dA^{[L-1]} &= \frac{\partial J}{\partial A^{[L-1]}}\\ 
&\\
&= (\hat{y} - y) \cdot \frac{\partial \hat{y}}{\partial A^{[L-1]}}  \\
&\\
&=(\hat{y} - y) \cdot g^{[L]'}(Z^{[L]}) \cdot  \frac{\partial Z^{[L]}}{\partial A^{[L-1]}}  \\
&\\
&=dZ^{[L]} \cdot W^{[L]}

\end{aligned}

然后就要更新参数了:

W^{[L]} = W^{[L]} - \alpha dW^{[L]}
b^{[L]} = b^{[L]} - \alpha db^{[L]}

至此,就是根据$dA^{[L-1]}$,继续计算剩下的$dA^{[L-2]}$、$dW^{[L-1]}$和$db^{[L-1]}$,然后更新参数。直到第一层为止。

注意:这里都是矩阵计算的方式,一个批次的数据一起计算求和之后需要除以批次中数据的数据量。

四、总结

根据上述计算,我们知道,在计算反向传播的时候,第一步需要我们计算前向传播的结果并保存。以第$l$层为例,我们保存前向传播中的$A^{[l]}$、$Z^{[l]}$、$W^{[l]}$和$b^{[l]}$。

在反向传播中,我们先初始化计算最后一层的$dA^{[L]}$。剩下的就是循环计算:

给定$dA^{[L]}$,求$dA^{[L-1]}$、$dW^{[L]}$和$db^{[L]}$,计算过程中,我们会用到前面保存的前向传播结果,计算方法如下:

dZ^{[l]} =  dA^{[l]} \cdot g^{[l]'}(Z^{[l]})
dW^{[l]} =  dZ^{[L]} \cdot A^{[L-1]}
db^{[l]} =  dZ^{[L]}
dA^{[l-1]} =  dZ^{[L]} \cdot W^{[L]}

至此,反向传播计算完成。

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • 梯度下降方法(三种不同地梯度下降方法简介)
  • 梯度下降、牛顿法、拟牛顿法详细介绍
  • Batch Normalization应该在激活函数之前使用还是激活函数之后使用?
  • Saleforce发布最新的开源语言-视觉处理深度学习库LAVIS
  • 深度学习模型训练将训练批次(batch)设置为2的指数是否有实际价值?
  • 指标函数(Metrics Function)和损失函数(Loss Function)的区别是什么?
  • 亚马逊近线性大规模模型训练加速库MiCS来了!
  • Hugging Face发布最新的深度学习模型评估库Evaluate!

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署