矩阵向量求导
现在CSDN使用的是KaTeX(latex的渲染器),不支持align,但可以用aligned达到同样的目的,还有multiple tag:\tag{1}, \tag{2}也不支持!!!
一.定义和所有求导类型
1.1 定义
1.2 分布布局的介绍
矩阵、向量求导结果的分布布局有2种:分子布局和分母布局,两者互为转置
1.2.1 分子布局
求导结果的第一维度与分子同型,第二维度是分母类型的转置。
分子布局的求导类型包括:标量对标量、向量对标量、矩阵对标量、向量对向量求导(一般)
1.2.2 分母布局
与分子布局相反,求导结果的第一维度与分母同型,第二维度是分子类型的转置。
分子布局的求导类型包括:标量对向量、标量对矩阵
1.3 所有的求导类型
共9种,分别是:标量对标量、向量对标量、矩阵对标量
标量对向量、向量对向量、矩阵对向量#
标量对矩阵、向量对矩阵#、矩阵对矩阵#
其中,加#的三种单独讨论
二.对标量的求导
2.1 标量对标量的求导
定义:
R
→
R
R→R
R→R
同高等数学,包括一元函数的微分、求导;多元函数的全微分、求偏导、求导、链式法则
2.2 向量对标量的求导
2.2.1 总的思路
y
⃗
m
×
1
=
[
y
1
y
2
⋮
y
n
−
1
y
n
]
,
其
中
,
y
i
=
f
(
x
)
,
f
是
一
个
实
值
函
数
:
R
→
R
,
求
∂
y
⃗
∂
x
求
导
思
路
为
:
y
⃗
中
的
每
个
元
素
分
别
对
x
进
行
求
导
求
导
结
果
采
用
分
子
布
局
,
结
果
为
:
∂
y
⃗
∂
x
=
[
∂
y
1
∂
x
∂
y
2
∂
x
⋮
∂
y
n
−
1
∂
x
∂
y
n
∂
x
]
\vec y_{m\times1} = \begin{bmatrix} y_1\\ y_2\\ \vdots\\ y_{n-1}\\y_{n} \end{bmatrix},\quad 其中,y_i = f(x),\quad f是一个实值函数:R→R,\quad 求 \frac {\partial \vec y}{\partial x}\\ 求导思路为:\vec y中的每个元素分别对x进行求导\\ 求导结果采用分子布局,结果为: \frac {\partial \vec y}{\partial x} = \begin{bmatrix} \frac {\partial y_1}{\partial x}\\ \frac {\partial y_2}{\partial x}\\ \vdots\\ \frac {\partial y_{n-1}}{\partial x}\\ \frac {\partial y_n}{\partial x} \end{bmatrix}
ym×1=⎣⎢⎢⎢⎢⎢⎡y1y2⋮yn−1yn⎦⎥⎥⎥⎥⎥⎤,其中,yi=f(x),f是一个实值函数:R→R,求∂x∂y求导思路为:y中的每个元素分别对x进行求导求导结果采用分子布局,结果为:∂x∂y=⎣⎢⎢⎢⎢⎢⎡∂x∂y1∂x∂y2⋮∂x∂yn−1∂x∂yn⎦⎥⎥⎥⎥⎥⎤
可以看出,求导结果仍是一个向量,且由于采用分子布局,所以向量的维度与分子的维度是一致的
2.3 矩阵对标量的求导
2.3.1 总的思路
Y
=
(
y
i
j
)
m
×
n
,
其
中
,
y
i
=
f
(
x
)
,
f
是
一
个
实
值
函
数
:
R
→
R
,
求
∂
Y
∂
x
求
导
思
路
为
:
Y
中
的
每
个
元
素
分
别
对
x
进
行
求
导
求
导
结
果
采
用
分
子
布
局
,
结
果
为
:
∂
Y
∂
x
=
(
∂
y
11
∂
x
∂
y
12
∂
x
…
∂
y
1
n
∂
x
∂
y
21
∂
x
∂
y
22
∂
x
…
∂
y
2
n
∂
x
⋮
⋮
⋱
⋮
∂
y
m
1
∂
x
∂
y
m
2
∂
x
…
∂
y
m
n
∂
x
)
m
×
n
\mathbf Y = (y_{ij})_{m \times n},\quad 其中,y_i = f(x),\quad f是一个实值函数:R→R,\quad 求 \frac {\partial \mathbf Y}{\partial x}\\ 求导思路为:\mathbf Y中的每个元素分别对x进行求导\\ 求导结果采用分子布局,结果为: \frac{\partial \mathbf{Y}}{\partial x} = \left( \begin{array}{ccc} \frac{\partial y_{11}}{\partial x}& \frac{\partial y_{12}}{\partial x}& \ldots & \frac{\partial y_{1n}}{\partial x}\\ \frac{\partial y_{21}}{\partial x}& \frac{\partial y_{22}}{\partial x} & \ldots & \frac{\partial y_{2n}}{\partial x}\\ \vdots& \vdots & \ddots & \vdots \\ \frac{\partial y_{m1}}{\partial x}& \frac{\partial y_{m2}}{\partial x} & \ldots & \frac{\partial y_{mn}}{\partial x} \end{array} \right)_{m \times n}
Y=(yij)m×n,其中,yi=f(x),f是一个实值函数:R→R,求∂x∂Y求导思路为:Y中的每个元素分别对x进行求导求导结果采用分子布局,结果为:∂x∂Y=⎝⎜⎜⎜⎛∂x∂y11∂x∂y21⋮∂x∂ym1∂x∂y12∂x∂y22⋮∂x∂ym2……⋱…∂x∂y1n∂x∂y2n⋮∂x∂ymn⎠⎟⎟⎟⎞m×n
求导的结果矩阵与Y的维度是一致的,均为m*n
三.标量对向量、矩阵的求导
3.1.标量对向量的求导
3.1.1 总的思路
最简单的原理介绍
x
⃗
n
×
1
=
[
x
1
x
2
⋮
x
n
−
1
x
n
]
,
标
量
y
=
f
(
x
⃗
)
,
f
是
一
个
实
值
函
数
:
R
n
→
R
,
求
∂
y
∂
x
⃗
求
导
结
果
采
用
分
母
布
局
,
结
果
为
:
∂
y
∂
x
⃗
=
[
∂
y
∂
x
1
∂
y
∂
x
2
⋮
∂
y
∂
x
n
−
1
∂
y
∂
x
n
]
\vec x_{n\times1} = \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_{n}\end{bmatrix},\quad 标量y = f(\vec x),\quad f是一个实值函数:R^n→R,\quad 求 \frac {\partial y}{\partial \vec x}\\ 求导结果采用分母布局,结果为:\frac {\partial y}{\partial \vec x} = \begin{bmatrix} \frac {\partial y}{\partial x_1}\\ \frac {\partial y}{\partial x_2}\\ \vdots\\ \frac {\partial y}{\partial x_{n-1}}\\ \frac {\partial y}{\partial x_{n}} \end{bmatrix}
xn×1=⎣⎢⎢⎢⎢⎢⎡x1x2⋮xn−1xn⎦⎥⎥⎥⎥⎥⎤,标量y=f(x),f是一个实值函数:Rn→R,求∂x∂y求导结果采用分母布局,结果为:∂x∂y=⎣⎢⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y⋮∂xn−1∂y∂xn∂y⎦⎥⎥⎥⎥⎥⎥⎤
使用时,求解方法为定义法或者微分法(推荐):
- 基于微分法的求导公式:
d y = t r ( ( ∂ y ∂ x ⃗ ) T d x ⃗ ) , 从 中 可 求 出 ∂ y ∂ x ⃗ dy= tr((\frac{\partial y}{\partial \vec{x}})^Td\vec{x}),\quad 从中可求出\frac {\partial y}{\partial \vec x} dy=tr((∂x∂y)Tdx),从中可求出∂x∂y
- 定义法的原理:
先分解,求单独一项
∂
y
∂
x
i
\frac {\partial y}{\partial x_i}
∂xi∂y
再根据分母布局,推广至
∂
y
∂
x
⃗
\frac {\partial y}{\partial \vec x}
∂x∂y
3.1.2 常见题型(结论)及其证明
1
x
⃗
n
×
1
、
a
⃗
n
×
1
,
y
=
a
⃗
T
x
⃗
,
∂
y
∂
x
⃗
=
a
⃗
\vec x_{n \times 1}、\vec a_{n \times 1}\quad, y = \vec a^T \vec x, \quad \frac {\partial y}{\partial \vec x} = \vec a
xn×1、an×1,y=aTx,∂x∂y=a
2
y
=
x
⃗
T
a
⃗
,
∂
y
∂
x
⃗
=
a
⃗
T
y = \vec x^T \vec a , \quad \frac {\partial y}{\partial \vec x} = \vec a^T
y=xTa,∂x∂y=aT
3
y
=
∂
x
⃗
T
x
⃗
∂
x
⃗
,
∂
y
∂
x
⃗
=
2
x
⃗
y = \frac{\partial \vec{x}^T\vec{x}}{\partial \vec{x}},\quad \frac {\partial y}{\partial \vec x} =2\vec{x}
y=∂x∂xTx,∂x∂y=2x
4 虽然有矩阵成分,但是仍是标量对向量求导
x
⃗
n
×
1
、
A
n
×
n
=
(
a
i
j
)
n
×
n
标
量
y
=
x
⃗
T
A
x
⃗
,
求
∂
y
∂
x
⃗
\vec x_{n \times 1}、\mathbf{A}_{n \times n} = (a_{ij})_{n \times n} \quad 标量y = \vec{x}^T\mathbf{A}\vec{x},\quad 求\frac {\partial y}{\partial \vec x}
xn×1、An×n=(aij)n×n标量y=xTAx,求∂x∂y
第一种方法:定义法求解
分解:
y
∂
x
k
=
∂
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
=
[
a
1
k
a
2
k
⋯
a
n
k
]
[
x
1
x
2
⋮
x
n
−
1
x
n
]
+
[
a
k
1
a
k
2
⋯
a
k
n
]
[
x
1
x
2
⋮
x
n
−
1
x
n
]
\frac {y}{\partial x_k} = \frac{\partial \vec{x}^T\mathbf{A}\vec{x}}{\partial x_k} = \frac{\partial \sum\limits_{i=1}^n\sum\limits_{j=1}^n x_i a_{ij} x_j}{\partial x_k} = \sum\limits_{i=1}^n a_{ik}x_i + \sum\limits_{j=1}^n a_{kj}x_j \\ \quad\quad\quad\quad\quad\quad\quad =\begin{bmatrix} a_{1k} & a_{2k} & \cdots & a_{nk} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_n \end{bmatrix} + \begin{bmatrix} a_{k1} & a_{k2} & \cdots & a_{kn} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_n \end{bmatrix}
∂xky=∂xk∂xTAx=∂xk∂i=1∑nj=1∑nxiaijxj=i=1∑naikxi+j=1∑nakjxj=[a1ka2k⋯ank]⎣⎢⎢⎢⎢⎢⎡x1x2⋮xn−1xn⎦⎥⎥⎥⎥⎥⎤+[ak1ak2⋯akn]⎣⎢⎢⎢⎢⎢⎡x1x2⋮xn−1xn⎦⎥⎥⎥⎥⎥⎤
归纳:
求
导
结
果
的
第
一
部
分
是
矩
阵
A
的
第
k
列
转
置
后
(
即
A
T
的
第
k
行
)
和
x
⃗
相
乘
,
第
二
部
分
是
矩
阵
A
的
第
k
行
和
x
⃗
相
乘
求导结果的第一部分是矩阵A的第k列转置后(即A^T的第k行)和\vec x相乘,第二部分是矩阵A的第k行和\vec x相乘
求导结果的第一部分是矩阵A的第k列转置后(即AT的第k行)和x相乘,第二部分是矩阵A的第k行和x相乘
推广:
根据向量的第k个元素可以表示为前面矩阵的第k行*后面的向量,则:
∂
x
⃗
T
A
x
⃗
∂
x
⃗
=
A
T
x
⃗
+
A
x
⃗
A
T
x
⃗
≠
x
⃗
T
A
T
\frac{\partial \vec{x}^T\mathbf{A}\vec{x}}{\partial \vec{x}} = \mathbf{A}^T\vec{x} + \mathbf{A}\vec{x}\\ \mathbf{A}^T\vec{x} ≠ \vec x^T \mathbf A^T
∂x∂xTAx=ATx+AxATx=xTAT
第二种方法:微分法求解
先对等式两边进行微分:
d
y
=
d
(
x
⃗
T
)
A
x
⃗
+
x
⃗
T
(
d
A
)
x
⃗
+
x
⃗
T
A
d
(
x
⃗
)
=
d
(
x
⃗
T
)
A
x
⃗
+
x
⃗
T
A
d
(
x
⃗
)
dy = d(\vec x^T) \mathbf A \vec x + \vec x^T(d\mathbf A)\vec x + \vec x^T \mathbf A d(\vec x) = d(\vec x^T) \mathbf A \vec x + \vec x^T \mathbf A d(\vec x)
dy=d(xT)Ax+xT(dA)x+xTAd(x)=d(xT)Ax+xTAd(x)
再对等式两边取迹:
d
y
=
t
r
(
d
y
)
=
t
r
(
d
(
x
⃗
T
)
A
x
⃗
+
x
⃗
T
A
d
(
x
⃗
)
)
=
t
r
(
d
(
x
⃗
T
)
A
x
⃗
)
+
t
r
(
x
⃗
T
A
d
(
x
⃗
)
)
(
1
)
=
t
r
(
(
d
x
⃗
)
T
A
x
⃗
)
+
t
r
(
x
⃗
T
A
d
(
x
⃗
)
)
(
2
)
=
t
r
(
x
⃗
T
A
T
d
x
⃗
)
+
t
r
(
x
⃗
T
A
d
(
x
⃗
)
)
(
3
)
=
t
r
(
x
⃗
T
(
A
T
+
A
)
d
(
x
⃗
)
)
\begin{aligned} dy = tr(dy) &= tr(d(\vec x^T) \mathbf A \vec x + \vec x^T \mathbf A d(\vec x)) \\ &= tr(d(\vec x^T) \mathbf A \vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (1)\\ &= tr((d\vec x)^T \mathbf A \vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (2)\\ &= tr(\vec x^T \mathbf A^T d\vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (3)\\ &= tr(\vec x^T(\mathbf A^T + \mathbf A) d(\vec x)) \end{aligned}
dy=tr(dy)=tr(d(xT)Ax+xTAd(x))=tr(d(xT)Ax)+tr(xTAd(x))(1)=tr((dx)TAx)+tr(xTAd(x))(2)=tr(xTATdx)+tr(xTAd(x))(3)=tr(xT(AT+A)d(x))
(1) 是根据矩阵(向量)的迹的加减法:
t
r
(
A
±
B
)
=
t
r
(
A
)
±
t
r
(
B
)
tr(A±B) = tr(A) ± tr(B)
tr(A±B)=tr(A)±tr(B)
(2) 是根据转置矩阵(向量)的微分公式:
d
(
X
T
)
=
d
(
X
)
T
d(\mathbf X^T) = d(\mathbf X)^T
d(XT)=d(X)T
(3) 是根据转置矩阵(向量)的迹的性质:
t
r
(
A
)
=
t
r
(
A
T
)
tr(\mathbf A) = tr(\mathbf A^T)
tr(A)=tr(AT)
根据标量对向量的求导公式可以得出
∂
y
∂
x
⃗
=
(
x
⃗
T
(
A
T
+
A
)
)
T
=
(
A
+
A
T
)
x
⃗
=
A
x
⃗
+
A
T
x
⃗
\frac{\partial y}{\partial \vec x} = (\vec x^T(\mathbf A^T + \mathbf A))^T = (\mathbf A + \mathbf A^T) \vec x = \mathbf A \vec x + \mathbf A^T \vec x
∂x∂y=(xT(AT+A))T=(A+AT)x=Ax+ATx
结果与定义法是一致的。
3.2 标量对矩阵的求导
3.2.1 总的思路
总的求解方法有三种:
1.定义法
举例:
a
⃗
m
×
1
,
X
m
×
n
=
(
x
i
j
)
m
×
n
,
b
⃗
n
×
1
.
y
=
a
⃗
T
X
b
⃗
,
求
∂
y
∂
X
\vec a_{m \times 1}, \quad \mathbf X_{m \times n} = (x_{ij})_{m \times n}, \quad \vec b_{n \times 1}.\quad y = \vec a^T \mathbf X \vec b,\quad 求\frac {\partial y}{\partial \mathbf X}
am×1,Xm×n=(xij)m×n,bn×1.y=aTXb,求∂X∂y
首先进行分解:
∂
y
∂
x
i
j
=
∂
a
⃗
T
X
b
⃗
∂
x
i
j
=
∂
(
∑
k
=
1
m
∑
l
=
1
n
a
k
x
k
l
b
l
)
∂
x
i
j
=
∂
a
i
x
i
j
b
j
∂
x
i
j
=
a
i
b
j
(
当
k
=
i
,
l
=
j
时
)
\frac{\partial y}{\partial x_{ij}} = \frac{\partial \vec a^T \mathbf X \vec b}{\partial x_{ij}} = \frac{\partial (\sum\limits_{k=1}^m \sum\limits_{l=1}^n a_k x_{kl} b_l)}{\partial x_{ij}} = \frac {\partial a_i x_{ij} b_j}{\partial x_{ij}} = a_i b_j \quad(当k=i,l=j时)
∂xij∂y=∂xij∂aTXb=∂xij∂(k=1∑ml=1∑nakxklbl)=∂xij∂aixijbj=aibj(当k=i,l=j时)
可以看出,y对X的求导结果的第(i,j)元是向量a的i行,向量b的j列
进行归纳和推广:
∂
y
∂
X
=
(
∂
y
∂
x
i
j
)
m
×
n
=
a
⃗
b
⃗
T
(
或
者
b
⃗
a
⃗
T
)
\frac{\partial y}{\partial \mathbf X} = (\frac{\partial y}{\partial x_{ij}})_{m\times n}= \vec a \vec b^T \quad (或者 \vec b \vec a^T)
∂X∂y=(∂xij∂y)m×n=abT(或者baT)
定义法的局限性:当处理比较复杂的标量时,进行定义分解是比较困难的,且速度慢
2.微分法
微分法的求解基于矩阵(向量)的微分以及标量对矩阵(也可以对向量)的求导公式。
矩阵(向量)的微分:
d
(
X
Y
Z
)
=
(
d
X
)
Y
Z
+
X
(
d
Y
)
Z
+
X
Y
(
d
Z
)
d(XYZ) =(dX)YZ + X(dY)Z + XY(dZ)
d(XYZ)=(dX)YZ+X(dY)Z+XY(dZ)
一定要注意微分矩阵的顺序,且X、Y或者Z是向量时,公式同上。
标量对矩阵的微分公式
d
y
=
t
r
(
(
∂
y
∂
X
)
T
d
X
)
,
从
中
可
求
出
∂
y
∂
X
dy= tr((\frac{\partial y}{\partial \mathbf{X}})^Td\mathbf{X}),\quad 从中可求出\frac {\partial y}{\partial \mathbf X}
dy=tr((∂X∂y)TdX),从中可求出∂X∂y
3.链式法则
3.2.2 常见题型(结论)及其证明
a
⃗
m
×
1
,
X
m
×
n
=
(
x
i
j
)
m
×
n
,
b
⃗
n
×
1
.
y
=
a
⃗
T
X
b
⃗
,
求
∂
y
∂
X
\vec a_{m \times 1}, \quad \mathbf X_{m \times n} = (x_{ij})_{m \times n}, \quad \vec b_{n \times 1}.\quad y = \vec a^T \mathbf X \vec b,\quad 求\frac {\partial y}{\partial \mathbf X}
am×1,Xm×n=(xij)m×n,bn×1.y=aTXb,求∂X∂y
第一种方法:定义法
首先进行分解:
∂
y
∂
x
i
j
=
∂
a
⃗
T
X
b
⃗
∂
x
i
j
=
∂
(
∑
k
=
1
m
∑
l
=
1
n
a
k
x
k
l
b
l
)
∂
x
i
j
=
∂
a
i
x
i
j
b
j
∂
x
i
j
=
a
i
b
j
(
当
k
=
i
,
l
=
j
时
)
\frac{\partial y}{\partial x_{ij}} = \frac{\partial \vec a^T \mathbf X \vec b}{\partial x_{ij}} = \frac{\partial (\sum\limits_{k=1}^m \sum\limits_{l=1}^n a_k x_{kl} b_l)}{\partial x_{ij}} = \frac {\partial a_i x_{ij} b_j}{\partial x_{ij}} = a_i b_j \quad(当k=i,l=j时)
∂xij∂y=∂xij∂aTXb=∂xij∂(k=1∑ml=1∑nakxklbl)=∂xij∂aixijbj=aibj(当k=i,l=j时)
可以看出,y对X的求导结果的第(i,j)元是向量a的i行,向量b的j列
进行归纳和推广:
∂
y
∂
X
=
(
∂
y
∂
x
i
j
)
m
×
n
=
a
⃗
b
⃗
T
(
或
者
b
⃗
a
⃗
T
)
\frac{\partial y}{\partial \mathbf X} = (\frac{\partial y}{\partial x_{ij}})_{m\times n}=\vec a \vec b^T \quad (或者 \vec b \vec a^T)
∂X∂y=(∂xij∂y)m×n=abT(或者baT)
第二种方法:微分法
先求微分:
d
y
=
(
d
a
⃗
T
)
X
b
⃗
+
a
⃗
T
(
d
X
)
b
⃗
+
a
⃗
T
X
(
d
b
⃗
)
=
a
⃗
T
(
d
X
)
b
⃗
由
于
是
对
矩
阵
X
求
偏
导
,
所
以
向
量
a
、
b
都
相
当
于
常
量
,
微
分
为
0
dy = (d\vec{a}^T)\mathbf{X}\vec{b} + \vec{a}^T(d\mathbf{X})\vec{b} + \vec{a}^T\mathbf{X}(d\vec{b}) = \vec{a}^T(d\mathbf{X})\vec{b} \\ 由于是对矩阵X求偏导,所以向量a、b都相当于常量,微分为0
dy=(daT)Xb+aT(dX)b+aTX(db)=aT(dX)b由于是对矩阵X求偏导,所以向量a、b都相当于常量,微分为0
再对等式两边取迹(都是标量,可以直接加迹):
d
y
=
t
r
(
d
y
)
=
t
r
(
a
⃗
T
(
d
X
)
b
⃗
)
=
t
r
(
b
⃗
a
⃗
T
d
X
)
dy =tr(dy) = tr(\vec{a}^T(d\mathbf{X})\vec{b}) = tr(\vec{b}\vec{a}^T d\mathbf{X})
dy=tr(dy)=tr(aT(dX)b)=tr(baTdX)
这里利用了矩阵(向量)的迹交换性质:
t
r
(
A
B
)
=
t
r
(
B
A
)
,
需
要
满
足
A
,
B
T
同
维
度
A
、
B
也
可
以
是
向
量
,
并
且
可
以
把
A
看
做
是
多
个
矩
阵
乘
积
的
结
果
,
则
该
公
式
就
可
应
用
于
多
个
矩
阵
乘
法
的
迹
交
换
tr(AB) = tr(BA), \quad 需要满足A,BT同维度\\A、B也可以是向量,并且可以把A看做是多个矩阵乘积的结果,则该公式就可应用于多个矩阵乘法的迹交换
tr(AB)=tr(BA),需要满足A,BT同维度A、B也可以是向量,并且可以把A看做是多个矩阵乘积的结果,则该公式就可应用于多个矩阵乘法的迹交换
再根据标量对矩阵的微分公式,解出
∂
y
∂
X
=
(
b
⃗
a
⃗
T
)
T
=
a
⃗
b
⃗
T
,
b
⃗
a
⃗
T
≠
a
⃗
b
⃗
T
\frac {\partial y}{\partial \mathbf X} = (\vec{b}\vec{a}^T)^T = \vec{a}\vec{b}^T,\quad \vec{b}\vec{a}^T ≠ \vec{a}\vec{b}^T
∂X∂y=(baT)T=abT,baT=abT
2.
y
=
a
⃗
T
e
x
p
(
X
b
⃗
)
,
f
=
e
x
p
(
)
是
一
个
逐
元
素
函
数
:
R
n
→
R
n
则
∂
y
∂
X
=
(
a
⊙
e
x
p
(
X
b
⃗
)
)
b
⃗
T
y = \vec a^T exp(\mathbf X \vec b), \quad f=exp()是一个逐元素函数:R^n→R^n\\ 则\frac {\partial y}{\partial \mathbf X} = (a \odot exp(\mathbf X \vec b))\vec b^T
y=aTexp(Xb),f=exp()是一个逐元素函数:Rn→Rn则∂X∂y=(a⊙exp(Xb))bT
其中:
⊙
是
逐
元
素
乘
法
(
哈
达
马
积
)
的
符
号
,
定
义
为
:
(
A
⊙
B
)
i
,
j
=
(
A
)
i
,
j
(
B
)
i
,
j
要
求
两
矩
阵
(
向
量
)
同
型
\odot 是逐元素乘法(哈达马积)的符号,定义为:\\ (A \odot B)_{i,j} = (A)_{i,j}(B)_{i,j}\quad 要求两矩阵(向量)同型
⊙是逐元素乘法(哈达马积)的符号,定义为:(A⊙B)i,j=(A)i,j(B)i,j要求两矩阵(向量)同型
四.迹函数对矩阵求导
类似于微分法:
例题:
y
=
t
r
(
B
T
X
T
C
X
B
)
,
求
解
∂
y
∂
X
y = tr(\mathbf{B^T X^T C X B}),\quad 求解\frac {\partial y}{\partial \mathbf X}
y=tr(BTXTCXB),求解∂X∂y
先对迹求微分:
根
据
迹
的
微
分
的
性
质
:
d
t
r
(
X
)
=
t
r
(
d
X
)
根据迹的微分的性质: dtr(\mathbf X) = tr(d\mathbf X)
根据迹的微分的性质:dtr(X)=tr(dX)
d y = d t r ( B T X T C X B ) = t r ( d ( B T X T C X B ) ) = t r ( B T ( d X T ) C X B + B T X T C ( d X ) B ) = t r ( B T ( d X ) T C X B ) + t r ( B T X T C ( d X ) B ) = t r ( B T X T C T ( d X ) B ) + t r ( B T X T C ( d X ) B ) ( 1 ) = t r ( B B T X T C T ( d X ) ) + t r ( B B T X T C ( d X ) ) ( 2 ) = t r ( B B T X T ( C T + C ) ( d X ) ) \begin{aligned} dy = dtr(\mathbf{B^T X^T C X B}) &= tr(d(\mathbf{B^T X^T C X B}))\\ &=tr(\mathbf B^T(d\mathbf X^T) \mathbf{C X B} + \mathbf{B^T X^T C}(d\mathbf X) \mathbf B)\\ &=tr(\mathbf B^T(d\mathbf X)^T \mathbf {C X B}) + tr(\mathbf{B^T X^T C}(d\mathbf X) \mathbf B)\\ &=tr(\mathbf {B^T X^T C^T}(d\mathbf X) \mathbf B) + tr(\mathbf{B^T X^T C}(d\mathbf X) \mathbf B) \qquad (1) \\ &=tr(\mathbf{B} \mathbf {B^T X^T C^T}(d\mathbf X)) + tr(\mathbf B \mathbf {B^T X^T C}(d\mathbf X)) \qquad (2)\\ &=tr(\mathbf{B B^T X^T} (\mathbf{C^T + C}) (d\mathbf X)) \end{aligned} dy=dtr(BTXTCXB)=tr(d(BTXTCXB))=tr(BT(dXT)CXB+BTXTC(dX)B)=tr(BT(dX)TCXB)+tr(BTXTC(dX)B)=tr(BTXTCT(dX)B)+tr(BTXTC(dX)B)(1)=tr(BBTXTCT(dX))+tr(BBTXTC(dX))(2)=tr(BBTXT(CT+C)(dX))
其中 (1) 是根据转置矩阵(向量)的迹的性质
t
r
(
A
)
=
t
r
(
A
T
)
tr(\mathbf A) = tr(\mathbf A^T)
tr(A)=tr(AT)
(2) 是根据矩阵乘法的迹交换性质
t
r
(
A
B
)
=
t
r
(
B
A
)
,
要
求
A
与
B
的
转
置
是
同
型
的
另
外
可
将
一
个
矩
阵
(
向
量
)
看
做
是
多
个
矩
阵
相
乘
,
则
扩
展
到
多
个
矩
阵
(
向
量
)
形
式
tr(AB) = tr(BA), \quad 要求A与B的转置是同型的\\ 另外可将一个矩阵(向量)看做是多个矩阵相乘,则扩展到多个矩阵(向量)形式
tr(AB)=tr(BA),要求A与B的转置是同型的另外可将一个矩阵(向量)看做是多个矩阵相乘,则扩展到多个矩阵(向量)形式
所以,根据标量对矩阵的微分公式,解出
∂
y
∂
X
=
(
B
B
T
X
T
(
C
T
+
C
)
)
T
=
(
C
+
C
T
)
X
B
B
T
\frac {\partial y}{\partial \mathbf X} = (\mathbf{B B^T X^T} (\mathbf{C^T + C}))^T = (\mathbf{C + C^T}) \mathbf{X B B^T}
∂X∂y=(BBTXT(CT+C))T=(C+CT)XBBT
2.
y
=
t
r
(
W
T
A
W
)
,
∂
y
∂
W
=
(
A
+
A
T
)
W
y = tr(\mathbf{W^T A W}), \quad \frac{\partial y}{\partial \mathbf W} = (\mathbf{A + A^T}) \mathbf W
y=tr(WTAW),∂W∂y=(A+AT)W
3.
y
=
t
r
(
A
B
)
,
∂
y
∂
A
=
B
T
y = tr(\mathbf{A B}), \quad \frac{\partial y}{\partial \mathbf A} = \mathbf {B^T}
y=tr(AB),∂A∂y=BT
4.
y
=
t
r
(
A
B
)
,
∂
y
∂
B
=
A
T
y = tr(\mathbf{A B}), \quad \frac{\partial y}{\partial \mathbf B} = \mathbf {A^T}
y=tr(AB),∂B∂y=AT
五.矩阵对矩阵的求导
5.1 定义
X m n 、 Y p q , 则 ∂ Y ∂ X 应 该 有 m n ∗ p q 个 值 , 如 何 排 列 ? \mathbf X_{mn}、 \mathbf Y_{pq},则 \frac{\partial \mathbf Y}{\partial \mathbf X}应该有mn*pq个值,如何排列? Xmn、Ypq,则∂X∂Y应该有mn∗pq个值,如何排列?
主流定义:
先对Y求微分,再对微分结果(矩阵)做(列)向量化,再使用向量对向量求导
求导法则:
v
e
c
(
d
Y
)
=
(
∂
Y
∂
X
)
T
v
e
c
(
d
X
)
=
(
∂
v
e
c
(
Y
)
∂
v
e
c
(
X
)
)
T
v
e
c
(
d
X
)
vec(d\mathbf Y) = (\frac{\partial \mathbf Y}{\partial \mathbf X})^Tvec(d\mathbf X) = (\frac{\partial vec(\mathbf Y)}{\partial vec(\mathbf X)})^T vec(d\mathbf X)
vec(dY)=(∂X∂Y)Tvec(dX)=(∂vec(X)∂vec(Y))Tvec(dX)
5.2 例子
Y
=
A
X
B
,
求
∂
Y
∂
X
\mathbf Y = \mathbf{AXB}, 求 \frac{\partial \mathbf Y}{\partial \mathbf X}
Y=AXB,求∂X∂Y
先求微分:
d
Y
=
A
(
d
X
)
B
d\mathbf Y = \mathbf A(d\mathbf X)\mathbf B
dY=A(dX)B
再对微分等式两边向量化:
v
e
c
(
d
Y
)
=
v
e
c
(
A
(
d
X
)
B
)
=
(
B
T
⊗
A
)
v
e
c
(
d
X
)
\begin{aligned} vec(d\mathbf Y) &= vec(\mathbf A(d\mathbf X)\mathbf B) \\ &= (\mathbf B^T ⊗ \mathbf A) vec(d\mathbf X) \end{aligned}
vec(dY)=vec(A(dX)B)=(BT⊗A)vec(dX)
等式是根据矩阵向量化的运算法则(矩阵乘法):
v
e
c
(
A
X
B
)
=
(
B
T
⊗
A
)
v
e
c
(
X
)
vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X)
vec(AXB)=(BT⊗A)vec(X)
套用求导法则:
∂
Y
∂
X
=
(
B
T
⊗
A
)
T
=
(
B
⊗
A
T
)
\begin{aligned} \frac{\partial \mathbf Y}{\partial \mathbf X} &= (\mathbf B^T ⊗ \mathbf A)^T \\ &= (\mathbf B ⊗ \mathbf A^T) \end{aligned}
∂X∂Y=(BT⊗A)T=(B⊗AT)
等式是根据克罗内可积的运算法则:
(
A
⊗
B
)
T
=
A
T
⊗
B
T
(\mathbf A ⊗ \mathbf B)^T = \mathbf A^T ⊗ \mathbf B^T
(A⊗B)T=AT⊗BT
2.
Y
=
A
e
x
p
(
B
X
C
)
D
,
求
∂
Y
∂
X
\mathbf Y = \mathbf A exp(\mathbf{BXC}) \mathbf D, 求\frac{\partial \mathbf Y}{\partial \mathbf X}
Y=Aexp(BXC)D,求∂X∂Y
先求微分:
d
Y
=
A
[
e
x
p
(
B
X
C
)
⊙
d
(
B
d
(
X
)
C
)
]
D
d\mathbf Y = \mathbf A [exp(\mathbf{BXC}) \odot d(\mathbf B d(\mathbf X) \mathbf C)] \mathbf D
dY=A[exp(BXC)⊙d(Bd(X)C)]D
再对微分等式两边向量化:
v
e
c
(
d
Y
)
=
v
e
c
(
A
⋅
[
e
x
p
(
B
X
C
)
⊙
(
B
d
(
X
)
C
)
]
⋅
D
)
=
(
D
T
⊗
A
)
⋅
v
e
c
[
e
x
p
(
B
X
C
)
⊙
(
B
d
(
X
)
C
)
]
(
1
)
=
(
D
T
⊗
A
)
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
v
e
c
(
B
d
(
X
)
C
)
(
2
)
=
(
D
T
⊗
A
)
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
[
(
C
T
⊗
B
)
⋅
v
e
c
(
d
X
)
]
(
3
)
=
(
D
T
⊗
A
)
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
(
C
T
⊗
B
)
⋅
v
e
c
(
d
X
)
\begin{aligned} vec(d\mathbf Y) &= vec( \mathbf A · [exp(\mathbf{BXC}) \odot (\mathbf B d(\mathbf X) \mathbf C)] · \mathbf D ) \\ &= (\mathbf D^T ⊗ \mathbf A) · vec[exp(\mathbf{BXC}) \odot (\mathbf B d(\mathbf X) \mathbf C)] \qquad\qquad\quad(1)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · vec(\mathbf B d(\mathbf X) \mathbf C) \qquad\qquad(2)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · [(\mathbf C^T ⊗ \mathbf B) · vec(d\mathbf X)] \quad(3)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · (\mathbf C^T ⊗ \mathbf B) · vec(d\mathbf X) \end{aligned}
vec(dY)=vec(A⋅[exp(BXC)⊙(Bd(X)C)]⋅D)=(DT⊗A)⋅vec[exp(BXC)⊙(Bd(X)C)](1)=(DT⊗A)⋅diag[exp(BXC)]⋅vec(Bd(X)C)(2)=(DT⊗A)⋅diag[exp(BXC)]⋅[(CT⊗B)⋅vec(dX)](3)=(DT⊗A)⋅diag[exp(BXC)]⋅(CT⊗B)⋅vec(dX)
其中:
⋅
是
矩
阵
乘
法
,
⊙
是
哈
达
马
乘
积
,
⊗
是
克
罗
内
克
乘
积
式
子
1
根
据
矩
阵
向
量
化
的
运
算
法
则
(
矩
阵
乘
法
)
:
v
e
c
(
A
X
B
)
=
(
B
T
⊗
A
)
v
e
c
(
X
)
式
子
2
根
据
矩
阵
向
量
化
的
运
算
法
则
(
逐
元
素
乘
法
)
:
v
e
c
(
A
⊙
X
)
=
d
i
a
g
(
X
)
⋅
v
e
c
(
X
)
式
子
3
根
据
矩
阵
向
量
化
的
运
算
法
则
(
矩
阵
乘
法
)
:
v
e
c
(
A
X
B
)
=
(
B
T
⊗
A
)
v
e
c
(
X
)
· 是矩阵乘法, \odot 是哈达马乘积, ⊗是克罗内克乘积 \\ 式子1根据 矩阵向量化的运算法则(矩阵乘法): vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X) \\ 式子2根据 矩阵向量化的运算法则(逐元素乘法): vec(\mathbf A \odot \mathbf X) = diag(\mathbf X) · vec(\mathbf X) \\ 式子3根据 矩阵向量化的运算法则(矩阵乘法): vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X)
⋅是矩阵乘法,⊙是哈达马乘积,⊗是克罗内克乘积式子1根据矩阵向量化的运算法则(矩阵乘法):vec(AXB)=(BT⊗A)vec(X)式子2根据矩阵向量化的运算法则(逐元素乘法):vec(A⊙X)=diag(X)⋅vec(X)式子3根据矩阵向量化的运算法则(矩阵乘法):vec(AXB)=(BT⊗A)vec(X)
所以:
∂
Y
∂
X
=
[
(
D
T
⊗
A
)
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
(
C
T
⊗
B
)
]
T
=
(
C
T
⊗
B
)
T
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
(
D
T
⊗
A
)
T
=
(
C
⊗
B
T
)
⋅
d
i
a
g
[
e
x
p
(
B
X
C
)
]
⋅
(
D
⊗
A
T
)
\begin{aligned} \frac{\partial \mathbf Y}{\partial \mathbf X} &= [(\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · (\mathbf C^T ⊗ \mathbf B)]^T\\ &= (\mathbf C^T ⊗ \mathbf B)^T · diag[exp(\mathbf{BXC})] · (\mathbf D^T ⊗ \mathbf A)^T\\ &= (\mathbf C ⊗ \mathbf B^T) · diag[exp(\mathbf{BXC})] · (\mathbf D ⊗ \mathbf A^T)\\ \end{aligned}
∂X∂Y=[(DT⊗A)⋅diag[exp(BXC)]⋅(CT⊗B)]T=(CT⊗B)T⋅diag[exp(BXC)]⋅(DT⊗A)T=(C⊗BT)⋅diag[exp(BXC)]⋅(D⊗AT)
其中:
其
中
d
i
a
g
(
A
)
m
n
×
m
n
是
用
A
m
n
的
元
素
(
按
列
优
先
)
排
成
的
对
角
阵
(
d
i
a
g
[
e
x
p
(
B
X
C
)
]
)
T
=
d
i
a
g
[
e
x
p
(
B
X
C
)
]
,
即
对
角
阵
的
转
置
仍
是
自
己
本
身
其中diag(\mathbf A)_{mn×mn}是用\mathbf A_{mn}的元素(按列优先)排成的对角阵\\ (diag[exp(\mathbf{BXC})])^T = diag[exp(\mathbf{BXC})],即对角阵的转置仍是自己本身
其中diag(A)mn×mn是用Amn的元素(按列优先)排成的对角阵(diag[exp(BXC)])T=diag[exp(BXC)],即对角阵的转置仍是自己本身
3.
Y
=
X
m
n
B
,
∂
Y
∂
X
=
B
⊗
I
m
\mathbf Y = \mathbf{X_{mn}B}, \frac{\partial \mathbf Y}{\partial \mathbf X} = \mathbf B ⊗ \mathbf I_{m}
Y=XmnB,∂X∂Y=B⊗Im
其中:
利
用
了
公
式
:
v
e
c
(
X
A
)
=
(
A
T
⊗
I
m
)
⋅
v
e
c
(
X
)
利用了公式:vec(\mathbf{XA}) = (\mathbf A^T ⊗ \mathbf I_{m}) · vec(\mathbf X)\\
利用了公式:vec(XA)=(AT⊗Im)⋅vec(X)
4.
Y
=
A
X
m
n
,
∂
Y
∂
X
=
I
n
⊗
A
T
\mathbf Y = \mathbf{AX_{mn}}, \frac{\partial \mathbf Y}{\partial \mathbf X} = \mathbf I_{n} ⊗ \mathbf A^T
Y=AXmn,∂X∂Y=In⊗AT
其中:
利
用
了
公
式
:
v
e
c
(
A
X
)
=
(
A
T
⊗
I
n
)
⋅
v
e
c
(
X
)
利用了公式:vec(\mathbf{AX}) = (\mathbf A^T ⊗ \mathbf I_{n}) · vec(\mathbf X)
利用了公式:vec(AX)=(AT⊗In)⋅vec(X)