机器学习中的线性代数之矩阵求导

机器学习中的线性代数之矩阵求导前面针对机器学习中基础的线性代数知识 我们做了一个常用知识的梳理 接下来针对机器学习公式推导过程中经常用到的矩阵求导 我们做一个详细介绍 矩阵求导 MatrixDeriva 也称作矩阵微分 MatrixDiffer 在机器学习 图像处理 最优化等领域的公式推导中经常用到

前面针对机器学习中基础的线性代数知识,我们做了一个常用知识的梳理。接下来针对机器学习公式推导过程中经常用到的矩阵求导,我们做一个详细介绍。

矩阵求导(Matrix Derivative)也称作矩阵微分(Matrix Differential),在机器学习、图像处理、最优化等领域的公式推导中经常用到。

矩阵的微积分本质上是多元变量的微积分问题,只是应用在矩阵空间上而已

根据 Y \bf Y Y X \bf X X 的不同类型(实值、向量、矩阵)给出如下表中的表示:

类型 标量(Scalar) y y y 向量(Vector) y \bf y y 矩阵(Matrix) Y \bf Y Y
Scalar x x x ∂ y ∂ x \frac {\partial y}{\partial x} xy ∂ y ∂ x \frac {\partial \bf y}{\partial x} xy ∂ Y ∂ x \frac {\partial \bf Y}{\partial x} xY
Vector x \bf x x ∂ y ∂ x \frac {\partial y}{\partial \bf x} xy ∂ y ∂ x \frac {\partial \bf y}{\partial \bf x} xy
Matrix X \bf X X ∂ y ∂ X \frac {\partial y}{\partial \bf X} Xy

下面我们根据分子的布局(即X的类型)来介绍矩阵的导数求解

0 布局约定(Layout conventions)

事实上,所有求导的法则都可以从最基本的求导规则推导出来。不知你有没发现,不同的文献中,同样的式子求导的结果有时候会不一样,仔细观察会发现刚好相差一个转置,于是我们得先说说求导的两个派别(布局)。

由向量关于向量的求导 ∂ y ∂ x \frac{\partial y}{\partial x} xy可以得出两种矛盾的表示:结果表示为 n × m n×m n×m 矩阵或 m × n m×n m×n 矩阵。也就是把 y \bf y y 表示为列向量 x \bf x x 表示为行向量或者反过来表示的问题。

布局(Layout):在矩阵求导中有两种布局,分别为分母布局(denominator layout)分子布局(numerator layout)。这两种不同布局的求导规则是不一样的。
向量 y = [ y 1 y 2 ⋮ y n ] {\bf y} = \begin {bmatrix} y_1 \\ y_2\\ \vdots \\ y_n\end{bmatrix} y=y1y2yn,关于标量 x x x 的求导,

分子布局下,为:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] (1) \frac {\partial \bf y}{\partial x} = \begin {bmatrix} \frac{\partial y_1}{\partial x} \\ \frac{\partial y_2}{\partial x} \\ \vdots \\ \frac{\partial y_n}{\partial x} \end{bmatrix}\tag{1} xy=xy1xy2xyn(1)
而在分母布局下,为:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y n ∂ x ] (2) \frac {\partial \bf y}{\partial x} = \begin {bmatrix} \frac{\partial y_1}{\partial x} & \frac{\partial y_2}{\partial x} & \cdots & \frac{\partial y_n}{\partial x} \end{bmatrix}\tag{2} xy=[xy1xy2xyn](2)
通过观察和推导我们可以知道,分子布局和分母布局之间刚好差一个转置,即在分子布局下与原来 Y \bf Y Y相同,而在分母布局下差一个转置。



对于正切矩阵 ∂ y ∂ x \frac{\partial y}{\partial x} xy采用分母布局,即 Y ⊤ \bf Y^ \top Y,很不符合表达的习惯,所以本文中我们采用的是分子布局

1 关于标量的导数

对于 X \bf X X 是标量的情况,是我们最熟悉的一种情况。

