矩阵求导简记

news2024/11/29 6:25:35

很多机器学习算法都需要求解最值,比如最小二乘法求解样本空间相对拟合曲线的最短距离,最值的求解往往通过求导来计算,而机器学习中又常用矩阵来处理数据,所以很多时候会涉及到矩阵的求导。矩阵求导就像是线性代数和微积分的结合,但两者结合后规则又有些不同。

对于矩阵求导,基本的规则可以参照【手推机器学习】矩阵求导–合集,最需要注意的就是矩阵或者向量的shape以及求导结果的shape。

1. 公式一 d x T x d x = 2 ∗ x T \frac{d x^{T} x}{d x}=2 * x^{T} dxdxTx=2xT

据视频介绍的规则, 假设 x x x 是一个列向量, 则 x T x x^{T} x xTx 是一个标量, 有 d x T x d x = 2 ∗ x T \frac{d x^{T} x}{d x}=2 * x^{T} dxdxTx=2xT,结果一定会是一个行向量, 所以结果是 x x x 的转置而不是 x x x

2. 公式二 d x T a d x = a T \frac{d x^{T} a}{d x}=a^{T} dxdxTa=aT

下面会介绍另一个公式 d x T a d x = a T \frac{d x^{T} a}{d x}=a^{T} dxdxTa=aT (其中 a a a 可以是矩阵也可以是列向量), 如果 a a a 是一个列向量,则结果为行向量, 所以结果必然是带有转置的。

注意区分 d x T a d x = a T \frac{d x^{T} a}{d x}=a^{T} dxdxTa=aT d x T x d x = 2 ∗ x T \frac{d x^{T} x}{d x}=2 * x^{T} dxdxTx=2xT。这两个公式的推导过程并不困难, 比较基础。

假设 x = [ x 1 , x 2 , … , x n ] T , a = [ a 1 , a 2 , … a n ] T x=\left[x_{1}, x_{2}, \ldots, x_{n}\right]^{T} , a=\left[a_{1}, a_{2}, \ldots a_{n}\right]^{T} x=[x1,x2,,xn]T,a=[a1,a2,an]T, 则 x T a = x 1 a 1 + x 2 a 2 + … + x n a n x^{T} a=x_{1} a_{1}+x_{2} a_{2}+\ldots+x_{n} a_{n} xTa=x1a1+x2a2++xnan, 所以:
d ( x T a ) d x = [ d ( x T a ) d x 1 , d ( x T a ) d x 2 , … , d ( x T a ) d x n ] \frac{d\left(x^{T} a\right)}{d x}=\left[\frac{d\left(x^{T} a\right)}{d x_{1}}, \frac{d\left(x^{T} a\right)}{d x_{2}}, \ldots, \frac{d\left(x^{T} a\right)}{d x_{n}}\right] dxd(xTa)=[dx1d(xTa),dx2d(xTa),,dxnd(xTa)]

其中 d ( x T a ) d x i = a i \frac{d\left(x^{T} a\right)}{d x_{i}}=a_{i} dxid(xTa)=ai , 所以上式为 d ( x T a ) d x = [ a 1 , a 2 , … , a n ] = a T \frac{d\left(x^{T} a\right)}{d x}=\left[a_{1}, a_{2}, \ldots, a_{n}\right]=a^{T} dxd(xTa)=[a1,a2,,an]=aT 对于 d x T x d x = 2 ∗ x T \frac{d x^{T} x}{d x}=2 * x^{T} dxdxTx=2xT 推导过程相似。

3.链式求导规则

矩阵求导中也具有链式求导法则,下面是一个相关的例子,注意矩阵的形状变化:
d f   d ( s , t ) = ∂ f ∂ x ∂ x ∂ ( s , t ) = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ] ⏟ = ∂ f ∂ x [ ∂ x 1 ∂ s ∂ x 1 ∂ t ∂ x 2 ∂ s ∂ x 2 ∂ t ] ⏟ = ∂ x ∂ ( s , t ) 其中 x = [ x 1 = x 1 ( s , t ) x 2 = x 2 ( s , t ) ] \frac{\mathrm{d} f}{\mathrm{~d}(s, t)}=\frac{\partial f}{\partial \boldsymbol{x}} \frac{\partial \boldsymbol{x}}{\partial(s, t)}=\underbrace{\left[\begin{array}{ll} \frac{\partial f}{\partial x_{1}} & \frac{\partial f}{\partial x_{2}} \end{array}\right]}_{=\frac{\partial f}{\partial x}} \underbrace{\left[\begin{array}{cc} \frac{\partial x_{1}}{\partial s} & \frac{\partial x_{1}}{\partial t} \\ \frac{\partial x_{2}}{\partial s} & \frac{\partial x_{2}}{\partial t} \end{array}\right]}_{=\frac{\partial x}{\partial(s, t)}} \\ 其中 x=\left[\begin{array}{l}x_{1}=x_{1}(s, t) \\ x_{2}=x_{2}(s, t)\end{array}\right]  d(s,t)df=xf(s,t)x==xf [x1fx2f]=(s,t)x [sx1sx2tx1tx2]其中x=[x1=x1(s,t)x2=x2(s,t)]

