Python深度学习:BackPropagation反向传播与链式法则详解

青禾
青禾
发布时间:2026-10-14| 3人浏览过
原创

本文深入解析Python深度学习中的BackPropagation(反向传播)算法,重点阐述如何利用链式法则计算损失函数对参数的梯度。通过前向传播获取中间变量,再经反向传播逐层推导偏导数,最终结合梯度下降法优化模型参数,实现神经网络的有效训练。

1.链式法则

在深度学习模型训练中,为了确定最优的目标参数值,通常需要先设定一组初始参数,随后利用梯度下降算法持续迭代更新这些参数,直至损失函数达到最小值。这一过程中,核心环节在于计算梯度,即求解最终损失函数相对于各个参数的导数,从而指导参数的更新方向。

如示意图所示,假设存在一个输入层神经元,接收两个输入数据,对应的权重参数分别为w1和w2,并包含一个偏置项b。我们将这些参数线性组合得到z,再将z输入至sigmoid激活函数中,即可得到该神经元的输出结果。在此过程中,z对权重w求导相对简单,结果即为对应的输入数据x1和x2。根据链式法则,整体计算流程分为两部分:首先通过前向传播计算z对w的偏导数,随后通过反向传播计算损失函数C对z的偏导数。

2.前向传播

前向传播阶段主要计算z对w的偏导数。这一过程较为直接,参数的偏导结果即为该参数所对应的输入数据值,具体可见相关图示。对于输入层而言,输入数据即为原始数据(例如1和-1);而对于其他隐藏层,输入数据则是经过sigmoid函数转换后输出的结果。

3.后向传播

后向传播阶段旨在计算损失函数C对z的偏导数。

设每个神经元中sigmoid函数的最终输出为a。根据链式法则,C对z的偏导数可以表示为a对z的偏导数与C对a的偏导数的乘积。

其中,a对z的偏导数仅涉及sigmoid函数本身,该函数的导数可以通过数学公式直接计算得出。

关于C对a的偏导数,由于输出a会作为输入传递给下一层的多个神经元(假设有2个),因此C对a的偏导数等于C分别对这两个下一层神经元求偏导后的总和。以第一个神经元为例,其z' = 输入a * 权重w3 + ...,那么C对该神经元的偏导数,即为C对z'的偏导数乘以z'对a的偏导数,其中后一项即为权重w3;同理,对于z'',对a的偏导数即为权重w4。

此时,问题转化为求解C对z'和z''的偏导数结果。

假设已知损失函数C对z'和z''的偏导数,具体数值或表达式如下:

上述C对z求偏导的计算过程,可以整理为以下公式:括号外部分为a对z的偏导数,括号内部分为C对a的偏导数。

该公式在结构上可视为一个反向传播神经元,具体结构如示意图所示。

在该神经元结构中,损失函数C对sigmoid转换前z'和z''的求导结果作为输入,权重w3和w4作为对应输入的权重。将这两个输入分别乘以对应参数后相加,再与sigmoid函数对z的导数相乘,最终得到C对z的偏导数。其中,sigmoid对z的导数是一个常数,且已通过前向传播计算确定。

获得第一个反向传播的输出结果后,即可推导隐藏层其他神经元所需的结果。以此类推,对所有神经元均可计算出损失函数对其z的偏导数。结合之前计算的z对w的偏导数,即可计算出每个参数w的梯度,进而执行梯度下降算法进行参数更新。

4.计算方式整理

若计算目标是输出层,前向传播后已得到最终输出及对应的损失函数C,同时前向传播也提供了z'和z''的值,此时所有必要数据已就绪,可直接计算C对z'和z''的偏导数。

若计算目标是中间层,在计算C对z'的偏导数时,需要依赖下一层通过反向传播传递回来的C对另外两个z的结果。因此,需继续向下计算,寻找下一层计算所需的下下一层信息,直至到达输出层得到具体数值后,再反向递归计算前面所有待定项。

5.总结

由于反向传播需要以输出层的内容作为输入,在完成前向传播后,无需再纠结于前面各层的具体求导需求,直接由网络末端开始计算,逐层反向推导,即可得到每一层损失函数C对每个z的偏导数。

至此,我们获得了每个神经元前向传播中z对w的偏导数(即sigmoid转换后的输出a),以及每个神经元反向传播后C对z的偏导数。将二者相乘,即得到所需结果——每个参数的梯度。

以上为Python深度学习人工智能BackPropagation链式法则的详细内容,更多关于python人工智能BackPropagation链式法则的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。