1.1 标量关于标量X的求导

这中情况就是我们平时的代数求导,直接就是 ∂ y ∂ x \frac {\partial y}{\partial x} xy

1.2 向量关于标量X的求导

向量 y = [ y 1 y 2 ⋮ y n ] {\bf y} = \begin {bmatrix} y_1 \\ y_2\\ \vdots \\ y_n\end{bmatrix} y=y1y2yn,关于标量 x x x 的求导就是 y {\bf y} y 的每一个元素分别对 x x x求导,可以表示为
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] (3) \frac {\partial \bf y}{\partial x} = \begin {bmatrix} \frac{\partial y_1}{\partial x} \\ \frac{\partial y_2}{\partial x} \\ \vdots \\ \frac{\partial y_n}{\partial x} \end{bmatrix}\tag{3} xy=xy1xy2xyn(3)
此时为正切向量, ∂ y ∂ x \frac {\partial \bf y}{\partial x} xy y \bf y y正切向量,有映射 y \bf y y : R m    ⟹    R m {\Bbb R}^m \implies {\Bbb R}^m RmRm

1.3 矩阵关于标量X的求导

矩阵对标量的求导类似于向量关于标量的求导,也就是矩阵的每个元素分别对标量 x x x求导,矩阵 Y = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋱ ⋮ y n 1 y n 2 ⋯ y n n ] {\bf Y} = \begin {bmatrix} y_{11} & y_{12} & \cdots & y_{1n} \\ y_{21} & y_{22} & \cdots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{n1} & y_{n2} & \cdots & y_{nn} \end{bmatrix} Y=y11y21yn1y12y22yn2y1ny2nynn 对标量 x x x的导数为
∂ Y ∂ x = [ ∂ y 11 ∂ x ∂ y 12 ∂ x ⋯ ∂ y 1 n ∂ x ∂ y 21 ∂ x ∂ y 22 ∂ x ⋯ ∂ y 2 n ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y n 1 ∂ x ∂ y n 2 ∂ x ⋯ ∂ y n n ∂ x ] (4) \frac {\partial \bf Y}{\partial x} = \begin {bmatrix} \frac{\partial y_{11} }{\partial x } & \frac{\partial y_{12} }{\partial x }& \cdots & \frac{\partial y_{1n} }{\partial x } \\ \frac{\partial y_{21}}{\partial x } & \frac{\partial y_{22}}{\partial x } & \cdots & \frac{\partial y_{2n}}{\partial x } \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{n1} }{\partial x } & \frac{\partial y_{n2} }{\partial x } & \cdots & \frac{\partial y_{nn}}{\partial x } \end{bmatrix}\tag{4} xY=xy11xy21xyn1xy12xy22xyn2xy1nxy2nxynn(4)

2 关于向量的导数

2.1标量关于向量 x \bf x x 的导数

标量 y y y 关于向量 x = [ x 1 x 2 ⋮ x n ] {\bf x } = \begin {bmatrix} x_1 \\ x_2\\ \vdots \\ x_n\end{bmatrix} x=x1x2xn 的求导可以表示为
∂ y ∂ x = [ ∂ y ∂ x 1   ∂ y ∂ x 2   ⋯   ∂ y ∂ x n ] (5) \frac {\partial y}{\partial \bf x} = \begin {bmatrix} \frac{\partial y}{\partial x_{1} }\ \frac{\partial y}{\partial x_{2} } \ \cdots \ \frac{\partial y}{\partial x_{n} } \end{bmatrix}\tag{5} xy=[x1y x2y  xny](5)
此时的向量叫做梯度向量 ∂ y ∂ x \frac {\partial y}{\partial \bf x} xy 为标量 y y y 在空间 R n {\Bbb R}^n Rn 的梯度,该空间以 x x x 为基。

2.2 向量关于向量 x \bf x x 的导数

