深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导

文章目录

  • 补充知识:∇ 和 ⊙ 运算符详解
    • ∇ (nabla) 运算符
    • ⊙ (圆圈点) 运算符
  • 反向传播基本公式
  • 计算图和基本定义
  • BP1:输出层误差推导
    • BP1公式的重要性
    • 实际例子
    • BP2第 l l l层误差推导
    • BP3 :损失函数关于偏置(b)偏导的推导
    • BP4: 损失函数关于权值(w)偏导推导

补充知识:∇ 和 ⊙ 运算符详解

  • 在神经网络的反向传播算法中,我们经常会遇到像 δ L = ∇ a L ⊙ f ′ ( z L ) δᴸ = ∇ₐL ⊙ f'(zᴸ) δL=aLf(zL) 这样的表达式。让我们来深入探讨其中的 ∇ (nabla) 和 ⊙ (圆圈点) 运算符。

∇ (nabla) 运算符

  • ∇ 符号在数学中被称为 “nabla” 或 “del” 运算符,它表示梯度(gradient)。在神经网络中:

  • ∇ₐL 表示损失函数 L 相对于网络最后一层激活输出 aᴸ 的梯度

  • 这是一个向量,其中每个元素是损失函数对相应激活值的偏导数

  • 数学表达式为: ∇ a L = [ ∂ L / ∂ a 1 , ∂ L / ∂ a 2 , . . . , ∂ L / ∂ a n ] T ∇ₐL = [∂L/∂a₁, ∂L/∂a₂, ..., ∂L/∂aₙ]ᵀ aL=[L/a1,L/a2,...,L/an]T

  • 在反向传播中, ∇ a L ∇ₐL aL 告诉我们如果稍微改变输出层的激活值,损失函数会如何变化。这是误差从损失函数向后传播的第一步。

⊙ (圆圈点) 运算符

  • ⊙ 符号表示逐元素乘法(也称为 Hadamard 乘积):

  • 它作用于两个相同维度的向量或矩阵。不是矩阵乘法,而是简单地对相应位置的元素相乘

  • 数学表达式为: ( A ⊙ B ) i j = A i j × B i j (A ⊙ B)ᵢⱼ = Aᵢⱼ × Bᵢⱼ (AB)ij=Aij×Bij

反向传播基本公式

方程含义
δ L = ∇ a L ⊙ f ′ ( z L ) \delta^{L} = \nabla_{a} L \odot f^{\prime}(z^{L}) δL=aLf(zL)BP1 输出层误差
δ l = ( ( w l ) T δ l + 1 ) ⊙ f ′ ( z l ) \delta^{l} = ((w^{l})^{T} \delta^{l+1}) \odot f^{\prime}(z^{l}) δl=((wl)Tδl+1)f(zl)BP2 第 l l l 层误差
∂ L ∂ b i l = δ i l \frac{\partial L}{\partial b_{i}^{l}} = \delta_{i}^{l} bilL=δilBP3 损失函数关于偏置(b)的偏导
∂ L ∂ w i , j l = a j l − 1 δ i l \frac{\partial L}{\partial w_{i,j}^{l}} = a_{j}^{l-1} \delta_{i}^{l} wi,jlL=ajl1δilBP4 损失函数关于权值(w)的偏导

计算图和基本定义

在这里插入图片描述

  • 损失函数: L = 1 2 ( y − a l ) 2 L=\frac{1}{2}(y-a^l)^2 L=21(yal)2
  • 通项: a l = δ ( z l ) = δ ( w l a l − 1 + b l ) a^l=\delta(z^l)=\delta(w^la^{l-1}+b^l) al=δ(zl)=δ(wlal1+bl)
  • 定义第 l l l层的第 i i i个神经元的误差为 δ i l \delta_i^l δil
    δ i l = ∂ L ∂ z i l \delta_i^l=\frac{\partial L}{\partial z_i^l} δil=zilL

