【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】梯度的反向传播算法

矩阵微积分(Matrix Calculus)

在开始之前,需要先了解矩阵微积分的一些计算规则。
首先,对于矩阵微积分的表示,通常由两种符号约定:

  • 分母布局

    • 标量关于向量的导数为列向量

    • 向量关于标量的导数为行向量

    • N维向量对M维向量的导数为M*N维矩阵(雅可比矩阵的转置)
      在这里插入图片描述

    • 标量对M维向量的二阶偏导数为M*M维矩阵(Hessian矩阵,也写作 ▽ 2 f ( x ) \triangledown^2f(x) 2f(x),第m行第n个元素为 ∂ 2 y ∂ x m ∂ x n \frac{\partial^2y}{\partial x_m\partial x_n} xmxn2y
      在这里插入图片描述

  • 分子布局

    • 标量关于向量的导数为行向量
    • 向量关于标量的导数为列向量
    • N维向量对于M维向量的导数为N*M维矩阵(雅可比矩阵)

∂ f ( x ) ∂ x = [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x M ⋮ ⋱ ⋮ ∂ y N ∂ x 1 ⋯ ∂ y N ∂ x M ] ∈ R N × M \begin{aligned} \frac{\partial f(x)}{\partial x}= \begin{bmatrix} \frac{\partial y_1}{\partial x_1}&\cdots&\frac{\partial y_1}{\partial x_M}\\ \vdots&\ddots&\vdots\\ \frac{\partial y_N}{\partial x_1}&\cdots&\frac{\partial y_N}{\partial x_M} \end{bmatrix}\in\mathbb{R}^{N\times M} \end{aligned} xf(x)= x1y1x1yNxMy1xMyN RN×M

- 标量对M维向量的二阶偏导数为M*M维矩阵(Hessian矩阵的转置)
∂ 2 y ∂ x 2 = ∂ ∂ x ∂ y ∂ x = ∂ ∂ x [ ∂ y ∂ x 1 ⋯ ∂ y ∂ x M ] = [ ∂ 2 y ∂ x 1 2 ⋯ ∂ 2 y ∂ x M ∂ x 1 ⋮ ⋱ ⋮ ∂ 2 y ∂ x 1 ∂ x M ⋯ ∂ 2 y ∂ x M 2 ] ∈ R M × M \begin{aligned} \frac{\partial^2y}{\partial x^2} &=\frac{\partial}{\partial x}\frac{\partial y}{\partial x}\\ &=\frac{\partial}{\partial x} \begin{bmatrix} \frac{\partial y}{\partial x_1}&\cdots&\frac{\partial y}{\partial x_M} \end{bmatrix}\\ &=\begin{bmatrix} \frac{\partial^2 y}{\partial x_1^2}&\cdots&\frac{\partial^2 y}{\partial x_M\partial x_1}\\ \vdots&\ddots&\vdots\\ \frac{\partial^2 y}{\partial x_1\partial x_M}&\cdots&\frac{\partial^2 y}{\partial x_M^2} \end{bmatrix} \in\mathbb{R}^{M\times M} \end{aligned} x22y=xxy=x[x1yxMy]= x122yx1xM2yxMx12yxM22y RM×M
分子布局和分母布局之间是转置的关系。本系列所有内容默认都以分母布局进行计算和解释。
矩阵微积分也遵从链式法则(分母布局)
在这里插入图片描述

梯度计算

前馈神经网络的结构化风险函数:
R ( W , b ) = 1 N ∑ n = 1 N L ( y ( n ) , y ^ ( n ) ) + 1 2 λ ∥ W ∥ F 2 \mathcal{R}(W,b)=\frac{1}{N}\sum_{n=1}^N\mathcal{L}(y^{(n)},\hat{y}^{(n)})+\frac{1}{2}\lambda\|W\|_F^2 R(W,b)=N1n=1NL(y(n),y^(n))+21λWF2
先分别计算网络中的某一层的损失函数 L \mathcal{L} L对参数的导数(分母布局),利用链式法则
∂ L ( y , y ^ ) ∂ w i j ( l ) = ∂ L ( y , y ^ ) ∂ z ( l ) ∂ z ( l ) ∂ w i j ( l ) ∂ L ( y , y ^ ) ∂ b ( l ) = ∂ L ( y , y ^ ) ∂ z ( l ) ∂ z ( l ) ∂ b ( l ) \begin{aligned} \frac{\partial \mathcal{L}(y,\hat{y})}{\partial w_{ij}^{(l)}} &=\frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}\frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}}\\ \frac{\partial \mathcal{L}(y,\hat{y})}{\partial b^{(l)}} &=\frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}\frac{\partial z^{(l)}}{\partial b^{(l)}}\\ \end{aligned} wij(l)L(y,y^)b(l)L(y,y^)=z(l)L(y,y^)wij(l)z(l)=z(l)L(y,y^)b(l)z(l)
其中 z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) z^{(l)}=W^{(l)}a^{(l-1)}+b^{(l)} z(l)=W(l)a(l1)+b(l)是一个向量,根据分母布局的规则,向量对于标量求导为行向量,因此 ∂ z ( l ) ∂ w i j ( l ) \frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}} wij(l)z(l)为行向量
∂ z ( l ) ∂ w i j ( l ) = [ ∂ z 1 ( l ) ∂ w i j ( l ) ⋯ ∂ z i ( l ) ∂ w i j ( l ) ⋯ ∂ z M l ( l ) ∂ w i j ( l ) ] = [ ∂ ( w 1 j ( l ) a ( l − 1 ) + b i ( l ) ) ∂ w i j ( l ) ⋯ ∂ ( w i j ( l ) a ( l − 1 ) + b i ( l ) ) ∂ w i j ( l ) ⋯ ∂ ( w M i j ( l ) a ( l − 1 ) + b i ( l ) ) ∂ w i j ( l ) ] = [ 0 ⋯ a j ( l − 1 ) ⋯ 0 ] ≜ l i ( a j ( l − 1 ) ) ∈ R 1 × M l \begin{aligned} \frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}} &=\begin{bmatrix} \frac{\partial z_1^{(l)}}{\partial w_{ij}^{(l)}}& \cdots& \frac{\partial z_i^{(l)}}{\partial w_{ij}^{(l)}}& \cdots& \frac{\partial z_{M_l}^{(l)}}{\partial w_{ij}^{(l)}} \end{bmatrix}\\ &=\begin{bmatrix} \frac{\partial (w_{1j}^{(l)}a^{(l-1)}+b_i^{(l)})}{\partial w_{ij}^{(l)}}& \cdots& \frac{\partial (w_{ij}^{(l)}a^{(l-1)}+b_i^{(l)})}{\partial w_{ij}^{(l)}}& \cdots& \frac{\partial (w_{M_ij}^{(l)}a^{(l-1)}+b_i^{(l)})}{\partial w_{ij}^{(l)}} \end{bmatrix}\\ &=\begin{bmatrix} 0&\cdots&a_j^{(l-1)}&\cdots&0 \end{bmatrix}\\ &\triangleq\mathbb{l}_i(a_j^{(l-1)})\in\mathbb{R}^{1\times M_l} \end{aligned} wij(l)z(l)=[wij(l)z1(l)wij(l)zi(l)wij(l)zMl(l)]=[wij(l)(w1j(l)a(l1)+bi(l))wij(l)(wij(l)a(l1)+bi(l))wij(l)(wMij(l)a(l1)+bi(l))]=[0aj(l1)0]li(aj(l1))R1×Ml
同样,向量 z ( l ) z^{(l)} z(l)对向量 b ( l ) b^{(l)} b(l)的导数为
∂ z ( l ) ∂ b ( l ) = [ ∂ ( w 1 j ( l ) a ( l − 1 ) + b 1 ( l ) ) ∂ b 1 ( l ) ⋯ ∂ ( w M i j ( l ) a ( l − 1 ) + b i ( l ) ) ∂ b 1 ( l ) ⋮ ⋱ ⋮ ∂ ( w 1 j ( l ) a ( l − 1 ) + b 1 ( l ) ) ∂ b M i ( l ) ⋯ ∂ ( w M i j ( l ) a ( l − 1 ) + b i ( l ) ) ∂ b M i ( l ) ] = [ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ 1 ] = I M i ∈ R M l × M l \begin{aligned} \frac{\partial z^{(l)}}{\partial b^{(l)}} &=\begin{bmatrix} \frac{\partial(w_{1j}^{(l)}a^{(l-1)}+b_1^{(l)})}{\partial b_1^{(l)}}&\cdots&\frac{\partial(w_{M_ij}^{(l)}a^{(l-1)}+b_i^{(l)})}{\partial b_1^{(l)}}\\ \vdots&\ddots&\vdots\\ \frac{\partial(w_{1j}^{(l)}a^{(l-1)}+b_1^{(l)})}{\partial b_{M_i}^{(l)}}&\cdots&\frac{\partial(w_{M_ij}^{(l)}a^{(l-1)}+b_i^{(l)})}{\partial b_{M_i}^{(l)}} \end{bmatrix}\\ &=\begin{bmatrix} 1&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&1 \end{bmatrix}\\ &=I_{M_i}\in\mathbb{R}^{M_l\times M_l} \end{aligned} b(l)z(l)= b1(l)(w1j(l)a(l1)+b1(l))bMi(l)(w1j(l)a(l1)+b1(l))b1(l)(wMij(l)a(l1)+bi(l))bMi(l)(wMij(l)a(l1)+bi(l)) = 1001 =IMiRMl×Ml
除了上面计算的计算部分外,还剩下关键的一项 ∂ R ( y , y ^ ) ∂ z ( l ) \frac{\partial\mathcal{R}(y,\hat{y})}{\partial z^{(l)}} z(l)R(y,y^),这一项叫第 l l l层的误差项 δ ( l ) \delta^{(l)} δ(l),同样,再次应用链式法则进行计算
δ ( l ) ≜ ∂ L ( y , y ^ ) ∂ z ( l ) = ∂ L ( y , y ^ ) ∂ z ( l + 1 ) ∂ z ( l + 1 ) ∂ a ( l ) ∂ a ( l ) ∂ z ( l ) \begin{aligned} \delta^{(l)}&\triangleq\frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}\\ &=\frac{\partial\mathcal{L}(y,\hat{y})}{\partial z^{(l+1)}}\frac{\partial z^{(l+1)}}{\partial a^{(l)}}\frac{\partial a^{(l)}}{\partial z^{(l)}}\\ \end{aligned} δ(l)z(l)L(y,y^)=z(l+1)L(y,y^)a(l)z(l+1)z(l)a(l)
其中可直接得到
∂ L ( y , y ^ ) ∂ z ( l + 1 ) = δ ( l + 1 ) ∂ z ( l + 1 ) ∂ a ( l ) = ( W ( l + 1 ) ) T \begin{aligned} &\frac{\partial\mathcal{L}(y,\hat{y})}{\partial z^{(l+1)}}=\delta^{(l+1)}\\ &\frac{\partial z^{(l+1)}}{\partial a^{(l)}}=(W^{(l+1)})^T \end{aligned} z(l+1)L(y,y^)=δ(l+1)a(l)z(l+1)=(W(l+1))T
剩下一项计算计算如下
∂ a ( l ) ∂ z ( l ) = ∂ f l ( z ( l ) ) ∂ z ( l ) = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) ⋯ ∂ f l ( z M l ( l ) ) ∂ z 1 ( l ) ⋮ ⋱ ⋮ ∂ f l ( z 1 ( l ) ) ∂ z M l ( l ) ⋯ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ] = [ f l ′ ( z 1 ( l ) ) ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ f l ′ ( z M l ( l ) ) ] = d i a g ( f l ′ ( z ( l ) ) ) \begin{aligned} \frac{\partial a^{(l)}}{\partial z^{(l)}}&=\frac{\partial f_l(z^{(l)})}{\partial z^{(l)}}\\ &=\begin{bmatrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_1^{(l)}}\\ \vdots&\ddots&\vdots\\ \frac{\partial f_l(z_1^{(l)})}{\partial z_{M_l}^{(l)}}&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}} \end{bmatrix}\\ &=\begin{bmatrix} f_l^\prime(z_1^{(l)})&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&f_l^\prime(z_{M_l}^{(l)}) \end{bmatrix}\\ &=\mathrm{diag}(f_l^\prime(z^{(l)})) \end{aligned} z(l)a(l)=z(l)fl(z(l))= z1(l)fl(z1(l))zMl(l)fl(z1(l))z1(l)fl(zMl(l))zMl(l)fl(zMl(l)) = fl(z1(l))00fl(zMl(l)) =diag(fl(z(l)))
因此
δ ( l ) = δ ( l + 1 ) ( W ( l + 1 ) ) T d i a g ( f l ′ ( z ( l ) ) ) = ( δ ( l + 1 ) ( W ( l + 1 ) ) T ) ⊙ f l ′ ( z ( l ) ) ∈ R M l \begin{aligned} \delta^{(l)} &=\delta^{(l+1)}(W^{(l+1)})^T\mathrm{diag}(f_l^\prime(z^{(l)}))\\ &=(\delta^{(l+1)}(W^{(l+1)})^T)\odot f_l^\prime(z^{(l)})\in\mathbb{R}^{M_l} \end{aligned} δ(l)=δ(l+1)(W(l+1))Tdiag(fl(z(l)))=(δ(l+1)(W(l+1))T)fl(z(l))RMl
符号 ⊙ \odot 表示对应位置元素相乘1。从上式中可以看出,第 l l l层的误差项可以由第 l + 1 l+1 l+1层的误差项乘以对应的权重矩阵的转置再乘以对应项激活函数的导数来得到,这个过程就是所谓的反向传播。也就是说,要计算对任意一个参数的偏导数,要从神经网络最后一层先计算出损失函数对最后一层净活性值的偏导数,即误差项 δ ( L ) = ∂ L ∂ z ( L ) \delta^{(L)}=\frac{\partial \mathcal{L}}{\partial z^{(L)}} δ(L)=z(L)L,然后根据上式一层一层向前计算
再带回之前的式子,得到最终梯度为:
∂ L ( y , y ^ ) ∂ w i j ( l ) = δ ( l ) l i ( a j ( l − 1 ) ) = [ δ 1 ( l ) ⋯ δ i ( l ) ⋯ δ M l ( l ) ] [ 0 ⋯ a j ( l − 1 ) ⋯ 0 ] T = δ i ( l ) a j ( l − 1 ) ⇒ ∂ L ( y , y ^ ) ∂ W ( l ) = δ ( l ) ( a ( l − 1 ) ) T ∈ R M l × M l − 1 \begin{aligned} \frac{\partial\mathcal{L}(y,\hat{y})}{\partial w_{ij}^{(l)}} &=\delta^{(l)}\mathbb{l}_i(a_j^{(l-1)})\\ &=\begin{bmatrix}\delta_1^{(l)}&\cdots&\delta_i^{(l)}&\cdots&\delta_{M_l}^{(l)}\end{bmatrix}\begin{bmatrix}0&\cdots&a_j^{(l-1)}&\cdots&0\end{bmatrix}^T\\ &=\delta_i^{(l)}a_j^{(l-1)}\\ \Rightarrow\frac{\partial\mathcal{L}(y,\hat{y})}{\partial W^{(l)}} &=\delta^{(l)}(a^{(l-1)})^T\in\mathbb{R}^{M_l\times M_{l-1}} \end{aligned} wij(l)L(y,y^)W(l)L(y,y^)=δ(l)li(aj(l1))=[δ1(l)δi(l)δMl(l)][0aj(l1)0]T=δi(l)aj(l1)=δ(l)(a(l1))TRMl×Ml1
∂ L ( y , y ^ ) ∂ b ( l ) = δ ( l ) ∈ R M l \frac{\partial \mathcal{L}(y,\hat{y})}{\partial b^{(l)}}=\delta^{(l)}\in\mathbb{R}^{M_l} b(l)L(y,y^)=δ(l)RMl