向量函数(即函数组成的向量) y = [ y 1 y 2 ⋮ y n ] {\bf y} = \begin {bmatrix} y_1 \\ y_2\\ \vdots \\ y_n\end{bmatrix} y=y1y2yn 关于向量 x = [ x 1 x 2 ⋮ x n ] {\bf x } = \begin {bmatrix} x_1 \\ x_2\\ \vdots \\ x_n\end{bmatrix} x=x1x2xn 的导数记作
∂ y ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y n ∂ x 1 ∂ y n ∂ x 2 ⋯ ∂ y n ∂ x n ] (6) \frac {\partial \bf y}{\partial \bf x} = \begin {bmatrix} \frac{\partial y_{1} }{\partial x_{1} } & \frac{\partial y_{1} }{\partial x_{2} }& \cdots & \frac{\partial y_{1} }{\partial x_{n} } \\ \frac{\partial y_{2}}{\partial x_{1} } & \frac{\partial y_{2}}{\partial x_{2} } & \cdots & \frac{\partial y_{2}}{\partial x_{n} } \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{n} }{\partial x_{1} } & \frac{\partial y_{n} }{\partial x_{2} } & \cdots & \frac{\partial y_{n}}{\partial x_{n} } \end{bmatrix}\tag{6} xy=x1y1x1y2x1ynx2y1x2y2x2ynxny1xny2xnyn(6)
此时获得的矩阵 ∂ y ∂ x ​ \frac {\partial \bf y}{\partial \bf x}​ xy 叫做Jacobian 矩阵

2.3 矩阵关于向量 x \bf x x 的导数

矩阵 Y = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋱ ⋮ y n 1 y n 2 ⋯ y n n ] {\bf Y} = \begin {bmatrix} y_{11} & y_{12} & \cdots & y_{1n} \\ y_{21} & y_{22} & \cdots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{n1} & y_{n2} & \cdots & y_{nn} \end{bmatrix} Y=y11y21yn1y12y22yn2y1ny2nynn 对向量 x = [ x 1 x 2 ⋮ x n ] {\bf x } = \begin {bmatrix} x_1 \\ x_2\\ \vdots \\ x_n\end{bmatrix} x=x1x2xn 的导数是推导中最复杂的一种,我们可以表示为
∂ Y ∂ x = [ ∂ y 11 ∂ x 1 ∂ y 1 n ∂ x 2 ⋯ ∂ y 1 n ∂ x n ∂ y 21 ∂ x 1 ∂ y 22 ∂ x 2 ⋯ ∂ y 2 n ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y n 1 ∂ x 1 ∂ y n 2 ∂ x 2 ⋯ ∂ y n n ∂ x n ] (7) \frac {\partial \bf Y}{\partial \bf x} = \begin {bmatrix} \frac{\partial y_{11} }{\partial x_{1} } & \frac{\partial y_{1n} }{\partial x_{2} }& \cdots & \frac{\partial y_{1n} }{\partial x_{n} } \\ \frac{\partial y_{21}}{\partial x_{1} } & \frac{\partial y_{22}}{\partial x_{2} } & \cdots & \frac{\partial y_{2n}}{\partial x_{n} } \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{n1} }{\partial x_{1} } & \frac{\partial y_{n2} }{\partial x_{2} } & \cdots & \frac{\partial y_{nn}}{\partial x_{n} } \end{bmatrix}\tag{7} xY=x1y11x1y21x1yn1x2y1nx2y22x2yn2xny1nxny2nxnynn(7)

3 关于矩阵的导数

