文章作者:Sourya Dey
发表时间: 01 April 2019.
原文:https://www.researchgate.net/publication/332131671_Matrix_Calculus
目录:
文章目录
1. 符号
- 标量用小写字符表示。
- 向量用小写的粗体字符表示,如 x \mathbf{x} x,可以是行( 1 × n 1 \times n 1×n)或列( n × 1 n \times 1 n×1)。列向量是默认的选择,除非另有说明。它的元素有下标索引,如 x i ( i ∈ { 1 , . . . , n } ) x_i~\big(i \in \{1, ..., n\}\big) xi (i∈{1,...,n})
- 矩阵用大写的粗体字符表示,如 X \mathbf{X} X,其维度为 m × n m \times n m×n,对应 m m m 行以及 n n n 列。其中的元素由由行和列的双重下标索引表示,如 X i j ( i ∈ { 1 , . . . , m } , j ∈ { 1 , . . . , n } ) \mathbf{X}_{ij} \big( i \in \{1,...,m\},~~j \in \{1,...,n\}\big) Xij(i∈{1,...,m}, j∈{1,...,n})。
- 偶尔会出现高阶张量,例如维度尺寸为 m × n × p m \times n \times p m×n×p 的3阶的,等等。
注意一个矩阵是2阶的张量。一个行向量是只有一行的矩阵,一个列向量是只有一列的矩阵。一个标量是一行一列的矩阵。本质上,标量和向量是矩阵的特殊例子。
f
f
f 相对于
x
x
x 的倒数是
∂
f
∂
x
\frac{\partial f}{\partial x}
∂x∂f。
f
f
f 和
x
x
x 可以是标量,向量或者矩阵,得到了9种类型的导数。
f
f
f 关于
x
x
x 的梯度是
∇
x
f
=
(
∂
f
∂
x
)
T
\nabla_x f = \big(\frac{\partial f}{\partial x}\big)^T
∇xf=(∂x∂f)T,即梯度是导数的转置。域中任何点
x
0
x_0
x0 的梯度都有物理解释,它的方向是在点
x
0
x_0
x0 处使
f
f
f 增加最大的方向,而且其幅度是该方向的增加速度。当
x
x
x 是标量时,我们通常不会处理梯度。
译者注:
1,[w.r.t. : with respect to 的缩写。意为关于;谈及,谈到。]
2,[i.e. : 也就是,亦即(源自拉丁文id est),换而言之。]
3,下面提到的关于 numerator layout convention 和 denominator layout convention 的区别在 https://en.wikipedia.org/wiki/Matrix_calculus 上(尤其是Notation部分)有提到(1,布局并没有统一的标准;2,不仅仅只有这两种布局;3,最佳的使用策略是与前面的布局保持一致,而不是只使用某一种布局),并且它们还在后面总结了二者求导结果形式的差别,我给“盗”过来了,为了不影响阅读,我把它放到附录章节。
2. 基本规则
本文遵循分子布局的习惯(numerator layout convention)。还有另一个分母布局的习惯(denominator layout convention),其中的一些结果是转置的。不要混用不同的布局习惯。
我们首先描述最常用的矩阵-矩阵的导数类型。它是所有其他类型的简化,因为标量和向量是矩阵的特殊情况。对于一个将 m × n m \times n m×n 的矩阵映射到 p × q p \times q p×q 的函数 F ( ⋅ ) \mathbf{F}(\cdot) F(⋅),即 d o m a i n ⊂ R m × n domain \subset \mathbb{R}^{m \times n} domain⊂Rm×n 和 r a n g e ⊂ R p × q range \subset \mathbb{R}^{p \times q} range⊂Rp×q。所以, F ( ⋅ ) : X m × n → F ( X ) p × q \mathbf{F}(\cdot)~: \underset{m \times n}{\mathbf{X}} \rightarrow \underset {p \times q}{\mathbf{F(X)}} F(⋅) :m×nX→p×qF(X)。它的导数 ∂ F ∂ X \frac{\partial \mathbf{F}}{\partial \mathbf{X}} ∂X∂F 是一个维度为 p × q × n × m p \times q \times n \times m p×q×n×m的4阶张量。这是一个维度为 n × m n \times m n×m (分母 X \mathbf{X} X 的转置维度)的 outer matrix,其中每个元素是一个 p × q p \times q p×q 的 inner matrix (与分子 F \mathbf{F} F相同的维度)。如下所示:
∂ F ∂ X = [ ∂ F ∂ X 1 , 1 ⋯ ∂ F ∂ X m , 1 ⋮ ⋱ ⋮ ∂ F ∂ X 1 , n ⋯ ∂ F ∂ X m , n ] (1a) \frac{\partial \mathbf{F}}{\partial \mathbf{X}} = \left[\begin{matrix} \frac{\partial \mathbf{F}}{\partial X_{1,1}} & \cdots & \frac{\partial \mathbf{F}}{\partial X_{m,1}} \\ \vdots & \ddots & \vdots \\ \frac{\partial \mathbf{F}}{\partial X_{1,n}} & \cdots & \frac{\partial \mathbf{F}}{\partial X_{m,n}} \end{matrix}\right] \tag{1a} ∂X∂F=⎣⎢⎢⎡∂X1,1∂F⋮∂X1,n∂F⋯⋱⋯∂Xm,1∂F⋮∂Xm,n∂F⎦⎥⎥⎤(1a)
它有 n n n 行和 m m m 列,且第 ( i , j ) (i, j) (i,j) 个元素为:
∂ F ∂ X i , j = [ ∂ F 1 , 1 ∂ X i , j ⋯ ∂ F 1 , q ∂ X i , j ⋮ ⋱ ⋮ ∂ F p , 1 ∂ X i , j ⋯ ∂ F p , q ∂ X i , j ] (1b) \frac{\partial \mathbf{F}}{\partial X_{i,j}} = \left[\begin{matrix} \frac{\partial F_{1,1}}{\partial X_{i,j}} & \cdots & \frac{\partial F_{1,q}}{\partial X_{i,j}} \\ \vdots & \ddots & \vdots \\ \frac{\partial F_{p,1}}{\partial X_{i,j}} & \cdots & \frac{\partial F_{p,q}}{\partial X_{i,j}} \end{matrix}\right] \tag{1b} ∂Xi,j∂F=⎣⎢⎢⎡∂Xi,j∂F1,1⋮∂Xi,j∂Fp,1⋯⋱⋯∂Xi,j∂F1,q⋮∂Xi,j∂Fp,q⎦⎥⎥⎤(1b)
它有 p p p 行和 q q q 列。
哇!现在就是这样,让我们来到一些一般规则(对于以下, x x x和 y y y可以表示标量,矢量或矩阵):
- 导数 ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y 总是有 outer matrix 维度 = 分母 x x x 的转置的维度,而且其中元素(inner matrix)的维度 = 分子 y y y 的相同维度。如果你做计算发现得出的维度不对,那么结果是不正确的。
- 导数通常都遵循链式法则,即 ∂ f ( g ( x ) ) ∂ x = ∂ f ( g ( x ) ) ∂ g ( x ) ∂ g ( x ) ∂ x \frac{\partial f(g(x))}{\partial x} = \frac{\partial f(g(x))}{\partial g(x)} \frac{\partial g(x)}{\partial x} ∂x∂f(g(x))=∂g(x)∂f(g(x))∂x∂g(x)
- 导数通常遵循积的求导法则,即 ∂ f ( x ) g ( x ) ∂ x = f ( x ) ∂ g ( x ) ∂ x + g ( x ) ∂ f ( x ) ∂ x \frac{\partial f(x) g(x)}{\partial x} = f(x) \frac{\partial g(x)}{\partial x} + g(x) \frac{\partial f(x)}{\partial x} ∂x∂f(x)g(x)=f(x)∂x∂g(x)+g(x)∂x∂f(x)
3. 导数类型
3.1 标量对标量(求导)
这里没有什么特别的。导数是标量,而且也可以被写作 f ′ ( x ) f'(x) f′(x)。例如,如果 f ( x ) = sin x f(x) = \sin x f(x)=sinx 那么 f ′ ( x ) = cos ( x ) f'(x) = \cos(x) f′(x)=cos(x)
3.2 标量对向量(求导)
f ( ⋅ ) : x m × 1 → f ( x ) 1 × 1 f(\cdot): \underset {m \times 1}{\mathbf{x}} \rightarrow \underset {1 \times 1}{f(\mathbf{x})} f(⋅):m×1x→1×1f(x) 对此,导数是一个 1 × m 1 \times m 1×m 的行向量:
∂ f ∂ x = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ⋯ ∂ f ∂ x m ] (2) \frac{\partial f}{\partial \mathbf{x}} = \left[\begin{matrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_m} \end{matrix}\right] \tag{2} ∂x∂f=[∂x1∂f∂x2∂f⋯∂xm∂f](2)
梯度 ∇ x f \nabla_\mathbf{x} f ∇xf 是它转置后的列向量。
3.3 向量对标量(求导)
f ( ⋅ ) : x 1 × 1 → f ( x ) n × 1 f(\cdot): \underset {1 \times 1}{\mathbf{x}} \rightarrow \underset {n \times 1}{f(\mathbf{x})} f(⋅):1×1x→n×1f(x) 对此,导数是一个 n × 1 n \times 1 n×1 的列向量:
∂ f ∂ x = [ ∂ f 1 ∂ x ∂ f 2 ∂ x ⋮ ∂ f n ∂ x ] (3) \frac{\partial \mathbf{f}}{\partial x} = \left[\begin{matrix} \frac{\partial f_1}{\partial x} \\ \frac{\partial f_2}{\partial x} \\ \vdots \\ \frac{\partial f_n}{\partial x} \end{matrix}\right] \tag{3} ∂x∂f=⎣⎢⎢⎢⎡∂x∂f1∂x∂f2⋮∂x∂fn⎦⎥⎥⎥⎤(3)
3.4 向量对向量(求导)
f ( ⋅ ) : x m × 1 → f ( x ) n × 1 f(\cdot): \underset {m \times 1}{\mathbf{x}} \rightarrow \underset {n \times 1}{\mathbf{f(x)}} f(⋅):m×1x→n×1f(x) 对此,导数,也是众所周知的雅可比 是一个 n × m n \times m n×m 维的矩阵。它的第 ( i , j ) (i, j) (i,j) 个元素是第 i i i 个输出成分关于第 j j j 个输入成分的标量导数,即:
∂ f ∂ x = [ ∂ f 1 ∂ x 1 ⋯ ∂ f 1 ∂ x m ⋮ ⋱ ⋮ ∂ f n ∂ x 1 ⋯ ∂ f n ∂ x m ] (4) \frac{\partial \mathbf{f}}{\partial \mathbf{x}} = \left[\begin{matrix} \frac{\partial f_{1}}{\partial x_{1}} & \cdots & \frac{\partial f_{1}}{\partial x_{m}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_{n}}{\partial x_{1}} & \cdots & \frac{\partial f_{n}}{\partial x_{m}} \end{matrix}\right] \tag{4} ∂x∂f=⎣⎢⎡∂x1∂f1⋮∂x1∂fn⋯⋱⋯∂xm∂f1⋮∂xm∂fn⎦⎥⎤(4)
3.4.1 特殊的例子——向量化的标量函数
这是一个标量-标量函数应用到逐元素形成一个向量,而且它由 f ( ⋅ ) : x m × 1 → f ( x ) ~f(\cdot): \underset {m \times 1}{\mathbf{x}} \rightarrow f(\mathbf{x})~ f(⋅):m×1x→f(x) 表示。例如:
f ( [ x 1 x 2 ⋮ x m ] ) = [ f ( x 1 ) f ( x 2 ) ⋮ f ( x m ) ] (5) f\left(\left[\begin{matrix}x_1 \\ x_2 \\ \vdots \\ x_m \end{matrix}\right]\right) = \left[\begin{matrix}f(x_1) \\ f(x_2) \\ \vdots \\ f(x_m) \end{matrix}\right]\tag{5} f⎝⎜⎜⎜⎛⎣⎢⎢⎢⎡x1x2⋮xm⎦⎥⎥⎥⎤⎠⎟⎟⎟⎞=⎣⎢⎢⎢⎡f(x1)f(x2)⋮f(xm)⎦⎥⎥⎥⎤(5)
在这个例子中,导数和梯度都是相同的 m × m m \times m m×m 的对角矩阵,如下所示:
∇ x f = ∂ f ∂ x = [ f ′ ( x 1 ) 0 f ′ ( x 2 ) ⋱ 0 f ′ ( x m ) ] (6) \nabla_x f = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} = \left[\begin{matrix} f'(x_1) & ~ & ~ & 0 \\ ~ & f'(x_2) & ~ & ~ \\ ~ & ~ & \ddots & ~ \\ 0 & ~ & ~ & f'(x_m) \end{matrix}\right] \tag{6} ∇xf=∂x∂f=⎣⎢⎢⎡f′(x1) 0 f′(x2) ⋱ 0 f′(xm)⎦⎥⎥⎤(6)
其中 f ′ ( x i ) = ∂ f ( x i ) ∂ x i f'(x_i) = \frac{\partial f(x_i)}{\partial x_i} f′(xi)=∂xi∂f(xi)
注意:一些教材通过采用逐元素的导数来获取 m × 1 m \times 1 m×1 向量来计算向量化的标量函数的导数。为了避免与(6)混淆,我们将它表示为 f ′ ( x ) f'(\mathbf{x}) f′(x)。
f ′ ( x ) = [ f ′ ( x 1 ) f ′ ( x 2 ) ⋮ f ′ ( x m ) ] (7) f'(\mathbf{x}) = \left[\begin{matrix}f'(x_1) \\ f'(x_2) \\ \vdots \\ f'(x_m) \end{matrix}\right]\tag{7} f′(x)=⎣⎢⎢⎢⎡f′(x1)f′(x2)⋮f′(xm)⎦⎥⎥⎥⎤(7)
为了实现上述效果,我们说我们用 m m m维的向量 a \mathbf{a} a 乘以(6)中的梯度,将会得到:
( ∇ x f ) a = [ f ′ ( x 1 ) a 1 f ′ ( x 2 ) a 2 ⋮ f ′ ( x m ) a m ] (8) (\nabla_x f) \mathbf{a} = \left[\begin{matrix}f'(x_1) a_1 \\ f'(x_2) a_2 \\ \vdots \\ f'(x_m) a_m \end{matrix}\right] \tag{8} (∇xf)a=⎣⎢⎢⎢⎡f′(x1)a1f′(x2)a2⋮f′(xm)am⎦⎥⎥⎥⎤(8)
要实现与(7)中 f ′ ( x ) f'(\mathbf{x}) f′(x) 相同的结果,需要 Hadamard product ∘ \circ ∘,定义为两个向量的逐元素相乘:
f ′ ( x ) ∘ a = [ f ′ ( x 1 ) a 1 f ′ ( x 2 ) a 2 ⋮ f ′ ( x m ) a m ] (9) f'(\mathbf{x}) \circ \mathbf{a} = \left[\begin{matrix}f'(x_1) a_1 \\ f'(x_2) a_2 \\ \vdots \\ f'(x_m) a_m \end{matrix}\right] \tag{9} f′(x)∘a=⎣⎢⎢⎢⎡f′(x1)a1f′(x2)a2⋮f′(xm)am⎦⎥⎥⎥⎤(9)
3.4.2 特殊的例子——Hessian
考虑到3.2中函数的类型,即 f ( ⋅ ) : x m × 1 → f ( x ) 1 × 1 f(\cdot): \underset {m \times 1}{\mathbf{x}} \rightarrow \underset {1 \times 1}{f(\mathbf{x})} f(⋅):m×1x→1×1f(x),它的梯度是一个向量到向量的函数: ∇ x f ( ⋅ ) : x m × 1 → ∇ x f ( x m × 1 ) \nabla_x f(\cdot) : \underset {m \times 1}{\mathbf{x}} \rightarrow \underset {m \times 1}{\nabla_x f(\mathbf{x}}) ∇xf(⋅):m×1x→m×1∇xf(x)。它的导数的转置是 Hessian:
H = [ ∂ 2 f ∂ x 1 2 ⋯ ∂ 2 f ∂ x 1 ∂ x m ⋮ ⋱ ⋮ ∂ 2 f ∂ x m ∂ x 1 ⋯ ∂ 2 f ∂ x m 2 ] (10) \mathbf{H} = \left[\begin{matrix} \frac{\partial^2 f}{\partial x^2_{1}} & \cdots & \frac{\partial^2 f}{\partial x_{1} \partial x_{m}} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_{m} \partial x_{1}} & \cdots & \frac{\partial^2 f}{\partial x^2_{m}} \end{matrix}\right] \tag{10} H=⎣⎢⎢⎡∂x12∂2f⋮∂xm∂x1∂2f⋯⋱⋯∂x1∂xm∂2f⋮∂xm2∂2f⎦⎥⎥⎤(10)
即 H = ( ∂ ∇ x f ∂ x ) T \mathbf{H} = (\frac{\partial \nabla_x f}{\partial x})^T H=(∂x∂∇xf)T,它的导数是连续的,那么 ∂ f ∂ x i ∂ x j = ∂ 2 f ∂ x j ∂ x i \frac{\partial f}{\partial x_i \partial x_j} = \frac{\partial^2 f}{\partial x_j \partial x_i} ∂xi∂xj∂f=∂xj∂xi∂2f,所以 Hessian 是对称的。
3.5 标量对矩阵(求导)
f ( ⋅ ) : X m × n → f ( X ) 1 × 1 f(\cdot): \underset {m \times n}{\mathbf{X}} \rightarrow \underset {1 \times 1}{\mathbf{f(X)}} f(⋅):m×nX→1×1f(X),在这个例子中,导数是 n × m n \times m n×m 的矩阵:
∂ f ∂ X = [ ∂ f ∂ X 1 , 1 ⋯ ∂ f ∂ X m , 1 ⋮ ⋱ ⋮ ∂ f ∂ X 1 , n ⋯ ∂ f ∂ X m , n ] (11) \frac{\partial f}{\partial \mathbf{X}} = \left[\begin{matrix} \frac{\partial f}{\partial X_{1,1}} & \cdots & \frac{\partial f}{\partial X_{m,1}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f}{\partial X_{1,n}} & \cdots & \frac{\partial f}{\partial X_{m,n}} \end{matrix}\right] \tag{11} ∂X∂f=⎣⎢⎢⎡∂X1,1∂f⋮∂X1,n∂f⋯⋱⋯∂Xm,1∂f⋮∂Xm,n∂f⎦⎥⎥⎤(11)
梯度与输入的矩阵具有相同的维度,即 m × n m \times n m×n。
3.6 矩阵对标量(求导)
f ( ⋅ ) : x 1 × 1 → F ( x ) p × q f(\cdot): \underset {1 \times 1}{x} \rightarrow \underset {p \times q}{\mathbf{F}(x)} f(⋅):1×1x→p×qF(x),在这个例子中,导数是一个 p × q p \times q p×q 的矩阵:
∂ F ∂ x = [ ∂ F 1 , 1 ∂ x ⋯ ∂ F 1 , q ∂ x ⋮ ⋱ ⋮ ∂ F p , 1 ∂ x ⋯ ∂ F p , q ∂ x ] (12) \frac{\partial \mathbf{F}}{\partial x} = \left[\begin{matrix} \frac{\partial F_{1,1}}{\partial x} & \cdots & \frac{\partial F_{1,q}}{\partial x} \\ \vdots & \ddots & \vdots \\ \frac{\partial F_{p, 1}}{\partial x} & \cdots & \frac{\partial F_{p,q}}{\partial x} \end{matrix}\right] \tag{12} ∂x∂F=⎣⎢⎡∂x∂F1,1⋮∂x∂Fp,1⋯⋱⋯∂x∂F1,q⋮∂x∂Fp,q⎦⎥⎤(12)
3.7 向量对矩阵(求导)
f ( ⋅ ) : X m × n → f ( X ) p × 1 f(\cdot): \underset {m \times n}{\mathbf{X}} \rightarrow \underset {p \times 1}{\mathbf{f(X)}} f(⋅):m×nX→p×1f(X)。在这个例子中,导数是一个维度为 p × n × m p \times n \times m p×n×m 的三阶张量。这与式(11)中的 m × n m \times n m×n 的矩阵相同,但是用 f f f 代替 p p p 维向量 f \mathbf{f} f,即:
∂ f ∂ X = [ ∂ f ∂ X 1 , 1 ⋯ ∂ f ∂ X m , 1 ⋮ ⋱ ⋮ ∂ f ∂ X 1 , n ⋯ ∂ f ∂ X m , n ] (13) \frac{\partial \mathbf{f}}{\partial \mathbf{X}} = \left[\begin{matrix} \frac{\partial \mathbf{f}}{\partial X_{1,1}} & \cdots & \frac{\partial \mathbf{f}}{\partial X_{m,1}} \\ \vdots & \ddots & \vdots \\ \frac{\partial \mathbf{f}}{\partial X_{1,n}} & \cdots & \frac{\partial \mathbf{f}}{\partial X_{m,n}} \end{matrix}\right]\tag{13} ∂X∂f=⎣⎢⎢⎡∂X1,1∂f⋮∂X1,n∂f⋯⋱⋯∂Xm,1∂f⋮∂Xm,n∂f⎦⎥⎥⎤(13)
3.8 矩阵对向量(求导)
f ( ⋅ ) : x m × 1 → F ( x ) p × q f(\cdot): \underset {m \times 1}{\mathbf{x}} \rightarrow \underset {p \times q}{\mathbf{F(x)}} f(⋅):m×1x→p×qF(x)。在这个例子中,导数是一个维度为 p × q × m p \times q \times m p×q×m 的三阶张量。这与式(2)中的 m × 1 m \times 1 m×1 的行向量相同,但是用 f f f 代替 p × q p \times q p×q 的矩阵 F \mathbf{F} F,即:
∂ F ∂ x = [ ∂ F ∂ x 1 ∂ F ∂ x 2 ⋯ ∂ F ∂ x m ] (14) \frac{\partial \mathbf{F}}{\partial \mathbf{x}} = \left[\begin{matrix} \frac{\partial \mathbf{F}}{\partial x_1} & \frac{\partial \mathbf{F}}{\partial x_2} & \cdots & \frac{\partial \mathbf{F}}{\partial x_m} \end{matrix}\right]\tag{14} ∂x∂F=[∂x1∂F∂x2∂F⋯∂xm∂F](14)
4. 操作和例子
4.1 Commutation
如果事情通常不可交换(例如矩阵, A B ≠ B A AB \neq BA AB=BA),则应在求导时保持顺序。如果事物可交换(例如向量内积, a ⋅ b = b ⋅ a \mathbf{a \cdot b = b \cdot a} a⋅b=b⋅a),他们的顺序在求导时可以被切换。输出维度必须总是对的。
例如,令 f ( x ) = ( a T 1 × m x m × 1 ) b n × 1 \mathbf{f(x)} = (\underset {1 \times m}{\mathbf{a}^T} ~ \underset{m \times 1}{\mathbf{x}}) \underset {n \times 1}{\mathbf{b}} f(x)=(1×maT m×1x)n×1b。导数 ∂ f ∂ x \frac{\partial \mathbf{f}}{\partial \mathbf{x}} ∂x∂f 应该是一个 m × n m \times n m×n 的矩阵。保持顺序不变,我们有 ∂ f ∂ x = a T ∂ x ∂ x b = a T I b = a T b \mathbf{\frac{\partial f}{\partial x} = a^T \frac{\partial x}{\partial x} b = a^T I b = a^T b} ∂x∂f=aT∂x∂xb=aTIb=aTb。这是一个标量,它是错的!为什么呢?注意 ( a T x ) (\mathbf{a^T x}) (aTx) 是一个标量,它可以位于 b \mathbf{b} b 的左边也可以是右边。即,顺序不重要。重写 f ( x ) = b ( a T x ) \mathbf{f(x) = b(a^T x)} f(x)=b(aTx),我们有 ∂ f ∂ x = b a T ∂ x ∂ x = b a T I = b a T \mathbf{\frac{\partial f}{\partial x} = ba^T \frac{\partial x}{\partial x} = ba^T I = ba^T} ∂x∂f=baT∂x∂x=baTI=baT,这是正确的 n × m n \times m n×m 矩阵。
如果这似乎令人困惑,那么采取 m m m 和 n n n 值的简单示例可能是有用的,并以(4)所示以矩阵形式写出全导数。得到的矩阵将是 b a T \mathbf{ba}^T baT。
4.2 转置向量的导数
转置向量对它自身的导数是单位矩阵,but the transpose gets applied to everything after(但是转置这个操作要放到最后才进行?)。例如,令 f ( w ) = ( y − w T x ) 2 = y 2 − ( w T x ) y − y ( w T x ) + ( w T x ) ( w T x ) f(\mathbf{w}) = (y - \mathbf{w}^T \mathbf{x})^2 = y^2 - \mathbf{(w^Tx)} y - y(\mathbf{w^T x}) + (\mathbf{w^T x})(\mathbf{w^T x}) f(w)=(y−wTx)2=y2−(wTx)y−y(wTx)+(wTx)(wTx),其中 y y y 和 x \mathbf{x} x 不是 w \mathbf{w} w 的函数。对各项分别求导:
- ∂ y 2 ∂ w = 0 T \frac{\partial y^2}{\partial \mathbf{w}} = \mathbf{0}^T ∂w∂y2=0T,即
- ∂ ( w T x ) y ∂ w = ∂ w T ∂ w x y = ( x y ) T = y T x T \frac{\partial \mathbf{(w^T x)}y}{\partial \mathbf{w}} = \frac{\partial \mathbf{w}^T}{\partial \mathbf{w}} \mathbf{x}y = (\mathbf{x}y)^T = y^T \mathbf{x}^T ∂w∂(wTx)y=∂w∂wTxy=(xy)T=yTxT,因为 y y y是一个标量,所以可以简化为 y x T y\mathbf{x}^T yxT
- ∂ y ( w T x ) ∂ w = y ∂ w T ∂ w x = y x T \frac{\partial y (\mathbf{w^T x})}{\partial \mathbf{w}} = y \frac{\partial \mathbf{w}^T}{\partial \mathbf{w}} \mathbf{x} = y \mathbf{x}^T ∂w∂y(wTx)=y∂w∂wTx=yxT
- ∂ ( w T x ) ( w T x ) ∂ w = ∂ w T ∂ w x ( w T x ) + ( w T x ) ∂ w T ∂ w x = ( x T w ) x T + ( w T x ) x T \frac{\partial \mathbf{(w^Tx)(w^T x)}}{\partial \mathbf{w}} = \frac{\partial \mathbf{w}^T}{\partial \mathbf{w}} \mathbf{x(w^T x) + (w^T x)\frac{\partial w^T}{\partial w}x} = \mathbf{(x^T w)x^T} + \mathbf{(w^T x)x^T} ∂w∂(wTx)(wTx)=∂w∂wTx(wTx)+(wTx)∂w∂wTx=(xTw)xT+(wTx)xT。因为向量内积可交换,所以结果为 2 ( w T x ) x T 2\mathbf{(w^T x)x^T} 2(wTx)xT
所以 ∂ f ∂ w = − 2 y x T + 2 ( w T x ) x T \frac{\partial f}{\partial \mathbf{w}} = -2y\mathbf{x}^T + 2\mathbf{(w^T x)x^T} ∂w∂f=−2yxT+2(wTx)xT
4.3 处理张量
一个维度为 p × q × n × m p \times q \times n \times m p×q×n×m 的张量(如(1)中所示)就像普通的矩阵一样可以被向量先乘和后乘。这些向量必须与维度为 p × q p \times q p×q 的 inner matrices 兼容,即,对于每个inner matrix,先乘以一个 1 × p 1 \times p 1×p 的行向量然后后乘以一个 q × 1 q \times 1 q×1 的列向量得到一个标量。这最终得到一个维度为 n × m n \times m n×m 的矩阵。
例子: f ( W ) = a T 1 × m W m × n b n × 1 f(\mathbf{W}) = \underset{1 \times m}{\mathbf{a}^T} ~~\underset{m \times n}{\mathbf{W}} ~~\underset{n \times 1}{\mathbf{b}} f(W)=1×maT m×nW n×1b。这是一个标量,所以 ∂ f ∂ W \frac{\partial f}{\partial \mathbf{W}} ∂W∂f 应该是一个转置的维度与 W \mathbf{W} W 相同(即 n × m n \times m n×m)的矩阵。现在 ∂ f ∂ W = a T ∂ W ∂ W b \frac{\partial f}{\partial \mathbf{W}} = \mathbf{a}^T \frac{\partial \mathbf{W}}{\partial \mathbf{W}} \mathbf{b} ∂W∂f=aT∂W∂Wb,其中 ∂ W ∂ W \frac{\partial \mathbf{W}}{\partial \mathbf{W}} ∂W∂W 的维度为 m × n × n × m m \times n \times n \times m m×n×n×m。例如,如果 m = 3 , n = 2 m = 3,~n = 2 m=3, n=2,那么:
∂ W ∂ W = [ [ 1 0 0 0 0 0 ] [ 0 0 1 0 0 0 ] [ 0 0 0 0 1 0 ] [ 0 1 0 0 0 0 ] [ 0 0 0 1 0 0 ] [ 0 0 0 0 0 1 ] ] (15) \frac{\partial \mathbf{W}}{\partial \mathbf{W}} = \left[\begin{matrix} \left[\begin{matrix} 1 & 0 \\ 0 & 0 \\ 0 & 0 \end{matrix}\right] & \left[\begin{matrix} 0 & 0 \\ 1 & 0 \\ 0 & 0 \end{matrix}\right] & \left[\begin{matrix} 0 & 0 \\ 0 & 0 \\ 1 & 0 \end{matrix}\right] \\ \\ \left[\begin{matrix} 0 & 1 \\ 0 & 0 \\ 0 & 0 \end{matrix}\right] & \left[\begin{matrix} 0 & 0 \\ 0 & 1 \\ 0 & 0 \end{matrix}\right] & \left[\begin{matrix} 0 & 0 \\ 0 & 0 \\ 0 & 1 \end{matrix}\right] \end{matrix}\right] \tag{15} ∂W∂W=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡⎣⎡100000⎦⎤⎣⎡000100⎦⎤⎣⎡010000⎦⎤⎣⎡000010⎦⎤⎣⎡001000⎦⎤⎣⎡000001⎦⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤(15)
注意第 ( i , j ) (i, j) (i,j)个 inner matrix 有一个 1 在它的 ( i , j ) (i, j) (i,j)位置。先以给定的 a j b i a_jb_i ajbi将 a T \mathbf{a}^T aT和 b \mathbf{b} b分别先乘和后乘第 ( i , j ) (i,j) (i,j)个inner matrix,其中 i ∈ { 1 , 2 } i \in \{1,2\} i∈{1,2}且 j ∈ { 1 , 2 , 3 } j \in \{1,2,3\} j∈{1,2,3}。所以:
a T ∂ W ∂ W b = [ a 1 b 1 a 2 b 1 a 3 b 1 a 1 b 2 a 2 b 2 a 3 b 2 ] (16) \mathbf{a}^T \frac{\partial \mathbf{W}}{\partial \mathbf{W}} \mathbf{b} = \left[\begin{matrix} a_1b_1 & a_2b_1 & a_3b_1 \\ a_1b_2 & a_2b_2 & a_3b_2 \end{matrix}\right] \tag{16} aT∂W∂Wb=[a1b1a1b2a2b1a2b2a3b1a3b2](16)
因此, ∂ f ∂ W = b a T \frac{\partial f}{\partial \mathbf{W}} = \mathbf{ba^T} ∂W∂f=baT
4.4 梯度的例子: L2 Norm
问题:给定
f
(
x
)
=
∣
∣
x
−
a
∣
∣
2
f(\mathbf{x}) = ||\mathbf{x - a}||_2
f(x)=∣∣x−a∣∣2,求
∇
x
f
\nabla_x f
∇xf
注意
∣
∣
x
−
a
∣
∣
2
=
(
x
−
a
)
T
(
x
−
a
)
||\mathbf{x - a}||_2 = \sqrt{(\mathbf{x-a})^T(\mathbf{x-a})}
∣∣x−a∣∣2=(x−a)T(x−a),是一个标量。所以导数是一个行向量,梯度是一个与
x
\mathbf{x}
x具有相同维度的列向量。我们使用链式法则:
∂ f ∂ x = ∂ ( x − a ) T ( x − a ) ∂ ( x − a ) T ( x − a ) × ∂ ( x − a ) T ( x − a ) ∂ x (17) \frac{\partial f}{\partial \mathbf{x}} = \frac{\partial \sqrt{(\mathbf{x-a})^T (\mathbf{x-a})}}{\partial( \mathbf{x-a})^T (\mathbf{x-a})} \times \frac{\partial (\mathbf{x-a})^T (\mathbf{x-a})}{\partial \mathbf{x}} \tag{17} ∂x∂f=∂(x−a)T(x−a)∂(x−a)T(x−a)×∂x∂(x−a)T(x−a)(17)
第一项是标量对标量的导数,等于 1 2 ( x − a ) T ( x − a ) \frac{1}{2\sqrt{(\mathbf{x-a})^T (\mathbf{x-a})}} 2(x−a)T(x−a)1。第二项是:
∂ ( x − a ) T ( x − a ) ∂ x = ∂ ( x T x − a T x − x T a + a T a ) ∂ x = x T + x T − a T − a T + 0 T = 2 ( x T − a T ) (18) \frac{\partial (\mathbf{x-a})^T (\mathbf{x-a})}{\partial \mathbf{x}} = \frac{\partial (\mathbf{x^Tx - a^Tx - x^Ta + a^Ta})}{\partial \mathbf{x}} = \mathbf{x^T + x^T - a^T - a^T + 0^T} = 2(\mathbf{x^T - a^T}) \tag{18} ∂x∂(x−a)T(x−a)=∂x∂(xTx−aTx−xTa+aTa)=xT+xT−aT−aT+0T=2(xT−aT)(18)
所以 ∂ f ∂ x = x T − a T ( x − a ) T ( x − a ) \frac{\partial f}{\partial \mathbf{x}} = \frac{\mathbf{x^T - a^T}}{\sqrt{\mathbf{(x-a)^T(x-a)}}} ∂x∂f=(x−a)T(x−a)xT−aT。
所以 ∇ x f = x − a ∣ ∣ x − a ∣ ∣ 2 \nabla_x f = \frac{\mathbf{x - a}}{||\mathbf{x - a}||_2} ∇xf=∣∣x−a∣∣2x−a,是一个基本的从 a \mathbf{a} a到 x \mathbf{x} x的单位位移矢量。这意味着得到 f ( x ) f(\mathbf{x}) f(x)中的最大增量,应该将 a \mathbf{a} a从 a \mathbf{a} a到 x \mathbf{x} x的直线移动。另外,为了得到 f ( x ) f(\mathbf{x}) f(x)中的最大减小量,应该朝 x \mathbf{x} x到 a \mathbf{a} a的方向移动,这在几何上说得通。
5. 提示以及进一步的阅读
链式法则和乘法规则在与矩阵打交道时并不总是hold住。但是,当使用
T
r
a
c
e
(
⋅
)
Trace(\cdot)
Trace(⋅) 函数时一些修正的形式能hold住。对于导数的完整列表,读者应该咨询教科书或者像维基百科的 Matrix calculus 页的网站。注意一些内容可能使用分母布局的习惯,这会使得结果看起来不一样。
附录
numerator layout 和 denominator layout 对比:
参考
https://www.researchgate.net/publication/332131671_Matrix_Calculus
https://en.wikipedia.org/wiki/Matrix_calculus
https://blog.youkuaiyun.com/lansatiankongxxc/article/details/44992709
https://blog.youkuaiyun.com/qq_28193019/article/details/88087158