矩阵求导 | 原理、公式、技巧与场景(篇 2)

注:本文来自 zhihu 长躯鬼侠 “矩阵求导” 相关文章重排。
如有内容异常,请看原文。


矩阵求导术(下)

长躯鬼侠 发布于 2017-01-21 07:50

本文承接上篇,主要介绍矩阵对矩阵的求导术。矩阵对矩阵的求导采用了向量化的思路,常用于二阶方法中 Hessian 矩阵的分析。

本文使用小写字母 x x x 表示标量粗体小写字母 x \mathbf{x} x 表示列向量大写字母 X \mathbf{X} X 表示矩阵

一、定义

矩阵对矩阵的导数需满足以下条件:

  1. 矩阵 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}} XijFkl,不损失信息;
  2. 导数与微分有简明的联系(计算与应用的需求);
  3. 导数有从整体出发的简明算法。

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} xf= x1f1x1f2x1fpx2f1x2f2x2fpxmf1xmf2xmfp

满足微分关系:
d f = ∂ f ∂ x T d x d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^T d\mathbf{x} df=xfTdx

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) XF=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)=XFTvec(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}} Xf 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) Xf=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=X22f=XXf(mn×mn)
是对称矩阵。对 ∂ f ∂ X \frac{\partial f}{\partial \mathbf{X}} Xf ∇ 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) FX=XijFkl(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} xf= x1f1x2f1xmf1x1f2x2f2xmf2x1fpx2fpxmfp

对应微分关系:
d f = ∂ f ∂ x d x d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} d\mathbf{x} df=xfdx

两种布局的导数互为转置,微分步骤相同,仅导数与微分的联系有转置区别,可根据领域习惯选择。

三、运算法则(基于向量化)

利用导数与微分的联系 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)=XFTvec(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)=(BTA)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) AB=[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(AX)=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)=XFTvec(dX),
即可求得导数。

特别地,若矩阵退化为向量,对照导数与微分的联系
d f = ∂ f ∂ x T d x , d\mathbf{f} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}^T d\mathbf{x}, df=xfTdx,
即可求得导数。

再讨论复合问题:假设已求得 ∂ F ∂ Y \frac{\partial F}{\partial Y} YF,而 Y Y Y X X X 的函数,如何求 ∂ F ∂ X \frac{\partial F}{\partial X} XF?从导数与微分的联系入手,
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)=YFTvec(dY)=YFTXYTvec(dX),
可以推出链式法则
∂ F ∂ X = ∂ Y ∂ X ∂ F ∂ Y . \frac{\partial F}{\partial X} = \frac{\partial Y}{\partial X}\frac{\partial F}{\partial Y}. XF=XYYF.

与标量对矩阵的导数相比,矩阵对矩阵的导数形式更加复杂,从不同角度出发常会得到形式不同的结果。有一些 Kronecker 积和交换矩阵相关的恒等式,可用来做等价变形:

  1. ( A ⊗ B ) T = A T ⊗ B T (A\otimes B)^T = A^T \otimes B^T (AB)T=ATBT

  2. v e c ( a b T ) = b ⊗ a \mathrm{vec}(\mathbf{ab}^T) = \mathbf{b}\otimes\mathbf{a} vec(abT)=ba

  3. ( A ⊗ B ) ( C ⊗ D ) = ( A C ) ⊗ ( B D ) (A\otimes B)(C\otimes D) = (AC)\otimes (BD) (AB)(CD)=(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); XF=(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, YF=CD,XY=AB,
利用链式法则得到
∂ F ∂ X = ( A ⊗ B ) ( C ⊗ D ) . \frac{\partial F}{\partial X} = (A\otimes B)(C \otimes D). XF=(AB)(CD).

  1. 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

  2. K p m ( A ⊗ B ) K n q = B ⊗ A K_{pm}(A\otimes B) K_{nq} = B\otimes A Kpm(AB)Knq=BA 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)=(BA)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(AB)vec(XT)=Kpm(AB)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} XF

:先求微分:
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)=(InA)vec(dX),
对照导数与微分的联系得到
∂ F ∂ X = I n ⊗ A T . \frac{\partial F}{\partial X} = I_n\otimes A^T. XF=InAT.

特例:如果 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=xfTdx,
得到
∂ f ∂ x = A T . \frac{\partial \mathbf{f}}{\partial \mathbf{x}} = A^T. xf=AT.

例 2:行列式函数的导数

问题 f = log ⁡ ∣ X ∣ f = \log |X| f=logX 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=X1T.
为求 ∇ 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, dXf=(X1dXX1)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(dXf)=Knnvec(X1dXX1)=Knn(X1TX1)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(X1TX1),
注意它是对称矩阵。在 X X X 是对称矩阵时,可简化为
∇ X 2 f = − X − 1 ⊗ X − 1 . \nabla^2_X f = -X^{-1}\otimes X^{-1}. X2f=X1X1.

例 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} XF

:先求微分:
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)=(IpA)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)=(IpA)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)=(IpA)diag(exp(XB))(BTIm)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). XF=(BIm)diag(exp(XB))(IpAT).

例 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}, dwl=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=1N(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= x1TxNT ,
向量
y = [ y 1 ⋮ y N ] , \mathbf{y} = \begin{bmatrix} y_1 \\ \vdots \\ y_N \end{bmatrix}, y= y1yN ,
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}, dwl=X(σ(Xw)(Xdw))=Xdiag(σ(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=Xdiag(σ(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. dWl=(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. dWl=(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. dWl=(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. dWl=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)=XFTvec(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=xfTdx.

参考资料:

  1. 张贤达. 矩阵分析与应用. 清华大学出版社有限公司, 2004.
  2. Fackler, Paul L. “Notes on matrix calculus.” North Carolina State University (2005).
  3. Petersen, Kaare Brandt, and Michael Syskind Pedersen. “The matrix cookbook.” Technical University of Denmark 7 (2008): 15.
  4. HU, Pili. “Matrix Calculus: Derivation and Simple Application.” (2012).
  5. Magnus, Jan R., and Heinz Neudecker. “Matrix Differential Calculus with Applications in Statistics and Econometrics.” Wiley, 2019.

编辑于 2020-06-28 04:46



via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值