【机器学习】BP神经网络中的链式法则



🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈炫酷HTML | JavaScript基础

💫个人格言: "如无必要,勿增实体"


文章目录

  • BP神经网络中的链式法则
    • [1. 引言](#1. 引言)
    • [2. 链式法则基础](#2. 链式法则基础)
      • [2.1 什么是链式法则?](#2.1 什么是链式法则?)
      • [2.2 数学表达](#2.2 数学表达)
    • [3. 链式法则在单层神经网络中的应用](#3. 链式法则在单层神经网络中的应用)
      • [3.1 单层神经网络结构](#3.1 单层神经网络结构)
      • [3.2 前向传播](#3.2 前向传播)
      • [3.3 反向传播](#3.3 反向传播)
    • [4. 链式法则在多层神经网络中的应用](#4. 链式法则在多层神经网络中的应用)
      • [4.1 多层神经网络结构](#4.1 多层神经网络结构)
      • [4.2 前向传播](#4.2 前向传播)
      • [4.3 反向传播](#4.3 反向传播)
    • [5. 链式法则的矩阵形式](#5. 链式法则的矩阵形式)
      • [5.1 矩阵形式的前向传播](#5.1 矩阵形式的前向传播)
      • [5.2 矩阵形式的反向传播](#5.2 矩阵形式的反向传播)
    • [6. 链式法则在不同激活函数中的应用](#6. 链式法则在不同激活函数中的应用)
      • [6.1 Sigmoid函数](#6.1 Sigmoid函数)
      • [6.2 Tanh函数](#6.2 Tanh函数)
      • [6.3 ReLU函数](#6.3 ReLU函数)
    • [7. 链式法则在优化算法中的应用](#7. 链式法则在优化算法中的应用)
      • [7.1 梯度下降](#7.1 梯度下降)
      • [7.2 动量法](#7.2 动量法)
      • [7.3 Adam算法](#7.3 Adam算法)
    • [8. 链式法则的计算效率](#8. 链式法则的计算效率)
      • [8.1 计算图](#8.1 计算图)
      • [8.2 自动微分](#8.2 自动微分)
    • [9. 链式法则的局限性和挑战](#9. 链式法则的局限性和挑战)
      • [9.1 梯度消失和梯度爆炸](#9.1 梯度消失和梯度爆炸)
      • [9.2 长期依赖问题](#9.2 长期依赖问题)
    • [10. 结论](#10. 结论)
    • 参考文献

BP神经网络中的链式法则

1. 引言

反向传播(Backpropagation,简称BP)算法是神经网络训练中的核心技术,而链式法则则是BP算法的基础。本文将深入探讨BP神经网络中链式法则的原理、应用及其重要性。我们将从基本概念出发,逐步深入到复杂的多层神经网络中的应用,并讨论其在实际工程中的意义。

2. 链式法则基础

2.1 什么是链式法则?

链式法则是微积分中的一个基本法则,用于计算复合函数的导数。在神经网络中,它允许我们计算损失函数相对于网络中任何参数的梯度。

2.2 数学表达

对于复合函数 f ( g ( x ) ) f(g(x)) f(g(x)),其导数可以表示为:

d d x f ( g ( x ) ) = d f d g ⋅ d g d x \frac{d}{dx}f(g(x)) = \frac{df}{dg} \cdot \frac{dg}{dx} dxdf(g(x))=dgdf⋅dxdg

这就是最基本的链式法则表达式。

3. 链式法则在单层神经网络中的应用

3.1 单层神经网络结构

考虑一个简单的单层神经网络:

  • 输入: x x x
  • 权重: w w w
  • 偏置: b b b
  • 激活函数: σ \sigma σ
  • 输出: y = σ ( w x + b ) y = \sigma(wx + b) y=σ(wx+b)

3.2 前向传播

前向传播过程可以表示为:

z = w x + b z = wx + b z=wx+b
y = σ ( z ) y = \sigma(z) y=σ(z)

3.3 反向传播

假设损失函数为 L L L,我们需要计算 ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L 和 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L。

使用链式法则:

∂ L ∂ w = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w} ∂w∂L=∂y∂L⋅∂z∂y⋅∂w∂z

∂ L ∂ b = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ b \frac{\partial L}{\partial b} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial b} ∂b∂L=∂y∂L⋅∂z∂y⋅∂b∂z

其中:

  • ∂ L ∂ y \frac{\partial L}{\partial y} ∂y∂L 是损失函数对输出的梯度
  • ∂ y ∂ z = σ ′ ( z ) \frac{\partial y}{\partial z} = \sigma'(z) ∂z∂y=σ′(z) 是激活函数的导数
  • ∂ z ∂ w = x \frac{\partial z}{\partial w} = x ∂w∂z=x
  • ∂ z ∂ b = 1 \frac{\partial z}{\partial b} = 1 ∂b∂z=1

4. 链式法则在多层神经网络中的应用

4.1 多层神经网络结构

考虑一个三层神经网络:

  • 输入层: x x x
  • 隐藏层: h = σ ( W 1 x + b 1 ) h = \sigma(W_1x + b_1) h=σ(W1x+b1)
  • 输出层: y = σ ( W 2 h + b 2 ) y = \sigma(W_2h + b_2) y=σ(W2h+b2)

4.2 前向传播

前向传播过程可以表示为:

z 1 = W 1 x + b 1 z_1 = W_1x + b_1 z1=W1x+b1
h = σ ( z 1 ) h = \sigma(z_1) h=σ(z1)
z 2 = W 2 h + b 2 z_2 = W_2h + b_2 z2=W2h+b2
y = σ ( z 2 ) y = \sigma(z_2) y=σ(z2)

4.3 反向传播

使用链式法则计算梯度:

∂ L ∂ W 2 = ∂ L ∂ y ⋅ ∂ y ∂ z 2 ⋅ ∂ z 2 ∂ W 2 \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z_2} \cdot \frac{\partial z_2}{\partial W_2} ∂W2∂L=∂y∂L⋅∂z2∂y⋅∂W2∂z2

∂ L ∂ W 1 = ∂ L ∂ y ⋅ ∂ y ∂ z 2 ⋅ ∂ z 2 ∂ h ⋅ ∂ h ∂ z 1 ⋅ ∂ z 1 ∂ W 1 \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z_2} \cdot \frac{\partial z_2}{\partial h} \cdot \frac{\partial h}{\partial z_1} \cdot \frac{\partial z_1}{\partial W_1} ∂W1∂L=∂y∂L⋅∂z2∂y⋅∂h∂z2⋅∂z1∂h⋅∂W1∂z1

这里我们可以看到,链式法则允许我们将梯度一层层地传播回去。

5. 链式法则的矩阵形式

在实际应用中,我们通常使用矩阵形式来表示神经网络的计算。链式法则在矩阵形式下仍然适用。

5.1 矩阵形式的前向传播

对于一个隐藏层:

Z = W X + b Z = WX + b Z=WX+b
A = σ ( Z ) A = \sigma(Z) A=σ(Z)

其中 W W W 是权重矩阵, X X X 是输入矩阵, b b b 是偏置向量。

5.2 矩阵形式的反向传播

假设 ∂ L ∂ A \frac{\partial L}{\partial A} ∂A∂L 已知,我们可以计算:

∂ L ∂ Z = ∂ L ∂ A ⊙ σ ′ ( Z ) \frac{\partial L}{\partial Z} = \frac{\partial L}{\partial A} \odot \sigma'(Z) ∂Z∂L=∂A∂L⊙σ′(Z)

∂ L ∂ W = ∂ L ∂ Z X T \frac{\partial L}{\partial W} = \frac{\partial L}{\partial Z} X^T ∂W∂L=∂Z∂LXT

∂ L ∂ b = ∑ i = 1 m ∂ L ∂ Z i \frac{\partial L}{\partial b} = \sum_{i=1}^m \frac{\partial L}{\partial Z_i} ∂b∂L=i=1∑m∂Zi∂L

其中 ⊙ \odot ⊙ 表示元素wise乘法, m m m 是样本数量。

6. 链式法则在不同激活函数中的应用

不同的激活函数会影响链式法则的具体计算。以下是几个常见激活函数的导数:

6.1 Sigmoid函数

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x)(1 - \sigma(x)) σ′(x)=σ(x)(1−σ(x))

6.2 Tanh函数

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x
tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh'(x) = 1 - \tanh^2(x) tanh′(x)=1−tanh2(x)

6.3 ReLU函数

ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
ReLU ′ ( x ) = { 1 if x > 0 0 if x ≤ 0 \text{ReLU}'(x) = \begin{cases} 1 & \text{if } x > 0 \\ 0 & \text{if } x \leq 0 \end{cases} ReLU′(x)={10if x>0if x≤0

在使用链式法则时,需要根据具体的激活函数选择相应的导数形式。

7. 链式法则在优化算法中的应用

链式法则不仅用于计算梯度,还在各种优化算法中发挥重要作用。

7.1 梯度下降

最基本的梯度下降算法使用链式法则计算的梯度来更新参数:

θ = θ − α ∂ L ∂ θ \theta = \theta - \alpha \frac{\partial L}{\partial \theta} θ=θ−α∂θ∂L

其中 α \alpha α 是学习率, θ \theta θ 是需要优化的参数。

7.2 动量法

动量法引入了历史梯度信息:

v t = γ v t − 1 + α ∂ L ∂ θ v_t = \gamma v_{t-1} + \alpha \frac{\partial L}{\partial \theta} vt=γvt−1+α∂θ∂L
θ = θ − v t \theta = \theta - v_t θ=θ−vt

其中 γ \gamma γ 是动量系数。

7.3 Adam算法

Adam算法结合了动量法和自适应学习率:

m t = β 1 m t − 1 + ( 1 − β 1 ) ∂ L ∂ θ m_t = \beta_1 m_{t-1} + (1 - \beta_1) \frac{\partial L}{\partial \theta} mt=β1mt−1+(1−β1)∂θ∂L
v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∂ L ∂ θ ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\frac{\partial L}{\partial \theta})^2 vt=β2vt−1+(1−β2)(∂θ∂L)2
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1−β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1−β2tvt
θ = θ − α m ^ t v ^ t + ϵ \theta = \theta - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θ=θ−αv^t +ϵm^t

这些优化算法都依赖于通过链式法则计算得到的梯度信息。

8. 链式法则的计算效率

8.1 计算图

在实际应用中,我们通常使用计算图来表示神经网络的计算过程。计算图可以帮助我们更直观地应用链式法则,并提高计算效率。

8.2 自动微分

现代深度学习框架(如TensorFlow和PyTorch)使用自动微分技术,这种技术基于链式法则,但通过智能的图优化和并行计算大大提高了效率。

9. 链式法则的局限性和挑战

9.1 梯度消失和梯度爆炸

在深层网络中,链式法则可能导致梯度消失或梯度爆炸问题。这是因为多个小于1的数相乘会趋近于0,而多个大于1的数相乘会趋近于无穷大。

9.2 长期依赖问题

在处理序列数据时,标准的BP算法难以捕捉长期依赖关系,这部分是由于链式法则在长序列中的累积效应。

10. 结论

链式法则是BP神经网络中的核心概念,它为我们提供了一种系统的方法来计算复杂神经网络中的梯度。通过链式法则,我们可以有效地训练深层神经网络,实现端到端的学习。

尽管链式法则在某些情况下面临挑战,但它仍然是深度学习中不可或缺的工具。随着新技术的发展,如残差连接、门控机制等,我们正在不断克服这些挑战,使神经网络能够学习更复杂的模式和更长期的依赖关系。

理解并掌握链式法则,对于深入理解神经网络的工作原理、设计新的网络结构和优化算法都具有重要意义。作为算法工程师,我们应该不断深化对链式法则的理解,并在实践中灵活运用这一强大工具。

参考文献

  1. Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323(6088), 533-536.
  2. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning. MIT press.
  3. Kingma, D. P., & Ba, J. (2014). Adam: A method for stochastic optimization. arXiv preprint arXiv:1412.6980.
相关推荐
浊酒南街1 分钟前
决策树(理论知识1)
算法·决策树·机器学习
B站计算机毕业设计超人9 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条14 分钟前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客18 分钟前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon21 分钟前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客52024 分钟前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神25 分钟前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
IT猿手1 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法
咸鱼桨1 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派