飞道的博客

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

578人阅读  评论(0)

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

矩阵求导(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://blog.csdn.net/u010976453/article/details/54381248
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场