反向传播算法的伪代码描述
在这里插入图片描述


  1. 计算机视觉领域(CV)论文中“圈加”、“圈乘”和“点乘”的解释以及代码示例(⊕、⊙、⊗、广播、广播机制、element-wise、矩阵、乘法、矩阵乘法、向量)_圈×-CSDN博客 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何应对pcdn的流量攻击?

面对PCDN的流量攻击,可以采取以下措施来应对: 一.配置防火墙: 1.禁止未授权的PCDN域名访问:根据网络需求,配置防火墙规则,只允许特定的PCDN域名进行访问,从而防止未经授权的PCDN节…

shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言 前面我们已经使用过各种各样的命令,那么命令到底是什么呢?我们又该怎么理解该术语? 什么是命令? 命令是command的中文翻译,能在命令行中执行的是命令。因为早期的计算机只有文字界面,命令是程序&#…

【Kafka】Kafka生产者-04

【Kafka】Kafka生产者-04 1. 生产者发送消息流程1.1 发送原理 2. 相关文档 1. 生产者发送消息流程 1.1 发送原理 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。 在 main 线程中创建了一个双端队列 RecordAccumulator。 main 线程将消息发送给…

CSS实现经典打字小游戏《生死时速》

🌻 前言 CSS 中有这样一个模块:Motion Path 运动模块,它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用,并且利用它实现我小时候电脑课经常玩的一个打字游戏:金山打字的《生死时速》。 &…