BP1:输出层误差推导

  • 前置公式
    • 损失函数: L = 1 2 ( y − a l ) 2 L=\frac{1}{2}(y-a^l)^2 L=21(yal)2
    • l l l层神经元关系 a l = δ ( z l ) a^l = \delta(z^l) al=δ(zl)

  • 采用上图中 l − 1 l-1 l1 z 1 z_1 z1节点为例
    δ = ∂ L ∂ z 1 l = ∂ L ∂ a 1 l × ∂ a 1 l ∂ z 1 l = ∂ [ 1 2 ( y 1 − a 1 l ) 2 ] ∂ a 1 l × ∂ a 1 l ∂ z 1 l = 2 × 1 2 ( a 1 l − y 1 ) × ∂ a 1 l ∂ z 1 l = ( a 1 l − y 1 ) δ ′ ( z 1 l ) = ∇ a L ⊙ f ′ ( z 1 L ) \begin{align*} \delta &=\frac{\partial L}{\partial z_1^l} \\ &=\frac{\partial L}{\partial a_1^l} \times \frac{\partial a_1^l}{\partial z_1^l} \\ &=\frac{\partial [\frac{1}{2}(y_1-a_1^l)^2]}{\partial a_1^l}\times \frac{\partial a_1^l}{\partial z_1^l} \\ &=2\times \frac{1}{2} (a_1^l-y_1) \times \frac{\partial a_1^l}{\partial z_1^l} \\ &=(a_1^l-y_1) \delta^{'}(z_1^l) \\ &= \nabla_{a} L \odot f^{\prime}(z_1^{L}) \\ \end{align*} δ=z1lL=a1lL×z1la1l=a1l[21(y1a1l)2]×z1la1l=2×21(a1ly1)×z1la1l=(a1ly1)δ(z1l)=aLf(z1L)

  • 总结:输出层误差通用公式为: δ L = ∇ a L ⊙ f ′ ( z L ) \delta^{L} = \nabla_{a} L \odot f^{\prime}(z^{L}) δL=aLf(zL)

  • f ′ ( z L ) f'(zᴸ) f(zL) 是激活函数的导数在 z L zᴸ zL 处的值

  • 这个逐元素乘法将梯度信息与激活函数的局部变化率结合起来

BP1公式的重要性

  • 这个 δᴸ 公式是输出层的误差项,它是反向传播的起点。通过它,误差可以继续向网络的前层传播:
  1. ∇ a L ∇ₐL aL告诉我们损失函数对输出的敏感度
  2. f ′ ( z L ) f'(zᴸ) f(zL)告诉我们激活函数在当前输入下的变化率
  3. 它们的逐元素乘积给出了完整的误差信号 δ L δᴸ δL

实际例子

  • 假设我们有一个简单的输出层,使用 sigmoid 激活函数:
    • a L = [ 0.8 , 0.3 ] , y = [ 1 , 0 ] aᴸ = [0.8, 0.3], y = [1, 0] aL=[0.8,0.3],y=[1,0] (真实标签)
    • 使用平方误差损失: L = ½ ∣ ∣ y − a L ∣ ∣ 2 L = ½||y - aᴸ||² L=½∣∣yaL2
    • ∇ a L = a L − y = [ − 0.2 , 0.3 ] ∇ₐL = aᴸ - y = [-0.2, 0.3] aL=aLy=[0.2,0.3]
    • sigmoid 的导数 f ′ ( z ) = a ( 1 − a ) f'(z) = a(1-a) f(z)=a(1a),设 f ′ ( z L ) = [ 0.16 , 0.21 ] f'(zᴸ) = [0.16, 0.21] f(zL)=[0.16,0.21]
  • 那么 δ L = [ − 0.2 , 0.3 ] ⊙ [ 0.16 , 0.21 ] = [ − 0.032 , 0.063 ] δᴸ = [-0.2, 0.3] ⊙ [0.16, 0.21] = [-0.032, 0.063] δL=[0.2,0.3][0.16,0.21]=[0.032,0.063]

BP2第 l l l层误差推导

  • 前置公式:
    • z l + 1 = w l + 1 a l + b l + 1 z^{l+1}=w^{l+1}a^{l}+b^{l+1} zl+1=wl+1al+bl+1
    • a l + 1 = δ ( z l ) a^{l+1}=\delta(z^l) al+1=δ(zl)
      δ l = ∂ L ∂ z l = ∂ L ∂ z i l + 1 × ∂ z i l + 1 ∂ z i l = δ i l + 1 × ∂ z i l + 1 a l × ∂ a l ∂ z l = δ i l + 1 × ( w l ) T × δ ′ ( z l ) = ( ( w l ) T δ i l + 1 ) ⊙ δ ′ ( z l ) \begin{align*} \delta^{l} &= \frac{\partial L}{\partial z^{l}}\\ &=\frac{\partial L}{\partial z_i^{l+1}} \times \frac{\partial z_i^{l+1}}{\partial z_i^{l}} \\ &=\delta_i^{l+1} \times \frac{\partial z_i^{l+1}}{a^l} \times \frac{\partial a^l}{\partial z^{l}}\\ &=\delta_i^{l+1} \times (w^l)^T \times \delta^{'}(z^l)\\ &=((w^l)^T \delta_i^{l+1}) \odot \delta^{'}(z^l) \end{align*} δl=zlL=zil+1L×zilzil+1=δil+1×alzil+1×zlal=δil+1×(wl)T×δ(zl)=((wl)Tδil+1)δ(zl)
  • 总结:BP2第 l l l层误差公式为: δ l = ( ( w l ) T δ l + 1 ) ⊙ f ′ ( z l ) \delta^{l} = ((w^{l})^{T} \delta^{l+1}) \odot f^{\prime}(z^{l}) δl=((wl)Tδl+1)f(zl)

BP3 :损失函数关于偏置(b)偏导的推导

  • 前置公式

    • a 1 l = δ ( z 1 l ) a_1^l=\delta(z_1^l) a1l=δ(z1l) a 2 l = δ ( z 2 l ) a_2^l=\delta(z_2^l) a2l=δ(z2l)
    • z l = w l a l − 1 + b l z^l=w^la^{l-1}+b^l zl=wlal1+bl
  • 求上图中 b 1 b_1 b1的偏导
    ∂ L ∂ b 1 = ∂ L ∂ z 1 l × ∂ z 1 l ∂ b 1 l = δ 1 l × 1 = δ 1 l \begin{align*} \frac{\partial L}{\partial b_1} &=\frac{\partial L}{\partial z_1^l} \times \frac{\partial z_1^l}{\partial b_1^l} \\ &= \delta_1^l \times 1 \\ &= \delta_1^l \end{align*} b1L=z1lL×b1lz1l=δ1l×1=δ1l

  • 求上图中 b 2 b_2 b2的偏导
    ∂ L ∂ b 2 = ∂ L ∂ z 2 l × ∂ z 2 l ∂ b 2 l = δ 2 l × 1 = δ 2 l \begin{align*} \frac{\partial L}{\partial b_2} &=\frac{\partial L}{\partial z_2^l} \times \frac{\partial z_2^l}{\partial b_2^l} \\ &= \delta_2^l \times 1 \\ &= \delta_2^l \end{align*} b2L=z2lL×b2lz2l=δ2l×1=δ2l

  • 总结:BP3 损失函数关于偏置(b)偏导为: ∂ L ∂ b i l = δ i l \frac{\partial L}{\partial b_{i}^{l}} = \delta_{i}^{l} bilL=δil

BP4: 损失函数关于权值(w)偏导推导

  • 前置公式
    • z l = w l a l − 1 + b l z^l=w^la^{l-1}+b^l zl=wlal1+bl
    • δ i l = ∂ L ∂ z i l \delta_i^l=\frac{\partial L}{\partial z_i^l} δil=zilL
  • 详细推导过程:
    ∂ L ∂ w i , j l = ∂ L ∂ z i l × ∂ z i l ∂ w i , j l = ∂ L ∂ z i l × a j l − 1 = δ i l × a j l − 1 = a j l − 1 × δ i l \begin{align*} \frac{\partial L}{\partial w_{i,j}^l} &=\frac{\partial L}{\partial z_i^l} \times \frac{\partial z_i^l}{\partial w_{i,j}^l} \\ &=\frac{\partial L}{\partial z_i^l} \times a_j^{l-1} \\ &= \delta_i^l \times a_j^{l-1} \\ &= a_j^{l-1} \times \delta_i^l \end{align*} wi,jlL=zilL×wi,jlzil=zilL×ajl1=δil×ajl1=ajl1×δil
  • 总结:BP4: 损失函数关于权值(w)偏导为: ∂ L ∂ w i , j l = a j l − 1 δ i l \frac{\partial L}{\partial w_{i,j}^{l}} = a_{j}^{l-1} \delta_{i}^{l} wi,jlL=ajl1δil

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

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

相关文章

极狐Gitlab 如何创建并使用子群组?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 子群组 (BASIC ALL) 您可以将极狐GitLab 群组组织成子群组。您可以使用子群组: 内部和外部组织分开。因为每个子…

HarmonyOS基本的应用的配置

鸿蒙HarmonyOS组建页面 1、创建ets文件并配置2、修改main_pages.json文件3、修改EntryAbility.ets文件(启动时加载的页面) 1、创建ets文件并配置 Index.ets是创建项目自动构建生成的,我们可以将其删除掉,并重新在page文件夹下创建…

强化学习三大基本方法-DP、MC、TD

强化学习进阶 本文主要讲解 动态规划法(Dynamic Programming DP)蒙特卡洛法(Monte Carlo MC)时序差分法(Temporal Difference TD) 1. 动态规划法 1.1 动态规划概念 动态规划核心思想: 其核心…

《Spring Boot 3.0全新特性详解与实战案例》

大家好呀!今天让我们轻松掌握Spring Boot 3.0的所有新特性!🚀 📌 第一章:Spring Boot 3.0简介 1.1 什么是Spring Boot 3.0? Spring Boot 3.0就像是Java开发者的"超级工具箱"🧰&…

【推荐笔记工具】思源笔记 - 隐私优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接

Typora 使用Typora好多年了,一直非常的喜欢这个简洁的Markdown编辑工具,低版本的免费且好用。 Typora官网地址: https://typora.io/ https://typoraio.cn/ Typora的文档树如下,细看后,总觉得差点意思! 思源笔记 今…

虚拟文件系统

虚拟文件系统(Virtual File System,VFS)是操作系统内核中的一个抽象层,它为不同的文件系统(如ext4、NTFS、FAT32等)提供统一的访问接口。通过VFS,用户和应用程序无需关心底层文件系统的具体差异…

Kubernetes Gateway API 部署详解:从入门到实战

引言 在 Kubernetes 中管理网络流量一直是一个复杂而关键的任务。传统的 Ingress API 虽然广泛使用,但其功能有限且扩展性不足。Kubernetes Gateway API 作为新一代标准,提供了更强大的路由控制能力,支持多协议、跨命名空间路由和细粒度的流量管理。本文将带你从零开始部署…

关于大数据的基础知识(二)——国内大数据产业链分布结构

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(二&a…

py实现win自动化自动登陆qq

系列文章目录 py实现win自动化自动登陆qq 文章目录 系列文章目录前言一、上代码?总结 前言 之前都是网页自动化感觉太容易了,就来尝尝win自动化,就先写了一个qq登陆的,这个是拿到className 然后进行点击等。 一、上代码&#xf…

动态创建链表(头插法、尾插法)

今天我们来学习动态创建链表!!! 动态创建链表:分为头插法和尾插法 头插法(动态创建): 头插法就是让新节点变成头 代码如下 吐血了:这边有个非常重要的知识点,这边第三…

Dp通用套路(闫式)

闫式dp分析法: 从集合角度来分析DP问题。 核心思想: DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的,直接用定义去求,把每种方案都用dfs暴力枚举一遍,时间复杂度很高,此时用…

33、前台搜索功能怎么实现?

输入搜索的东西,如果为空 如果有 前端是提交表单,方式是 post 后端接受 调用 mybatisplus的categoryService.getById 用户在搜索框内输入关键字之后,执行 js 中的 load方法,前端提交表单, 后端 controller 中的loa…

Spring Boot 框架概述

1. 简介 Spring Boot 是由 Pivotal 团队开发的一个用于简化 Spring 应用开发的框架。它通过提供默认配置、嵌入式服务器和自动配置等特性,让开发者能够更快速地构建独立的、生产级别的 Spring 应用。 Spring Boot 的主要特点包括: 快速创建独立的 Spri…

机器学习第二讲:对比传统编程:解决复杂规则场景

机器学习第二讲:对比传统编程:解决复杂规则场景 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 一、场景…

Jackson Databind

Jackson Databind 是 Java 生态中处理 JSON 数据的核心库之一,主要用于实现 Java 对象与 JSON 数据之间的序列化与反序列化。它是 Jackson 库家族的一部分,通常与 jackson-core 和 jackson-annotations 一起使用,共同完成 JSON 处理任务。 核…

MySQL 中的事务隔离级别有哪些?

MySQL 支持四种标准的事务隔离级别,从低到高依次为:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ) 和 串行化(SERIALIZABLE&#x…

RAG优化知识库检索(1):基础概念与架构

1. 引言 大语言模型(LLM)常常面临着知识时效性、幻觉生成、定制化难等挑战,检索增强生成(Retrieval-Augmented Generation, RAG)技术作为解决这些问题的有效方案,正在成为AI应用开发的标准架构。 本文将从基础概念入手,全面介绍RAG技术的核心原理、标准架构与组件,以及评…

安卓工程build.gradle中的Groovy的常见知识点

文章目录 变量定义函数定义函数调用闭包参数APK输出配置多channel配置依赖配置关键总结常见混淆点groovy高度兼容java 变量定义 def debugCdnUrl "\"http://xxx\"" //变量赋值函数定义 def getTime() { // 函数定义(def 是 Groovy 中定义变…

阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化

作者:裘文成(翊韬) 摘要 随着企业全球化业务的扩展,如何高效、经济且可靠地将分布在海外各地的应用与基础设施日志统一采集至阿里云日志服务 (SLS) 进行分析与监控,已成为关键挑战。 本文聚焦于阿里云高性能日志采集…

deep seek简介和解析

deepseek大合集,百度链接:https://pan.baidu.com/s/10EqPTg0dTat1UT6I-OlFtg?pwdw896 提取码:w896 一篇文章带你全面了解deep seek 目录 一、deep seek是什么 DeepSeek-R1开源推理模型,具有以下特点: 技术优势: 市场定位&…