我们一般只考虑标量关于矩阵的导数(因为矩阵对向量和矩阵的导数与前面2.3节的内容一致或相似),即标量 y y y 对矩阵 X \bf X X 的导数为 ∂ y ∂ X \frac {\partial y}{\partial \bf X} Xy ,此时的导数是梯度矩阵,可以表示为下式:
∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 21 ⋯ ∂ y ∂ x n 1 ∂ y ∂ x 12 ∂ y ∂ x 22 ⋯ ∂ y ∂ x n 2 ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x 1 n ∂ y ∂ x 2 n ⋯ ∂ y ∂ x n n ] (8) \frac {\partial y}{\partial \bf X} =\begin {bmatrix} \frac{\partial y }{\partial x_{11} } & \frac{\partial y }{\partial x_{21} }& \cdots & \frac{\partial y }{\partial x_{n1} } \\ \frac{\partial y}{\partial x_{12} } & \frac{\partial y}{\partial x_{22} } & \cdots & \frac{\partial y}{\partial x_{n2} } \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y }{\partial x_{1n} } & \frac{\partial y }{\partial x_{2n} } & \cdots & \frac{\partial y}{\partial x_{nn} } \end{bmatrix}\tag{8} Xy=x11yx12yx1nyx21yx22yx2nyxn1yxn2yxnny(8)

4 维度分析

当我们对一些复杂的矩阵乘积求偏导的时候,直接求很难直接求出,这时候我们可以通过分析矩阵的维度来得到结果。例如:

考虑以下导数 ∂ A u ∂ x \frac {\partial \bf Au}{\partial \bf x} xAu ,其中 A \bf A A x \bf x x 无关 且有 A ∈ R m × n {\bf A} \in {\Bbb R}^ {m \times n} ARm×n u ∈ B b b R n × 1 {\bf u } \in {Bbb R}^{n \times 1} uBbbRn×1 x ∈ R p × 1 {\bf x} \in {\Bbb R}^{p \times 1} xRp×1,我们知道结果肯定和 ∂ u ∂ x \frac {\partial \bf u}{\partial \bf x} xu 有关,于是先把 A \bf A A 提出求导式,至于到了哪暂时不知道,接着我们知道 ∂ u ∂ x ∈ R p × n \frac {\partial \bf u}{\partial \bf x} \in {\Bbb R}^ {p \times n} xuRp×n,于是 A \bf A A 只能转置后添加到后面。因此有

∂ A u ∂ x = ∂ u ∂ x A ⊤ (9) \frac {\partial \bf Au}{\partial \bf x} = \frac {\partial \bf u}{\partial \bf x} {\bf A}^ \top \tag{9} xAu=xuA(9)

再考虑问题 ∂ x ⊤ A x ∂ x \frac {\partial \bf x^\top A x}{\partial \bf x} xxAx ,其中 A ∈ R n × n {\bf A} \in {\Bbb R}^ {n \times n} ARn×n x ∈ R n × n {\bf x } \in {\Bbb R}^{n \times n} xRn×n ,
为了分析这个问题我们考虑一个更一半的问题
∂ x ⊤ A x ∂ x (10) \frac {\partial \bf x^\top A x}{\partial \bf x}\tag{10} xxAx(10)
其中 ${\bf A} \in {\Bbb R}^ {n \times n} $, ${\bf x } \in {Bbb R}^{n \times n} $,且 A \bf A A x \bf x x y \bf y y 无关 。于是我们利用维度分析,采用非精确的乘积法则,可以将它分为两个部分
∂ ( x ⊤ A ) y ∂ x (11) \frac {\partial \bf (x^\top A) y}{\partial \bf x} \tag{11} x(xA)y(11)
于是结果与两部分相关,一个是
∂ y ∂ x ∈ R m × n (12) \frac {\partial \bf y}{\partial \bf x} \in {\Bbb R}^ {m \times n} \tag{12} xyRm×n(12)
另一个是
∂ x ⊤ A ∂ x = A ∈ R m × n (13) \frac {\partial \bf x^\top A}{\partial \bf x} = {\bf A} \in {\Bbb R}^ {m \times n} \tag{13} xxA=ARm×n(13)
同样通过维度分析,我们可以得到
∂ ( x ⊤ A ) y ∂ x = ∂ y ∂ x A ⊤ x + A y (14) \frac {\partial \bf (x^\top A) y}{\partial \bf x} = \frac {\partial \bf y}{\partial \bf x} \bf A^\top \bf x + \bf A \bf y \tag{14} x(xA)y=xyAx+Ay(14)
因此经过维度的比较我们可以得到
∂ x ⊤ A x ∂ x = ( A ⊤ + A ) x (14) \frac {\partial \bf x^\top A x}{\partial \bf x} = (\bf A^\top + A)x\tag{14} xxAx=(A+A)x(14)