4.常用求导公式

很多时候,为了使结果更简洁,求导的结果也会用矩阵来表示,下面是常用的求导公式:

最朴素的公式的推导过程就是带入具体的矩阵按照视频中介绍的方式逐步的推导,这个过程很繁琐,但它的结果可能很简洁,就像上面给出的这些求导公式那样。

5.求导实例

为了更好的理解这些公式,下面给出几个常用的公式的推导过程。

5.1 实例一 ∂ x T A ∂ x = ∂ A T x ∂ x = A \frac{\partial x^{T} A}{\partial x} = \frac{\partial A^{T} x}{\partial x} = A xxTA=xATx=A

第一个公式是 ∂ x T A ∂ x = ∂ A T x ∂ x = A \frac{\partial x^{T} A}{\partial x} = \frac{\partial A^{T} x}{\partial x} = A xxTA=xATx=A,推导过程如下:
∂ x T A ∂ x = ∂ A T x ∂ x   = [ ∂ ∑ i = 1 m A i x i ∂ x 1   ∂ ∑ i = 1 m A i x i ∂ x 2   ⋯   ∂ ∑ i − 1 m A i x i ∂ x m ] = [ A 1   A 2   ⋯   A m ]         = A         \frac{\partial x^{T} A}{\partial x} = \frac{\partial A^{T} x}{\partial x} \qquad\qquad\qquad\qquad\qquad\qquad \\\\ \qquad\quad\space = {\left[\begin{array}{} \frac{\partial \sum_{i = 1}^{m} A_{i} x_{i}}{\partial x_{1}} \ \frac{\partial \sum_{i = 1}^{m} A_{i} x_{i}}{\partial x_{2}} \ \cdots \ \frac{\partial \sum_{i-1}^{m} A_{i} x_{i}}{\partial x_{m}} \end{array}\right] } \\\\ \qquad\qquad = \left[\begin{array}{c} A_{1} \ A_{2} \ \cdots \ A_{m} \end{array}\right] \qquad\quad\space\qquad\quad\space\qquad\space\space\space \\\\ \qquad = A\qquad\quad\space\qquad\quad\space\qquad\quad\space\qquad\quad\space xxTA=xATx =[x1i=1mAixi x2i=1mAixi  xmi1mAixi]=[A1 A2  Am]     =A    

5.2 实例二 ∂ x T B x ∂ x = ( A T + A ) x \frac{\partial x^{T} B x}{\partial x} = \left(A^{T}+A\right)x xxTBx=(AT+A)x