【免费Web系列】大家好 ,今天是Web课程的第二一天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 员工管理 1. 条件分页查询 1.1 概述 在页面原型中,我们可以看到在查询员工信息列表时,既需要根据条件动态查询,还需要对查询的结果进行分页处理。 那要完成这个页面…

计算机组成原理历年考研真题对应知识点(计算机系统层次结构)

目录 1.2计算机系统层次结构 1.2.2计算机硬件 【命题追踪——冯诺依曼计算机的特点(2019)】 【命题追踪——MAR 和 MDR 位数的概念和计算(2010、2011)】 1.2.3计算机软件 【命题追踪——三种机器语言的特点(2015)】 【命题追踪——各种翻译程序的概念(2016)】 1.2.5计算…

四十五、openlayers官网示例Icon modification解析——在地图上添加标记图形并随意移动它的位置

官网demo地址: Icon modification 这篇讲了如何随意移动地图上的矢量点。 先在地图上添加一个矢量点,其中anchorXUnits 和 anchorYUnits: 指定锚点的单位。fraction 表示相对于图标的宽度(0到1之间),pixels 表示以像素…

关于Unity四种合批技术详解

文章目录 一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批 二.动态合批(Dynamic Batching)1.启用动态合批2.合批规则3.举例说明4.使用限制 三.GPU Instancing1.启用GPU Instancing2.启用限制3.举例说明 四.SRP Ba…

