学习总结
(1)三种情况:标量对向量求导,标量对矩阵求导, 以及向量对向量求导。
下文,其中的标量对向量,标量对矩阵求导,这里以分母布局为默认布局;向量或矩阵对标量求导的场景很少见。
(2)机器学习算法中一般会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧,后面统一以分子布局的雅克比矩阵为主。
一、回顾知识
假设: x x x表示标量; X X X表示m×n维的矩阵;求导的因变量用 y y y表示标量; Y Y Y表示 p × q p×q p×q维矩阵
自变量/因变量 | 标量 y y y | 列向量 y \mathbf{y} y | 矩阵 Y \mathbf{Y} Y |
---|---|---|---|
标量 x x x | / |
∂
y
∂
x
\frac{\partial \mathbf{y}}{\partial x}
∂x∂y 分子布局:m维列向量(默认布局) 分母布局:m维行向量 |
∂
Y
∂
x
\frac{\partial \mathbf{Y}}{\partial x}
∂x∂Y 分子布局:p×q(默认布局) 分母布局:q×p |
列向量 x \mathbf{x} x |
∂
y
∂
x
\frac{\partial {y}}{\partial \mathbf{x}}
∂x∂y 分子布局:n维行向量(默认布局) 分母布局:n维列向量 |
∂
y
∂
x
\frac{\partial \mathbf{y}}{\partial \mathbf{x}}
∂x∂y 分子布局:m×n雅克比矩阵(默认布局) 分母布局:n×m梯度矩阵 | / |
矩阵 X \mathbf{X} X |
∂
y
∂
X
\frac{\partial y}{\partial \mathbf{X}}
∂X∂y 分子布局:n×m矩阵 分母布局:m×n矩阵(默认布局) |
二、用定义法求解标量对向量求导
∂
y
∂
x
\frac{\partial y}{\partial \mathbf{x}}
∂x∂y
给定一个实值函数
f
:
R
n
→
R
f:R^n \rightarrow R
f:Rn→R,求其对自变量n维向量
x
\mathbf{x}
x的导数。即变量对向量里的每个分量分别求导,得到的结果依次组成新向量表示。
【例题1】
y
=
a
T
x
y=\mathbf{a}^{T} \mathbf{x}
y=aTx求解
∂
a
T
x
∂
x
\frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial \mathbf{x}}
∂x∂aTx对
x
\mathbf{x}
x的每个分量分别求导(分别为标量对标量求导),结果为向量
a
\mathbf{a}
a的第i个分量:
∂
a
T
x
∂
x
i
=
∂
∑
j
=
1
n
a
j
x
j
∂
x
i
=
∂
a
i
x
i
∂
x
i
=
a
i
\frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial x_{i}}=\frac{\partial \sum_{j=1}^{n} a_{j} x_{j}}{\partial x_{i}}=\frac{\partial a_{i} x_{i}}{\partial x_{i}}=a_{i}
∂xi∂aTx=∂xi∂∑j=1najxj=∂xi∂aixi=ai
因为是分母布局,所以求导与分母维度相同,即最后求导结果的分量,组成一个和
x
\mathbf{x}
x一样的n维向量,即向量
a
a
a:
∂
a
T
x
∂
x
=
a
\frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial \mathbf{x}}=\mathbf{a}
∂x∂aTx=a
【小练习1】
用定义法推导:
∂
x
T
x
∂
x
=
2
x
\frac{\partial \mathbf{x}^{T} \mathbf{x}}{\partial \mathbf{x}}=2 \mathbf{x}
∂x∂xTx=2x
这个和刚才一样,先对
x
\mathbf{x}
x的每个分量进行求导:
∂
x
T
x
∂
x
i
=
∂
∑
j
=
1
n
x
j
x
j
∂
x
i
=
∂
x
i
x
i
∂
x
i
=
2
x
\frac{\partial \mathbf{x}^{T} \mathbf{x}}{\partial x_{i}}=\frac{\partial \sum_{j=1}^{n} x_{j} x_{j}}{\partial x_{i}}=\frac{\partial x_{i} x_{i}}{\partial x_{i}}=2{x}
∂xi∂xTx=∂xi∂∑j=1nxjxj=∂xi∂xixi=2x
最后各个分量组成一个向量
x
\mathbf{x}
x。
【例题2】
y
=
x
T
A
x
y=\mathbf{x}^{T} \mathbf{A} \mathbf{x}
y=xTAx求解
∂
x
T
A
x
∂
x
\frac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial \mathbf{x}}
∂x∂xTAx
做法:
∂
x
T
A
x
∂
x
k
=
∂
∑
i
=
1
n
∑
j
=
1
n
x
i
A
i
j
x
j
∂
x
k
=
∑
i
=
1
n
A
i
k
x
i
+
∑
j
=
1
n
A
k
j
x
j
\frac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial x_{k}}=\frac{\partial \sum_{i=1}^{n} \sum_{j=1}^{n} x_{i} A_{i j} x_{j}}{\partial x_{k}}=\sum_{i=1}^{n} A_{i k} x_{i}+\sum_{j=1}^{n} A_{k j} x_{j}
∂xk∂xTAx=∂xk∂∑i=1n∑j=1nxiAijxj=i=1∑nAikxi+j=1∑nAkjxj
对于上面结果:
- 第一部分:矩阵 A \mathbf{A} A的第k列转置后和 x x x相乘;
- 第二部分:矩阵 A \mathbf{A} A的第k行和 x x x相乘;
最后排列好各个分量的结果:
∂
x
T
A
x
∂
x
=
A
T
x
+
A
x
\frac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial \mathbf{x}}=\mathbf{A}^{T} \mathbf{x}+\mathbf{A} \mathbf{x}
∂x∂xTAx=ATx+Ax
小结:例2的较复杂的实值函数求导,最终排列出的求导结果较为复杂。
三、标量对向量求导
寻找较复杂的实值函数求导更方便的方法,不是每次都先针对任意一个分量,再进行排列。
标量对向量求导的基本法则(PS:和我们以前标量对标量求导的法则类似):
- 常量对向量的求导结果为0
- 线性法则:如果 f f f、 g g g都是实值函数, c 1 c1 c1、 c 2 c2 c2为常数,则: ∂ ( c 1 f ( x ) + c 2 g ( x ) ∂ x = c 1 ∂ f ( x ) ∂ x + c 2 ∂ g ( x ) ∂ x \frac{\partial\left(c_{1} f(\mathbf{x})+c_{2} g(\mathbf{x})\right.}{\partial \mathbf{x}}=c_{1} \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}+c_{2} \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} ∂x∂(c1f(x)+c2g(x)=c1∂x∂f(x)+c2∂x∂g(x)
- 乘法法则:如果 f f f、 g g g都是实值函数,则: ∂ f ( x ) g ( x ) ∂ x = f ( x ) ∂ g ( x ) ∂ x + ∂ f ( x ) ∂ x g ( x ) \frac{\partial f(\mathbf{x}) g(\mathbf{x})}{\partial \mathbf{x}}=f(\mathbf{x}) \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}}+\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} g(\mathbf{x}) ∂x∂f(x)g(x)=f(x)∂x∂g(x)+∂x∂f(x)g(x)如果不是实值函数,则不能这样用乘法法则。
- 除法法则:如果 f f f、 g g g都是实值函数,且 g ( x ) ≠ 0 g(x)≠0 g(x)=0,则: ∂ f ( x ) / g ( x ) ∂ x = 1 g 2 ( x ) ( g ( x ) ∂ f ( x ) ∂ x − f ( x ) ∂ g ( x ) ∂ x ) \frac{\partial f(\mathbf{x}) / g(\mathbf{x})}{\partial \mathbf{x}}=\frac{1}{g^{2}(\mathbf{x})}\left(g(\mathbf{x}) \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}-f(\mathbf{x}) \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}}\right) ∂x∂f(x)/g(x)=g2(x)1(g(x)∂x∂f(x)−f(x)∂x∂g(x))
PS:标量对矩阵求导,也有类似上面的法则。
四、标量对矩阵求导
【栗子】
y
=
a
T
X
b
y=\mathbf{a}^{T} \mathbf{X} \mathbf{b}
y=aTXb
求解
∂
a
T
X
b
∂
X
\frac{\partial \mathbf{a}^{T} \mathbf{X b}}{\partial \mathbf{X}}
∂X∂aTXb
-
a \mathbf{a} a是m维向量, b \mathbf{b} b是n维向量, X \mathbf{X} X是m×n的矩阵。
-
先对矩阵 X \mathbf{X} X的任意一个位置的 X i j X_{i j} Xij求导:
∂ a T X b ∂ X i j = ∂ ∑ p = 1 m ∑ q = 1 n a p X p q b q ∂ X i j = ∂ a i X i j b j ∂ X i j = a i b j \frac{\partial \mathbf{a}^{T} \mathbf{X} \mathbf{b}}{\partial X_{i j}}=\frac{\partial \sum_{p=1}^{m} \sum_{q=1}^{n} a_{p} X_{p q} b_{q}}{\partial X_{i j}}=\frac{\partial a_{i} X_{i j} b_{j}}{\partial X_{i j}}=a_{i} b_{j} ∂Xij∂aTXb=∂Xij∂∑p=1m∑q=1napXpqbq=∂Xij∂aiXijbj=aibj -
求导结果再 ( i , j ) (i,j) (i,j)位置的结果: a \mathbf{a} a向量第 i i i个分量和 b \mathbf{b} b第 j j j个分量的乘积,将所有的位置的求导结果排列成一个m×n的矩阵,即 a b T \mathbf{a} \mathbf{b}^{T} abT,即结果为: ∂ a T X b ∂ X = a b T \frac{\partial \mathbf{a}^{T} \mathbf{X} \mathbf{b}}{\partial \mathbf{X}}=a b^{T} ∂X∂aTXb=abT
五、向量对向量求导
y = A x \mathbf{y} = \mathbf{A} \mathbf{x} y=Ax是向量。
- A \mathbf{A} A为n×m矩阵
- x \mathbf{x} x为m维向量; y \mathbf{y} y为n维向量
- 先分别求【矩阵的第 i i i 行和向量的内积】对向量的第 j j j 分量求导,定义法: ∂ A i x ∂ x j = ∂ A i j x j ∂ x j = A i j \frac{\partial \mathbf{A}_{\mathbf{i}} \mathbf{x}}{\partial \mathbf{x}_{\mathbf{j}}}=\frac{\partial A_{i j} x_{j}}{\partial \mathbf{x}_{\mathbf{j}}}=A_{i j} ∂xj∂Aix=∂xj∂Aijxj=Aij
- 所以结果是矩阵 A \mathbf{A} A的 ( i , j ) (i,j) (i,j)位置的值,排列组成的结果 A \mathbf{A} A,而非 A T \mathbf{A}^{T} AT。
六、定义法矩阵向量求导的缺点
定义法中间运算复杂,结果排列较为麻烦,如 y = a T exp ( X b ) y=\mathbf{a}^{T} \exp (\mathbf{X} \mathbf{b}) y=aTexp(Xb)对任意标量的求导容易,但是排列起来较为麻烦,所以进一步,我们可以使用矩阵微分和迹函数来进行矩阵向量求导。
Reference
(1)https://www.cnblogs.com/pinard/p/10773942.html
(2)矩阵求导知识点总结:https://www.cnblogs.com/gyhhaha/p/11782212.html