第二个公式是 ∂ x T B x ∂ x = ( A T + A ) x \frac{\partial x^{T} B x}{\partial x} = \left(A^{T}+A\right)x xxTBx=(AT+A)x,推导过程如下:
∂ x T A x ∂ x = [ ∂ ∑ i = 1 m ∑ j − 1 m A i j x i x j ∂ x 1 ∂ ∑ i = 1 m ∑ j = 1 m A i j x i x j ∂ x 2 ⋯ ∂ ∑ i = 1 m ∑ j − 1 m A i j x i x j ∂ x m ] = [ ∑ i = 1 m A i 1 x i + ∑ j = 1 m A 1 j x j ∑ i = 1 m A i 2 x i + ∑ j = 1 m A 2 j x j ⋯ ∑ i = 1 m A i m x i + ∑ j = 1 m A m j x j ]      = [ ∑ i = 1 m A i 1 x i ∑ i = 1 m A i 2 x i ⋯ ∑ i = 1 m A i m x i ] + [ ∑ j = 1 m A 1 j x j ∑ j = 1 m A 2 j x j ⋯ ∑ j = 1 m A m j x j ] = [ A 11 A 21 ⋯ A m 1 A 12 A 22 ⋯ A m 2 ⋮ ⋮ ⋱ ⋮ A 1 m A 2 m ⋯ A m m ] [ x 1 x 2 ⋮ x m ] + [ A 11 A 12 ⋯ A 1 m A 21 A 22 ⋯ A 2 m ⋮ ⋮ ⋱ ⋮ A m 1 A m 2 ⋯ A m m ] [ x 1 x 2 ⋮ x m ] = ( A T + A ) x = ( A + A T ) x \frac{\partial x^{T} A x}{\partial x} = \left[\begin{array}{c} \frac{\partial \sum_{i = 1}^{m} \sum_{j-1}^{m} A_{i j} x_{i} x_{j}}{\partial x_{1}} \\\\ \frac{\partial \sum_{i = 1}^{m} \sum_{j = 1}^{m} A_{i j} x_{i} x_{j}}{\partial x_{2}} \\\\ \cdots \\ \\ \frac{\partial \sum_{i = 1}^{m} \sum_{j-1}^{m} A_{i j} x_{i} x_{j}}{\partial x_{m}} \end{array}\right] \qquad \qquad\qquad \qquad\\ \\ = \left[\begin{array}{c} \sum_{i = 1}^{m} A_{i 1} x_{i}+\sum_{j = 1}^{m} A_{1 j} x_{j} \\ \sum_{i = 1}^{m} A_{i 2} x_{i}+\sum_{j = 1}^{m} A_{2 j} x_{j} \\ \cdots \\ \sum_{i = 1}^{m} A_{i m} x_{i}+\sum_{j = 1}^{m} A_{m j} x_{j} \end{array}\right] \\ \\ \space\space\space\space = \left[\begin{array}{c} \sum_{i = 1}^{m} A_{i 1} x_{i} \\ \sum_{i = 1}^{m} A_{i 2} x_{i} \\ \cdots \\ \sum_{i = 1}^{m} A_{i m} x_{i} \end{array}\right]+\left[\begin{array}{c} \sum_{j = 1}^{m} A_{1 j} x_{j} \\ \sum_{j = 1}^{m} A_{2 j} x_{j} \\ \cdots \\ \sum_{j = 1}^{m} A_{m j} x_{j} \end{array}\right] \\\\ \qquad = \left[\begin{array}{cccc} A_{11} & A 21 & \cdots & A m 1 \\ A_{12} & A 22 & \cdots & A m 2 \\ \vdots & \vdots & \ddots & \vdots \\ A_{1 m} & A 2 m & \cdots & A m m \end{array}\right]\left[\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{m} \end{array}\right]\\ \\ \qquad +\left[\begin{array}{cccc} A_{11} & A 12 & \cdots & A 1 m \\ A_{21} & A 22 & \cdots & A 2 m \\ \vdots & \vdots & \ddots & \vdots \\ A_{m 1} & A m 2 & \cdots & A m m \end{array}\right]\left[\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{m} \end{array}\right]\\ \\ = \left(A^{T}+A\right) x = \left(A+A^{T}\right) x \qquad xxTAx= x1i=1mj1mAijxixjx2i=1mj=1mAijxixjxmi=1mj1mAijxixj = i=1mAi1xi+j=1mA1jxji=1mAi2xi+j=1mA2jxji=1mAimxi+j=1mAmjxj     = i=1mAi1xii=1mAi2xii=1mAimxi + j=1mA1jxjj=1mA2jxjj=1mAmjxj = A11A12A1mA21A22A2mAm1Am2Amm x1x2xm + A11A21Am1A12A22Am2A1mA2mAmm x1x2xm =(AT+A)x=(A+AT)x

5.3 实例三 d L ( w ) d w = d [ ( y − X ∗ w ) T ( y − X ∗ w ) ] d w − 2 X T ∗ y + 2 X T ∗ X ∗ w \frac{dL(w)}{dw} = \frac{ d[(y-X*w)^T(y-X*w)] } {dw}-2X^T*y+2X^T*X*w dwdL(w)=dwd[(yXw)T(yXw)]2XTy+2XTXw

在常用公式的基础上,通过矩阵的分配律可以化简求导过程,例如最小二乘法中方差函数对参数的求导,这里给出两种方式:

方式一:
KaTeX parse error: Expected 'EOF', got '&' at position 2: &̲\frac{dL(w)}{dw…
其中 w T ∗ X T ∗ y w^T*X^T*y wTXTy y T ∗ X ∗ w y^T*X*w yTXw都是标量且互为转置,因而两者相等,有:
上式 = − d ( 2 y T ∗ X ∗ w d w + w T ∗ X T ∗ X ∗ w d w 上式 = -\frac{d(2y^T*X*w}{dw} +\frac{w^T*X^T*X*w}{dw} 上式=dwd(2yTXw+dwwTXTXw
结合上面的两个公式 d a T b d a = b T \frac{da^Tb}{da} = b^T dadaTb=bT d a T A a d a = A T a + A ∗ a = 2 A ∗ a \frac{da^TAa}{da} = A^Ta+A*a = 2A*a dadaTAa=ATa+Aa=2Aa(当 A A A为对称阵),有:
上式 = − 2 X T ∗ y + 2 X T ∗ X ∗ w \begin{matrix} 上式 = -2X^T*y+2X^T*X*w \end{matrix} 上式=2XTy+2XTXw
令上式为0,得 w = ( X T ∗ X ) − 1 X T ∗ y w = (X^T*X)^{-1}X^T*y w=(XTX)1XTy

方式二:

e ( w ) = y − X ∗ w e(w) = y-X*w e(w)=yXw,则 L ( e ) = e T e L(e) = e^Te L(e)=eTe,由链式求导法则,有:
d L d w = d L d e d e d w = 2 e T ∗ ( − X ) = − 2 ( y − X ∗ w ) T ∗ X = − 2 y T ∗ X + 2 w T ∗ X T ∗ X \frac{dL}{dw} = \frac{dL}{de}\frac{de}{dw} \\ = 2e^T*(-X) \\ = -2(y-X*w)^T*X \\ = -2y^T*X+2w^T*X^T*X dwdL=dedLdwde=2eT(X)=2(yXw)TX=2yTX+2wTXTX
同样令上式为0,得 w T = y T ∗ X ∗ ( X T ∗ X ) − 1 w^T = y^T*X*(X^T*X)^{-1} wT=yTX(XTX)1,由 X T ∗ X X^T*X XTX为对称矩阵有 [ ( X T ∗ X ) − 1 ] T = ( X T ∗ X ) − 1 [(X^T*X)^{-1}]^T = (X^T*X)^{-1} [(XTX)1]T=(XTX)1,得 w = ( X T ∗ X ) − 1 X T ∗ y w = (X^T*X)^{-1}X^T*y w=(XTX)1XTy

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

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

相关文章

熬夜肝出囊括Java后端95%的面试题解析

为大家整理了一版java高频面试题,其实,一直有大佬在面试,不是在面试,就是在面试的路上,2022其实不是个适合跳槽的年份,稳稳当当当然好,但是,也别委屈自己呀,话不多说&…

Kotlin编程实战——与Java互操作(10)

一 概述 Kotlin 中调用 Java 代码Java 中调用 Kotlin 二 Kotlin 中调用 Java 代码 Getter 和 Setter返回 void 的方法将 Kotlin 中是关键字的 Java 标识符进行转义空安全与平台类型Java类型映射kotlin类型Kotlin 中的 Java 泛型Java 可变参数 三 Java 中调用 Kotlin 属性实…

【ELM预测】基于matlab探路者算法优化极限学习机预测(含前后对比)【含Matlab源码 2204期】

一、探路者算法简介 提出的一种新兴的智能优化算法,该算法的思想起源于群体动物的狩猎行为,种群中的个体分为探路者和跟随者两种角色。算法的寻优过程模拟了种群寻找食物的探索过程,利用探路者、跟随者两种角色不同的位置更新方式以及角色间…

NR/5G - PUSCH repetition次数

--- R15 DCI format 0-1 PUSCH 38.214中的描述,DCI format 0-1调度的PUSCH,包括C-RNTI/MCS-C-RNTI动态DCI调度PUSCH以及CS-RNTI,NDI1时候指示的Configured Grant的重传调度PUSCH,通过PUSCH-Config中的pusch-AggregationFactor指示…

谷粒学院——Day02【环境搭建和讲师管理接口开发】

前后端分离概念 传统单体结构 前后端分离结构 前后端分离就是将一个单体应用拆分成两个独立的应用:前端应用和后端应用,以JSON格式进行数据交互。 后台讲师管理模块环境搭建 一、数据库设计 数据库 guli_edu 数据库 guli_edu.sql # # Structure fo…

3.1 Python 字符串类型常用操作及内置方法

文章目录1. 类型转换2. 字符串索引取值3. 遍历字符串4. 统计长度5. 字符串的复制与拼接5.1 字符串的复制5.2 加号拼接5.3 .join 方法拼接字符串6. 字符比较7. 成员运算8. .format9. .split10. .strip11 . .upper 与 .lower12. .isupper 与 .islower13. .startswith 与 .endswit…

15 个机器学习的基本 Python 库

一定有很多次你试图在 Python 中找到一个库来帮助你完成机器学习项目。但是,经常遇到一件事!今天有如此多的 Python 库可用,并且许多库在每几年之后都会大量发布,因此选择合适的库并不容易。 有时会花费数小时寻找合适的库&#…

【数据结构基础】之图的介绍,生动形象,通俗易懂,算法入门必看

前言 本文为数据结构基础【图】 相关知识,下边将对图的基本概念,图的存储结构,图的遍历包含广度优先遍历和深度优先遍历,循环遍历数组,最小生成树,拓扑排序等进行详尽介绍~ 📌博主主页&#xf…

spring启动流程(二):包的扫描流程

在applicationContext的创建中,我们分析了applicationContext的创建过程,在本文中,我们将分析spring是如何进行包扫描的。 依旧是AnnotationConfigApplicationContext的构造方法: public AnnotationConfigApplicationContext(St…

自底向上语法分析(bottom-up parsing)

自底向上语法分析(bottom-up parsing)自底向上分析概述LR分析概述LR(0)分析增广文法点标记项目LR(0)分析表CLOSURE函数GOTO函数LR(0)自动机的状态集LR(0)分析表构造算法LR(0)自动机的形式化定义LR(0)分析的冲突问题SLR分析SLR算法的关键SLR分析的冲突问题…

U3D热更新技术

作者 : SYFStrive 博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷‍♀️:创作不易转发需经作者同意😈 💃:程…

适用于 Windows 的企业级 Subversion 服务器

适用于 Windows 的企业级 Subversion 服务器。 Subversion 的 Windows 身份验证 Windows 身份验证是 VisualSVN 服务器的一个关键特性。此功能专为 Active Directory 域环境设计,允许用户使用其 Windows 凭据访问 VisualSVN 服务器。 VisualSVN Server 支持两种不同…

【Linux】基础IO ——中

🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇将记录几次面试中经常被问到的知识点以及对学习的知识点总结和面试题的复盘。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&…

趣说 Mysql内存篇 Buffer Pool

讲解顺序 先说 Mysql InnoDB 内存结构 Buffer PoolPage 管理机制Change BufferLog Buffer Buffer Pool 接上回 说到了 LRU 算法对内存的数据 进行淘汰 LRU 算法本身是 最近最少使用的,但是这样就会出现 分不清楚 哪些是真正多次使用的数据 LRU缺点&#xff1a…

软考重点10 知识产权

软考重点10 知识产权一、著作权1. 著作权的理解(1)版权:(2)人身权与财产权2. 知识产权的归属判定3. 知识产权的归属判定(1)委托创作(2)合作开发4. 著作权保护对象及范围5…

为什么要有包装类,顺便说一说基本数据类型、包装类、String类该如何转换?

一、前言 开门见山,首先看看八种基本数据类型对应的包装类: 基本数据类型包装类charCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBoolean 其中Character 、Boolean的父类是Object,其余的父类是Number 二、装…

【软件测试】毕业打工两年,辞职一年后转行月薪18K,软件测试让我发起了第一春......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 小徐: 毕…

C++ 类和对象 日期类的实现

作者:小萌新 专栏:初阶C 作者简介:大二学生 希望能和大家一起进步 本篇博客目标: 完成Date类的实现 梳理剩下两个默认函数 好困 跑个步去 睡醒啦! 继续肝 日期类的实现本章目标一. 日期类的实现1.1 Getmonthday的实现…

CNN的实现与可视化

CNN的实现 我们已经实现了卷积层和池化层,现在来组合这些层,搭建进行手写数字识别的CNN。如下图所示,网络的构成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我们将它实现为名为SimpleConvNet的类。 …