【面试干货】ArrayList、Vector、LinkedList的存储性能和特性比较

【面试干货】ArrayList、Vector、LinkedList的存储性能和特性比较 1、ArrayList1.1 存储性能1.2 特性1.3 示例用法 2、Vector2.1 存储性能2.2 特性2.3 示例用法 3、LinkedList3.1 存储性能3.2 特性3.3 示例用法 4、ArrayList、Vector、LinkedList用法总结 💖The Beg…

Java数据库编程

引言 在现代应用开发中,与数据库交互是不可或缺的一部分。Java提供了JDBC(Java Database Connectivity) API,允许开发者方便地连接到数据库并执行SQL操作。本文将详细介绍Java数据库编程的基础知识,包括JDBC的基本概念…

AI金融投资:批量下载深交所公募REITs公开说明书

打开深交所公募REITs公开说明书页面,F12查看网络,找到真实地址:https://reits.szse.cn/api/disc/announcement/annList?random0.3555675437003616 { "announceCount": 39, "data": [ { "id": "80bc9…

循环订单激励:打造企业增长新引擎

循环订单激励:打造企业增长新引擎 在当今竞争激烈的商业环境中,许多企业都在寻求独特而高效的营销策略以吸引并留住客户。今天,我要为您介绍的是一种名为“循环订单激励”的新颖模式,它不仅能提升客户参与度,还能为企…

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