通过以上两个示例的学习,我们可以知道在求解复杂矩阵的求导问题时,通过维度来判断矩阵的导数形式很简便同时也不容易出错。下图是机器学习中常见的矩阵求导形式,可供参考:

常见矩阵求导形式

5 总结

在本文中,我们针对机器学习推导中的矩阵求导问题做了一个全面的分析,同时结合前文 深度学习系列(二)——机器学习中的线性代数知识 介绍的机器学习中线性代数的基础知识,我们对线性代数部分做了详细的了解。下一章我们介绍机器学习中涉及到的概率知识。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205912.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:53
下一篇 2026年3月19日 下午4:54


相关推荐

  • 常见免费邮箱 SMTP 服务地址及端口「建议收藏」

    常见免费邮箱 SMTP 服务地址及端口「建议收藏」常见免费邮箱SMTP服务地址及端口邮箱服务服务器地址SSL端口号非SSL端口号163邮箱IMAPimap.163.com993143SMTPsmtp.163.com465/99425POP3pop.163.com995110QQ邮箱IMAPimap.qq.com993143SMTPsmtp.qq.com465/58725POP3pop.qq.com995–foxmail邮箱IMAPimap

    2026年4月16日
    5
  • Istio介绍

    服务网格服务网格(ServiceMesh)这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。随着规模和复杂性的增长,服务网格越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如A/B测试、金丝雀发布、限流、访问控制和端到端认证等。服务网格的工作Istio将服务请求路由到目的地址,根据中的参数判断是到生产环…

    2022年4月16日
    96
  • MySQL Blob类型

    MySQL Blob类型MySQL 中 Blob 是一个二进制大型对象 是一个可以存储大量数据的容器 它能容纳不同大小的数据 插入 Blob 类型的数据必须使用 PreparedStat 因为 Blob 类型的数据无法使用字符串拼接写的 MySQL 的四种 Blob 类型 除了在存储的最大信息量上不同外 他们是等同的 类型 大小 单位 字节 TinyBlod 最大 255 Blod 最大 65K MediumBlob 最大 16M LongBlob 最大 4G 实际使用中根据需要存入

    2026年3月17日
    1
  • vue+mongodb_mongodb开启auth认证

    vue+mongodb_mongodb开启auth认证刚刚安装完mongodb并且让这个mongodb安装成系统服务,然后给启动啦,以为自己这就可以像MySQL那样;安装好之后,配合可视化工具NavicatforMySQL简单的就跑起来了,但是呢,并不是这个样子。出bug啦,我暂且记录一下,正在找解决之法。UnabletofetchCollectionstatsInvalidcredentialsfordataba

    2022年8月21日
    6
  • TreeSet 和 HashSet区别

    TreeSet 和 HashSet区别HashSet 是采用 hash 表来实现的 其中的元素没有按顺序排列 add remove 以及 contains 等方法都是复杂度为 O 1 的方法 TreeSet 是采用树结构实现 红黑树算法 元素是按顺序进行排序 但是 add remove 以及 contains 等方法都是复杂度为 O log n 的方法 它还提供了一些方法来处理排序的 set 如 first last headSet tailSet 等

    2026年3月20日
    2
  • Intellij IDEA快捷键生成Getter、Setter和构造器[通俗易懂]

    Intellij IDEA快捷键生成Getter、Setter和构造器[通俗易懂]隔一个暑假不用,再次使用Idea快捷键都忘的差不多了。特此记录下快捷键生成Getter/Setter等。Alt + Insert 组合,可唤出选择面板:选择自己需要的即可。…

    2022年6月13日
    140

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号