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


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

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

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

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} wL ∂ L ∂ b \frac{\partial L}{\partial b} bL

使用链式法则:

∂ 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} wL=yLzywz

∂ 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} bL=yLzybz

其中:

  • ∂ L ∂ y \frac{\partial L}{\partial y} yL 是损失函数对输出的梯度
  • ∂ y ∂ z = σ ′ ( z ) \frac{\partial y}{\partial z} = \sigma'(z) zy=σ(z) 是激活函数的导数
  • ∂ z ∂ w = x \frac{\partial z}{\partial w} = x wz=x
  • ∂ z ∂ b = 1 \frac{\partial z}{\partial b} = 1 bz=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} W2L=yLz2yW2z2

∂ 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} W1L=yLz2yhz2z1hW1z1

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

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} AL 已知,我们可以计算:

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

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

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

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

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

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

6.1 Sigmoid函数

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
σ ′ ( 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+exexex
tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh'(x) = 1 - \tanh^2(x) tanh(x)=1tanh2(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 x0

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

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=γvt1+αθ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=β1mt1+(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=β2vt1+(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.

End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/394074.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

29.Labview界面设计(下篇) --- 自定义控件库、界面布局与外观设计

摘要: 题主在上一篇文章中向大家讲解了前面板逻辑框架及结构的搭建和控件的类型介绍,那么本章主要围绕前面板的控件布局以及控件的自定义类型和背景等外观优化项中来讲解。 本篇文章讲解界面设计的下篇内容,上篇内容链接大家可以直接点击链接…

国家统计局中国主要城市面板数据(1990-2023年)

数据说明:数据来源于国家统计局,指标包含:城市、年份、第三产业增加值、第一产业增加值 地区生产总值、第二产业增加值、年末户籍人口、城镇非私营单位在岗职工平均工资 房地产开发投资额、房地产开发住宅投资额、房地产开发办公楼投资额、房…

Linux C 程序 【03】线程栈空间

1.开发背景 上一个篇章创建了线程,参考 FreeRTOS,每个线程都是有自己的内存空间,Linux上面也是一样的,这个篇章主要描述线程栈空间的设置。 2.开发需求 设计实验: 1)创建线程,并配置线程内存大…

培训第二十二天(mysql数据库主从搭建)

上午 1、为mysql添加开机启动chkconfig [rootmysql1 ~]# chkconfig --list //列出系统服务在不同运行级别下的启动状态注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务…

IEEE报告解读:存储技术发展趋势分析

1.引言 随着数据科学、物联网(IoT)和永久存储需求的快速增长,对大规模数据存储的需求正在迅速增加。存储技术的发展趋势直接关系到数据的可靠性和经济性。本文将根据IEEE最新发布的《2023年国际器件与系统路线图》,深入探讨各种存…

AnyGPT: Unified Multimodal LLM with Discrete Sequence Modeling

发表时间:arXiv 2024年2月26日 论文链接:https://arxiv.org/pdf/2402.12226 作者单位: Fudan University Motivation: LLM 在理解和生成人类语言方面表现出非凡的能力。但是,LLM 的能力仅限于针对文本的处理。而现…

详解Xilinx FPGA高速串行收发器GTX/GTP(2)--什么是GTX?

文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 GTX本质上是基于SerDes技术的高速串行收发器,它是FPGA内部的底层电路,也叫做Gigabit Transceiver(吉比特收发器,简称为GT)。其中A7系列使用的GT叫GTP,K7系列使用的GT叫GTX,V7系列使用的GT叫GTH和GTZ,它们…

循环神经网络和自然语言处理一

目录 一.分词 1.分词工具 2.分词的方法 3.N-gram表示方法 二.向量化 1.one-hot编码 2.word embedding 3.word embedding API 4.数据形状改变 既然是自然语言,那么就有字,词,句了 一.分词 1.分词工具 tokenization,jie…

【数据结构】二叉搜索树(Java + 链表实现)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构、LeetCode专栏 📚本系…

【DOCKER】显示带UI的软件

1. Linux 1.1 宿主机开放X server权限 xhost 1.2 启动容器 docker run -it --rm --privilegedtrue --useru20 --workdir/home/u20 \ -e DISPLAYhost.docker.internal:0 u20:dev1.3 测试 # 安装测试软件 sudo apt-get -y install x11-apps# 显示测试程序 xclock2. Windows …

LearnOpenGL-光照章节学习笔记

LearnOpenGL-光照章节学习笔记 颜色创建一个光照场景 基础光照一、环境光照二、漫反射光照三、镜面反射 材质光照贴图一、漫反射贴图二、镜面光贴图三、放射光贴图 投光物一、平行光二、点光源衰减实现 三、聚光灯平滑边缘 多光源一、平行光(定向光)二、…

免费代理池是什么,如何使用代理IP进行网络爬虫?

互联网是一个庞大的数据集合体,网络信息资源丰富且繁杂,想要从中找到自己需要的信息要花费较多的时间。为了解决这个问题,网络爬虫技术应运而生,它的主要作用就是在海量的互联网信息中进行爬取,抓取有效信息并存储。然…

广州城市信息模型(CIM)白皮书学习

CIM平台定义 以建筑信息模型(BIM)、地理信息系统(GIS)、物联网(IoT)等技术为基础,整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据,构建起三维数字空间的城市信息有机综合体。 广州CIM平台建设历程 2019 年 6 月住房和…

动手学深度学习V2每日笔记(深度卷积神经网络AlexNet)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1h54y1L7oe/spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&…

13021.Nvidia AGX orin 平台学习记录

文章目录 1 Jetson AGX 开发板编译环境搭建1.1 官方资料包下载1.2 开发者手册1.2.1 安装jetpack 2 更新Image文件2.1 自编译的Image内核文件更新到系统 3 编译文档3.1 编译内核步骤3.1.1 下载kernel_src 源码包3.1.2 编译内核 3.2 编译内核工具链下载3.2 orin 介绍 4 csi_trace…

Shell定时上传日志到HDFS

Shell定时上传日志到HDFS 一、任务需求二、实现思路三、具体实现流程3.1 规划文件上传目录3.2 开发 shell 脚本3.3 授予 shell 可执行权限3.4 手动执行查看3.4 定时执行 shell 脚本 一、任务需求 公司在线服务器每天都会产生网站运行日志,为了避免志文件过大&#…

QT Word文档控件QAxWidget C++退出

我们知道每次加载word控件&#xff0c;都会导致后台启动一个WINWORD.EXE 如何安全退出呢 1、一个最简单的例子 QT core gui axcontainer MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QAxWidget> #include…

【强化学习的数学原理】课程笔记--6(Actor-Critic方法)

目录 Actor-Critic 方法QAC 算法Advantage Actor-Critic 算法Baseline invariance Off-policy Actor-Critic重要性采样 Deterministic Policy Gradient (DPG) 系列笔记&#xff1a; 【强化学习的数学原理】课程笔记–1&#xff08;基本概念&#xff0c;贝尔曼公式&#xff09; …

Java哈希算法

哈希算法 哈希算法1.概述2.哈希碰撞3.常用的哈希算法4.哈希算法的用途4.1校验下载文件4.2存储用户密码MD5加密5.SHA-1加密小结&#xff1a; 哈希算法 1.概述 哈希算法&#xff08;Hash&#xff09;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;它的作用是&#xf…

[软件测试·研究向] MuJava 工具遇到的问题汇总和体会

MuJava 是初学者&#xff08;研究向&#xff09;常常会去使用的一个工具&#xff0c;也是 Java 软件测试的一个老牌工具。用于为 Java 代码生成变异体和运行单元测试。但是此工具已经有十年没有更新了&#xff0c;这款软件可以说现在已经不能够支持对主流软件框架运行测试。但是…