vivado HW_VIO

描述 虚拟输入/输出(VIO)调试核心hw_VIO可以监视和驱动内部 在编程的XilinxFPGA上实时显示信号。在没有物理访问的情况下 目标硬件,可以使用此调试功能来驱动和监视 存在于物理设备上。 VIO核心具有硬件探测器hw_probe对象,用于监…

VS2022,编译最新版obs30.1

VS2022,编译最新版obs30.1 VS2022,编译最新版obs30.1 VS2022,编译最新版obs30.1一、源码编译1.1 官方编译1.2 利用cmake软件进行编译 二、为二次开发做准备遇到问题,暂时无法解决 一、源码编译 编译环境Win11,VS2022&…

C++语法08 数据类型之间的强制转换

目录 强制类型转换 强制类型转换格式 整型转换成浮点型 整型转换成浮点型其他写法 训练:糖果奖励 糖果奖励参考代码 浮点型转换成整型 浮点型转换成整型其他写法 训练:分离小数 分离小数参考代码 强制类型转换 强制类型转换,就是把…

C++ static关键字详解

背景 前段时间初步整理了C中static的相关知识点,以此做个记录。 在C中,static关键字是常见的修饰符。从大方向上static分为两类: 1.类或结构体外的static 2.类或结构体内的static 因此,本文内容的划分如下: 接下来会…

Vue42-vc与vm的原型对象

一、普通函数与其对象的原型对象 显示原型属性,只有函数才有!!! 实例对象只有隐式原型属性。 普通函数与其对象,指向同一个原型对象!!! 这么写不推荐,建议直接如下格式&a…

k8s学习--helm的详细解释及安装和常用命令

文章目录 Helm简介什么是Helm主要组件核心概念chart结构总结 应用环境一、helm部署二、helm基础使用 Helm简介 什么是Helm Helm 是 Kubernetes 的一个包管理工具,它允许用户定义、安装和升级复杂的 Kubernetes 应用程序。Helm 通过使用 “Charts” 的概念来简化应…