注:本文来自 zhihu 长躯鬼侠 “矩阵求导” 相关文章重排。
如有内容异常,请看原文。
矩阵求导术(下)
长躯鬼侠 发布于 2017-01-21 07:50
本文承接上篇,主要介绍矩阵对矩阵的求导术。矩阵对矩阵的求导采用了向量化的思路,常用于二阶方法中 Hessian 矩阵的分析。
本文使用小写字母 x x x 表示标量,粗体小写字母 x \mathbf{x} x 表示列向量,大写字母 X \mathbf{X} X 表示矩阵。
一、定义
矩阵对矩阵的导数需满足以下条件:
- 矩阵 F ( p × q ) \mathbf{F}(p \times q) F(p×q) 对矩阵 X ( m × n ) \mathbf{X}(m \times n) X(m×n) 的导数,需包含所有 m n p q mnpq mnpq 个偏导数 ∂ F k l ∂ X i j \frac{\partial F_{kl}}{\partial X_{ij}} ∂Xij∂Fkl,不损失信息;
- 导数与微分有简明的联系(计算与应用的需求);
- 导数有从整体出发的简明算法。
1.1 向量对向量的导数
先定义向量
f
(
p
×
1
)
\mathbf{f}(p \times 1)
f(p×1) 对向量
x
(
m
×
1
)
\mathbf{x}(m \times 1)
x(m×1) 的导数:
∂
f
∂
x
=
[
∂
f
1
∂
x
1
∂
f
1
∂
x
2
…
∂
f
1
∂
x
m
∂
f
2
∂
x
1
∂
f
2
∂
x
2
…
∂
f
2
∂
x
m
⋮
⋮
⋱
⋮
∂
f
p
∂
x
1
∂
f
p
∂
x
2
…
∂
f
p
∂
x
m
]
\frac{\partial \mathbf{f}}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \dots & \frac{\partial f_1}{\partial x_m} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \dots & \frac{\partial f_2}{\partial x_m} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_p}{\partial x_1} & \frac{\partial f_p}{\partial x_2} & \dots & \frac{\partial f_p}{\partial x_m} \end{bmatrix}
∂x∂f=
∂x1∂f1∂x1∂f2⋮∂x1∂fp∂x2∂f1∂x2∂f2⋮∂x2∂fp……⋱…∂xm∂f1∂xm∂f2⋮∂xm∂fp
满足微分关系:
d
f
=
∂
f
∂
x
T
d
x
d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^T d\mathbf{x}
df=∂x∂fTdx
1.2 矩阵的向量化
定义矩阵的按列优先向量化:
vec
(
X
)
=
[
X
11
,
…
,
X
m
1
,
X
12
,
…
,
X
m
2
,
…
,
X
1
n
,
…
,
X
m
n
]
T
(
m
n
×
1
)
\text{vec}(\mathbf{X}) = [X_{11}, \dots, X_{m1}, X_{12}, \dots, X_{m2}, \dots, X_{1n}, \dots, X_{mn}]^T \quad (mn \times 1)
vec(X)=[X11,…,Xm1,X12,…,Xm2,…,X1n,…,Xmn]T(mn×1)
1.3 矩阵对矩阵的导数
定义矩阵
F
\mathbf{F}
F 对矩阵
X
\mathbf{X}
X 的导数:
∂
F
∂
X
=
∂
vec
(
F
)
∂
vec
(
X
)
(
m
n
×
p
q
)
\frac{\partial \mathbf{F}}{\partial \mathbf{X}} = \frac{\partial \text{vec}(\mathbf{F})}{\partial \text{vec}(\mathbf{X})} \quad (mn \times pq)
∂X∂F=∂vec(X)∂vec(F)(mn×pq)
导数与微分的联系:
vec
(
d
F
)
=
∂
F
∂
X
T
vec
(
d
X
)
\text{vec}(d\mathbf{F}) = \frac{\partial \mathbf{F}}{\partial \mathbf{X}}^T \text{vec}(d\mathbf{X})
vec(dF)=∂X∂FTvec(dX)
二、几点说明
2.1 标量对矩阵的导数
按此定义,标量
f
f
f 对矩阵
X
(
m
×
n
)
\mathbf{X}(m \times n)
X(m×n) 的导数
∂
f
∂
X
\frac{\partial f}{\partial \mathbf{X}}
∂X∂f 是
m
n
×
1
mn \times 1
mn×1 向量,与上篇定义(
m
×
n
m \times n
m×n 矩阵
∇
X
f
\nabla_{\mathbf{X}} f
∇Xf)不兼容,但可转换:
∂
f
∂
X
=
vec
(
∇
X
f
)
\frac{\partial f}{\partial \mathbf{X}} = \text{vec}(\nabla_{\mathbf{X}} f)
∂X∂f=vec(∇Xf)
(注:标量对矩阵求导用上篇方法更方便)
2.2 Hessian 矩阵(标量对矩阵的二阶导数)
定义为:
∇
X
2
f
=
∂
2
f
∂
X
2
=
∂
∇
X
f
∂
X
(
m
n
×
m
n
)
\nabla_{\mathbf{X}}^2 f = \frac{\partial^2 f}{\partial \mathbf{X}^2} = \frac{\partial \nabla_{\mathbf{X}} f}{\partial \mathbf{X}} \quad (mn \times mn)
∇X2f=∂X2∂2f=∂X∂∇Xf(mn×mn)
是对称矩阵。对
∂
f
∂
X
\frac{\partial f}{\partial \mathbf{X}}
∂X∂f 或
∇
X
f
\nabla_{\mathbf{X}} f
∇Xf 求导均可得到 Hessian 矩阵,但从
∇
X
f
\nabla_{\mathbf{X}} f
∇Xf 出发更方便。
2.3 向量化的优缺点
- 缺点:矩阵被向量化后破坏了原有结构,结果形式复杂;
- 优点:多元微积分中关于梯度、Hessian 矩阵的结论可直接沿用(只需将矩阵向量化)。例如优化问题中,牛顿法的更新量 Δ X \Delta \mathbf{X} ΔX 满足:
vec ( Δ X ) = − ( ∇ X 2 f ) − 1 vec ( ∇ X f ) \text{vec}(\Delta \mathbf{X}) = -(\nabla_{\mathbf{X}}^2 f)^{-1} \text{vec}(\nabla_{\mathbf{X}} f) vec(ΔX)=−(∇X2f)−1vec(∇Xf)
2.4 其他定义的说明
资料中矩阵对矩阵的导数还有其他定义(如 ∂ X ∂ F = ∂ F k l ∂ X i j ( m × n q ) \frac{\partial \mathbf{X}}{\partial \mathbf{F}} = \frac{\partial F_{kl}}{\partial X_{ij}} (m \times nq) ∂F∂X=∂Xij∂Fkl(m×nq) 等),虽能兼容标量对矩阵的导数,但微分与导数的联系不简明,不便计算和应用。
2.5 布局差异
本文使用分子布局(与机器学习中的梯度定义一致);而控制论等领域常用Jacobian 矩阵的分母布局,此时向量
f
\mathbf{f}
f 对向量
x
\mathbf{x}
x 的导数定义为:
∂
f
∂
x
=
[
∂
f
1
∂
x
1
∂
f
2
∂
x
1
…
∂
f
p
∂
x
1
∂
f
1
∂
x
2
∂
f
2
∂
x
2
…
∂
f
p
∂
x
2
⋮
⋮
⋱
⋮
∂
f
1
∂
x
m
∂
f
2
∂
x
m
…
∂
f
p
∂
x
m
]
\frac{\partial \mathbf{f}}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} & \dots & \frac{\partial f_p}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} & \dots & \frac{\partial f_p}{\partial x_2} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_1}{\partial x_m} & \frac{\partial f_2}{\partial x_m} & \dots & \frac{\partial f_p}{\partial x_m} \end{bmatrix}
∂x∂f=
∂x1∂f1∂x2∂f1⋮∂xm∂f1∂x1∂f2∂x2∂f2⋮∂xm∂f2……⋱…∂x1∂fp∂x2∂fp⋮∂xm∂fp
对应微分关系:
d
f
=
∂
f
∂
x
d
x
d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} d\mathbf{x}
df=∂x∂fdx
两种布局的导数互为转置,微分步骤相同,仅导数与微分的联系有转置区别,可根据领域习惯选择。
三、运算法则(基于向量化)
利用导数与微分的联系 vec ( d F ) = ∂ F ∂ X T vec ( d X ) \text{vec}(d\mathbf{F}) = \frac{\partial \mathbf{F}}{\partial \mathbf{X}}^T \text{vec}(d\mathbf{X}) vec(dF)=∂X∂FTvec(dX),结合微分方法(与上篇相同),需用到向量化技巧:
3.1 线性运算
vec ( A + B ) = vec ( A ) + vec ( B ) \text{vec}(\mathbf{A} + \mathbf{B}) = \text{vec}(\mathbf{A}) + \text{vec}(\mathbf{B}) vec(A+B)=vec(A)+vec(B)
3.2 矩阵乘法
vec ( A X B ) = ( B T ⊗ A ) vec ( X ) \text{vec}(\mathbf{A}\mathbf{X}\mathbf{B}) = (\mathbf{B}^T \otimes \mathbf{A}) \text{vec}(\mathbf{X}) vec(AXB)=(BT⊗A)vec(X)
其中 ⊗ \otimes ⊗ 是 Kronecker 积: A ( m × n ) \mathbf{A}(m \times n) A(m×n) 与 B ( p × q ) \mathbf{B}(p \times q) B(p×q) 的 Kronecker 积为 A ⊗ B = [ A i j B ] ( m p × n q ) \mathbf{A} \otimes \mathbf{B} = [A_{ij}\mathbf{B}] (mp \times nq) A⊗B=[AijB](mp×nq)。
3.3 转置
vec ( A T ) = K m n vec ( A ) \text{vec}(\mathbf{A}^T) = \mathbf{K}_{mn} \text{vec}(\mathbf{A}) vec(AT)=Kmnvec(A)
其中
A
\mathbf{A}
A 是
m
×
n
m \times n
m×n 矩阵,
K
m
n
(
m
n
×
m
n
)
\mathbf{K}_{mn}(mn \times mn)
Kmn(mn×mn) 是交换矩阵(commutation matrix),将按列优先的向量化转换为按行优先的向量化。例如:
K
22
=
[
1
0
0
0
0
0
1
0
0
1
0
0
0
0
0
1
]
\mathbf{K}_{22} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
K22=
1000001001000001
3.4 逐元素乘法
vec ( A ⊙ X ) = diag ( A ) vec ( X ) \text{vec}(\mathbf{A} \odot \mathbf{X}) = \text{diag}(\mathbf{A}) \text{vec}(\mathbf{X}) vec(A⊙X)=diag(A)vec(X)
其中 diag ( A ) \text{diag}(\mathbf{A}) diag(A) 是将 A \mathbf{A} A 的元素按列优先排列的对角矩阵,其维度为 m n × m n mn \times mn mn×mn。
四、求导示例
观察可得:若矩阵函数
F
\mathbf{F}
F 是矩阵
X
\mathbf{X}
X 经加、减、乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对
F
\mathbf{F}
F 求微分,再做向量化并使用技巧将其他项交换至
vec
(
d
X
)
\text{vec}(d\mathbf{X})
vec(dX) 左侧,对照导数与微分的联系
vec
(
d
F
)
=
∂
F
∂
X
T
vec
(
d
X
)
,
\text{vec}(d\mathbf{F}) = \frac{\partial \mathbf{F}}{\partial \mathbf{X}}^T \text{vec}(d\mathbf{X}),
vec(dF)=∂X∂FTvec(dX),
即可求得导数。
特别地,若矩阵退化为向量,对照导数与微分的联系
d
f
=
∂
f
∂
x
T
d
x
,
d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^T d\mathbf{x},
df=∂x∂fTdx,
即可求得导数。
再讨论复合问题:假设已求得
∂
F
∂
Y
\frac{\partial F}{\partial Y}
∂Y∂F,而
Y
Y
Y 是
X
X
X 的函数,如何求
∂
F
∂
X
\frac{\partial F}{\partial X}
∂X∂F?从导数与微分的联系入手,
v
e
c
(
d
F
)
=
∂
F
∂
Y
T
v
e
c
(
d
Y
)
=
∂
F
∂
Y
T
∂
Y
∂
X
T
v
e
c
(
d
X
)
,
\begin{align*} \mathrm{vec}(dF) &= \frac{\partial F}{\partial Y}^T\mathrm{vec}(dY) \\&= \frac{\partial F}{\partial Y}^T\frac{\partial Y}{\partial X}^T\mathrm{vec}(dX), \end{align*}
vec(dF)=∂Y∂FTvec(dY)=∂Y∂FT∂X∂YTvec(dX),
可以推出链式法则
∂
F
∂
X
=
∂
Y
∂
X
∂
F
∂
Y
.
\frac{\partial F}{\partial X} = \frac{\partial Y}{\partial X}\frac{\partial F}{\partial Y}.
∂X∂F=∂X∂Y∂Y∂F.
与标量对矩阵的导数相比,矩阵对矩阵的导数形式更加复杂,从不同角度出发常会得到形式不同的结果。有一些 Kronecker 积和交换矩阵相关的恒等式,可用来做等价变形:
-
( A ⊗ B ) T = A T ⊗ B T (A\otimes B)^T = A^T \otimes B^T (A⊗B)T=AT⊗BT。
-
v e c ( a b T ) = b ⊗ a \mathrm{vec}(\mathbf{ab}^T) = \mathbf{b}\otimes\mathbf{a} vec(abT)=b⊗a。
-
( A ⊗ B ) ( C ⊗ D ) = ( A C ) ⊗ ( B D ) (A\otimes B)(C\otimes D) = (AC)\otimes (BD) (A⊗B)(C⊗D)=(AC)⊗(BD)。可以对 F = D T B T X A C F = D^TB^TXAC F=DTBTXAC 求导来证明,一方面,直接求导得到
∂ F ∂ X = ( A C ) ⊗ ( B D ) ; \frac{\partial F}{\partial X} = (AC) \otimes (BD); ∂X∂F=(AC)⊗(BD);
另一方面,引入
Y
=
B
T
X
A
Y = B^T X A
Y=BTXA,有
∂
F
∂
Y
=
C
⊗
D
,
∂
Y
∂
X
=
A
⊗
B
,
\frac{\partial F}{\partial Y} = C \otimes D, \quad \frac{\partial Y}{\partial X} = A \otimes B,
∂Y∂F=C⊗D,∂X∂Y=A⊗B,
利用链式法则得到
∂
F
∂
X
=
(
A
⊗
B
)
(
C
⊗
D
)
.
\frac{\partial F}{\partial X} = (A\otimes B)(C \otimes D).
∂X∂F=(A⊗B)(C⊗D).
-
K m n = K n m T K_{mn} = K_{nm}^T Kmn=KnmT, K m n K n m = I K_{mn}K_{nm} = I KmnKnm=I。
-
K p m ( A ⊗ B ) K n q = B ⊗ A K_{pm}(A\otimes B) K_{nq} = B\otimes A Kpm(A⊗B)Knq=B⊗A, A A A 是 m × n m\times n m×n 矩阵, B B B 是 p × q p\times q p×q 矩阵。可以对 A X B T AXB^T AXBT 做向量化来证明,一方面,
v e c ( A X B T ) = ( B ⊗ A ) v e c ( X ) ; \mathrm{vec}(AXB^T) = (B\otimes A)\mathrm{vec}(X); vec(AXBT)=(B⊗A)vec(X);
另一方面,
v
e
c
(
A
X
B
T
)
=
K
p
m
v
e
c
(
B
X
T
A
T
)
=
K
p
m
(
A
⊗
B
)
v
e
c
(
X
T
)
=
K
p
m
(
A
⊗
B
)
K
n
q
v
e
c
(
X
)
.
\begin{align*} \mathrm{vec}(AXB^T) &= K_{pm}\mathrm{vec}(BX^TA^T) \\&= K_{pm}(A\otimes B)\mathrm{vec}(X^T) \\&= K_{pm}(A\otimes B) K_{nq}\mathrm{vec}(X). \end{align*}
vec(AXBT)=Kpmvec(BXTAT)=Kpm(A⊗B)vec(XT)=Kpm(A⊗B)Knqvec(X).
五、算例演示
例 1:线性变换的导数
问题: F = A X F = AX F=AX, X X X 是 m × n m\times n m×n 矩阵,求 ∂ F ∂ X \frac{\partial F}{\partial X} ∂X∂F。
解:先求微分:
d
F
=
A
d
X
,
dF = AdX,
dF=AdX,
再做向量化,利用矩阵乘法的技巧,注意在
d
X
dX
dX 右侧添加单位阵:
v
e
c
(
d
F
)
=
v
e
c
(
A
d
X
)
=
(
I
n
⊗
A
)
v
e
c
(
d
X
)
,
\mathrm{vec}(dF) = \mathrm{vec}(AdX) = (I_n\otimes A)\mathrm{vec}(dX),
vec(dF)=vec(AdX)=(In⊗A)vec(dX),
对照导数与微分的联系得到
∂
F
∂
X
=
I
n
⊗
A
T
.
\frac{\partial F}{\partial X} = I_n\otimes A^T.
∂X∂F=In⊗AT.
特例:如果
X
X
X 退化为向量,即
f
=
A
x
\mathbf{f} = A \mathbf{x}
f=Ax,则根据向量的导数与微分的关系
d
f
=
∂
f
∂
x
T
d
x
,
d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^T d\mathbf{x},
df=∂x∂fTdx,
得到
∂
f
∂
x
=
A
T
.
\frac{\partial \mathbf{f}}{\partial \mathbf{x}} = A^T.
∂x∂f=AT.
例 2:行列式函数的导数
问题: f = log ∣ X ∣ f = \log |X| f=log∣X∣, X X X 是 n × n n\times n n×n 矩阵,求 ∇ X f \nabla_X f ∇Xf 和 ∇ X 2 f \nabla^2_X f ∇X2f。
解:利用上篇中的技术可求得
∇
X
f
=
X
−
1
T
.
\nabla_X f = X^{-1T}.
∇Xf=X−1T.
为求
∇
X
2
f
\nabla^2_X f
∇X2f,先求微分:
d
∇
X
f
=
−
(
X
−
1
d
X
X
−
1
)
T
,
d\nabla_X f = -(X^{-1}dXX^{-1})^T,
d∇Xf=−(X−1dXX−1)T,
再做向量化,利用转置和矩阵乘法的技巧
v
e
c
(
d
∇
X
f
)
=
−
K
n
n
v
e
c
(
X
−
1
d
X
X
−
1
)
=
−
K
n
n
(
X
−
1
T
⊗
X
−
1
)
v
e
c
(
d
X
)
,
\begin{align*} \mathrm{vec}(d\nabla_X f) &= -K_{nn}\mathrm{vec}(X^{-1}dX X^{-1}) \\&= -K_{nn}(X^{-1T}\otimes X^{-1})\mathrm{vec}(dX), \end{align*}
vec(d∇Xf)=−Knnvec(X−1dXX−1)=−Knn(X−1T⊗X−1)vec(dX),
对照导数与微分的联系,得到
∇
X
2
f
=
−
K
n
n
(
X
−
1
T
⊗
X
−
1
)
,
\nabla^2_X f = -K_{nn}(X^{-1T}\otimes X^{-1}),
∇X2f=−Knn(X−1T⊗X−1),
注意它是对称矩阵。在
X
X
X 是对称矩阵时,可简化为
∇
X
2
f
=
−
X
−
1
⊗
X
−
1
.
\nabla^2_X f = -X^{-1}\otimes X^{-1}.
∇X2f=−X−1⊗X−1.
例 3:指数函数的导数
问题: F = A exp ( X B ) F = A\exp(XB) F=Aexp(XB), A A A 是 l × m l\times m l×m 矩阵, X X X 是 m × n m\times n m×n 矩阵, B B B 是 n × p n\times p n×p 矩阵, exp \exp exp 为逐元素函数,求 ∂ F ∂ X \frac{\partial F}{\partial X} ∂X∂F。
解:先求微分:
d
F
=
A
(
exp
(
X
B
)
⊙
(
d
X
B
)
)
,
dF = A(\exp(XB)\odot (dXB)),
dF=A(exp(XB)⊙(dXB)),
再做向量化,利用矩阵乘法的技巧:
v
e
c
(
d
F
)
=
(
I
p
⊗
A
)
v
e
c
(
exp
(
X
B
)
⊙
(
d
X
B
)
)
,
\mathrm{vec}(dF) = (I_p\otimes A)\mathrm{vec}(\exp(XB)\odot (dXB)),
vec(dF)=(Ip⊗A)vec(exp(XB)⊙(dXB)),
再利用逐元素乘法的技巧:
v
e
c
(
d
F
)
=
(
I
p
⊗
A
)
d
i
a
g
(
exp
(
X
B
)
)
v
e
c
(
d
X
B
)
,
\mathrm{vec}(dF) = (I_p \otimes A) \mathrm{diag}(\exp(XB))\mathrm{vec}(dXB),
vec(dF)=(Ip⊗A)diag(exp(XB))vec(dXB),
再利用矩阵乘法的技巧:
v
e
c
(
d
F
)
=
(
I
p
⊗
A
)
d
i
a
g
(
exp
(
X
B
)
)
(
B
T
⊗
I
m
)
v
e
c
(
d
X
)
,
\mathrm{vec}(dF) = (I_p\otimes A)\mathrm{diag}(\exp(XB))(B^T\otimes I_m)\mathrm{vec}(dX),
vec(dF)=(Ip⊗A)diag(exp(XB))(BT⊗Im)vec(dX),
对照导数与微分的联系得到
∂
F
∂
X
=
(
B
⊗
I
m
)
d
i
a
g
(
exp
(
X
B
)
)
(
I
p
⊗
A
T
)
.
\frac{\partial F}{\partial X} = (B\otimes I_m)\mathrm{diag}(\exp(XB))(I_p\otimes A^T).
∂X∂F=(B⊗Im)diag(exp(XB))(Ip⊗AT).
例 4:一元 logistic 回归中的导数
问题: l = − y x T w + log ( 1 + exp ( x T w ) ) l = -y \mathbf{x}^T \mathbf{w} + \log(1 + \exp(\mathbf{x}^T\mathbf{w})) l=−yxTw+log(1+exp(xTw)),求 ∇ w l \nabla_\mathbf{w} l ∇wl 和 ∇ w 2 l \nabla^2_\mathbf{w} l ∇w2l。其中 y y y 是取值 0 或 1 的标量, x , w \mathbf{x},\mathbf{w} x,w 是 n × 1 n\times 1 n×1 列向量。
解:利用上篇中的技术可求得
∇
w
l
=
x
(
σ
(
x
T
w
)
−
y
)
,
\nabla_\mathbf{w} l = \mathbf{x}(\sigma(\mathbf{x}^T\mathbf{w}) - y),
∇wl=x(σ(xTw)−y),
其中
σ
(
a
)
=
exp
(
a
)
1
+
exp
(
a
)
\sigma(a) = \frac{\exp(a)}{1+\exp(a)}
σ(a)=1+exp(a)exp(a) 为 sigmoid 函数。为求
∇
w
2
l
\nabla^2_\mathbf{w} l
∇w2l,先求微分:
d
∇
w
l
=
x
σ
′
(
x
T
w
)
x
T
d
w
,
d\nabla_\mathbf{w} l = \mathbf{x} \sigma'(\mathbf{x}^T\mathbf{w})\mathbf{x}^T d\mathbf{w},
d∇wl=xσ′(xTw)xTdw,
其中
σ
′
(
a
)
=
exp
(
a
)
(
1
+
exp
(
a
)
)
2
\sigma'(a) = \frac{\exp(a)}{(1+\exp(a))^2}
σ′(a)=(1+exp(a))2exp(a) 为 sigmoid 函数的导数,对照导数与微分的联系,得到
∇
w
2
l
=
x
σ
′
(
x
T
w
)
x
T
.
\nabla^2_\mathbf{w} l = \mathbf{x}\sigma'(\mathbf{x}^T\mathbf{w})\mathbf{x}^T.
∇w2l=xσ′(xTw)xT.
推广:多样本情况下的 logistic 回归
问题:样本
(
x
1
,
y
1
)
,
…
,
(
x
N
,
y
N
)
(\mathbf{x}_1, y_1), \dots, (\mathbf{x}_N,y_N)
(x1,y1),…,(xN,yN),
l
=
∑
i
=
1
N
(
−
y
i
x
i
T
w
+
log
(
1
+
exp
(
x
i
T
w
)
)
)
,
l = \sum_{i=1}^N \left(-y_i \mathbf{x}_i^T\mathbf{w} + \log(1+\exp(\mathbf{x_i}^T\mathbf{w}))\right),
l=i=1∑N(−yixiTw+log(1+exp(xiTw))),
求
∇
w
l
\nabla_\mathbf{w} l
∇wl 和
∇
w
2
l
\nabla^2_\mathbf{w} l
∇w2l。有两种方法:
解 1:先对每个样本求导,然后相加。
解 2:定义矩阵
X
=
[
x
1
T
⋮
x
N
T
]
,
X = \begin{bmatrix} \mathbf{x}_1^T \\ \vdots \\ \mathbf{x}_N^T \end{bmatrix},
X=
x1T⋮xNT
,
向量
y
=
[
y
1
⋮
y
N
]
,
\mathbf{y} = \begin{bmatrix} y_1 \\ \vdots \\ y_N \end{bmatrix},
y=
y1⋮yN
,
将
l
l
l 写成矩阵形式:
l
=
−
y
T
X
w
+
1
T
log
(
1
+
exp
(
X
w
)
)
,
l = -\mathbf{y}^T X\mathbf{w} + \mathbf{1}^T\log(\mathbf{1} + \exp(X\mathbf{w})),
l=−yTXw+1Tlog(1+exp(Xw)),
进而可以利用上篇中的技术求得
∇
w
l
=
X
⊤
(
σ
(
X
w
)
−
y
)
,
\nabla_{\mathbf{w}} l = X^\top\left(\sigma(X\mathbf{w}) - \mathbf{y}\right),
∇wl=X⊤(σ(Xw)−y),
为求
∇
w
2
l
\nabla^2_{\mathbf{w}} l
∇w2l,先求微分,再利用逐元素乘法的技巧:
d
∇
w
l
=
X
⊤
(
σ
′
(
X
w
)
⊙
(
X
d
w
)
)
=
X
⊤
diag
(
σ
′
(
X
w
)
)
X
d
w
,
d\nabla_{\mathbf{w}} l = X^\top\left(\sigma'(X\mathbf{w}) \odot (X d\mathbf{w})\right) = X^\top \text{diag}\left(\sigma'(X\mathbf{w})\right) X d\mathbf{w},
d∇wl=X⊤(σ′(Xw)⊙(Xdw))=X⊤diag(σ′(Xw))Xdw,
对照导数与微分的联系,得到
∇
w
2
l
=
X
⊤
diag
(
σ
′
(
X
w
)
)
X
.
\nabla^2_{\mathbf{w}} l = X^\top\text{diag}\left(\sigma'(X\mathbf{w})\right) X.
∇w2l=X⊤diag(σ′(Xw))X.
例 5:多元 logistic 回归中的导数
问题: l = − y T log softmax ( W x ) = − y T W x + log ( 1 T exp ( W x ) ) l = -\mathbf{y}^T\log \text{softmax}(W\mathbf{x}) = -\mathbf{y}^TW\mathbf{x} + \log(\mathbf{1}^T\exp(W\mathbf{x})) l=−yTlogsoftmax(Wx)=−yTWx+log(1Texp(Wx)),求 ∇ W l \nabla_W l ∇Wl 和 ∇ W 2 l \nabla^2_W l ∇W2l。其中 y \mathbf{y} y 是除一个元素为 1 外其他元素为 0 的 m × 1 m\times 1 m×1 列向量, W W W 是 m × n m\times n m×n 矩阵, x \mathbf{x} x 是 n × 1 n\times 1 n×1 列向量, l l l 是标量。
解:上篇中已求得
∇
W
l
=
(
softmax
(
W
x
)
−
y
)
x
T
.
\nabla_W l = (\text{softmax}(W\mathbf{x})-\mathbf{y})\mathbf{x}^T.
∇Wl=(softmax(Wx)−y)xT.
为求
∇
W
2
l
\nabla^2_W l
∇W2l,先求微分:定义
a
=
W
x
\mathbf{a} = W\mathbf{x}
a=Wx,
d
∇
W
l
=
(
exp
(
a
)
⊙
d
a
1
T
exp
(
a
)
−
exp
(
a
)
(
1
T
(
exp
(
a
)
⊙
d
a
)
)
(
1
T
exp
(
a
)
)
2
)
x
T
.
d\nabla_W l = \left(\frac{\exp(\mathbf{a})\odot d\mathbf{a}}{\mathbf{1}^T\exp(\mathbf{a})} - \frac{\exp(\mathbf{a}) (\mathbf{1}^T(\exp(\mathbf{a})\odot d\mathbf{a}))}{(\mathbf{1}^T\exp(\mathbf{a}))^2}\right) \mathbf{x}^T.
d∇Wl=(1Texp(a)exp(a)⊙da−(1Texp(a))2exp(a)(1T(exp(a)⊙da)))xT.
化简得
d
∇
W
l
=
(
diag
(
exp
(
a
)
)
1
T
exp
(
a
)
−
exp
(
a
)
exp
(
a
)
T
(
1
T
exp
(
a
)
)
2
)
d
a
x
T
.
d\nabla_W l = \left( \frac{\text{diag}(\exp(\mathbf{a}))}{\mathbf{1}^T\exp(\mathbf{a})} - \frac{\exp(\mathbf{a})\exp(\mathbf{a})^T}{(\mathbf{1}^T\exp(\mathbf{a}))^2} \right)d\mathbf{a} \mathbf{x}^T.
d∇Wl=(1Texp(a)diag(exp(a))−(1Texp(a))2exp(a)exp(a)T)daxT.
进一步化简
d
∇
W
l
=
(
diag
(
softmax
(
a
)
)
−
softmax
(
a
)
softmax
(
a
)
T
)
d
a
x
T
.
d\nabla_W l = \left(\text{diag}(\text{softmax}(\mathbf{a})) - \text{softmax}(\mathbf{a})\text{softmax}(\mathbf{a})^T\right)d\mathbf{a} \mathbf{x}^T.
d∇Wl=(diag(softmax(a))−softmax(a)softmax(a)T)daxT.
定义矩阵
D
(
a
)
=
diag
(
softmax
(
a
)
)
−
softmax
(
a
)
softmax
(
a
)
T
,
D(\mathbf{a}) = \text{diag}(\text{softmax}(\mathbf{a})) - \text{softmax}(\mathbf{a})\text{softmax}(\mathbf{a})^T,
D(a)=diag(softmax(a))−softmax(a)softmax(a)T,
则
d
∇
W
l
=
D
(
a
)
d
a
x
T
=
D
(
W
x
)
d
W
x
x
T
.
d\nabla_W l = D(\mathbf{a})d\mathbf{a}\mathbf{x}^T = D(W\mathbf{x})dW \mathbf{x}\mathbf{x}^T.
d∇Wl=D(a)daxT=D(Wx)dWxxT.
做向量化并利用矩阵乘法的技巧,得到
∇
W
2
l
=
(
x
x
T
)
⊗
D
(
W
x
)
.
\nabla^2_W l = (\mathbf{x}\mathbf{x}^T) \otimes D(W\mathbf{x}).
∇W2l=(xxT)⊗D(Wx).
六、总结
我们发展了从整体出发的矩阵求导技术,导数与微分的联系是计算的枢纽。标量对矩阵的导数与微分的联系是
d
f
=
t
r
(
∇
X
T
f
d
X
)
,
df = \mathrm{tr}(\nabla_X^T f dX),
df=tr(∇XTfdX),
先对
f
f
f 求微分,再利用迹技巧可求得导数。特别地,标量对向量的导数与微分的联系是
d
f
=
∇
x
T
f
d
x
.
df = \nabla^T_{\mathbf{x}}f d\mathbf{x}.
df=∇xTfdx.
矩阵对矩阵的导数与微分的联系是
v
e
c
(
d
F
)
=
∂
F
∂
X
T
v
e
c
(
d
X
)
,
\mathrm{vec}(dF) = \frac{\partial F}{\partial X}^T \mathrm{vec}(dX),
vec(dF)=∂X∂FTvec(dX),
先对
F
F
F 求微分,再利用向量化的技巧可求得导数。特别地,向量对向量的导数与微分的联系是
d
f
=
∂
f
∂
x
T
d
x
.
d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^Td\mathbf{x}.
df=∂x∂fTdx.
参考资料:
- 张贤达. 矩阵分析与应用. 清华大学出版社有限公司, 2004.
- Fackler, Paul L. “Notes on matrix calculus.” North Carolina State University (2005).
- Petersen, Kaare Brandt, and Michael Syskind Pedersen. “The matrix cookbook.” Technical University of Denmark 7 (2008): 15.
- HU, Pili. “Matrix Calculus: Derivation and Simple Application.” (2012).
- Magnus, Jan R., and Heinz Neudecker. “Matrix Differential Calculus with Applications in Statistics and Econometrics.” Wiley, 2019.
编辑于 2020-06-28 04:46
- 矩阵求导 | 原理、公式、技巧与场景(篇 1)-优快云博客
https://blog.youkuaiyun.com/u013669912/article/details/155429718
via:
- 矩阵求导术(上) - 知乎
https://zhuanlan.zhihu.com/p/24709748 - 矩阵求导术(下) - 知乎
https://zhuanlan.zhihu.com/p/24863977
4690

被折叠的 条评论
为什么被折叠?



