矩阵求导 矩阵求导 理解矩阵求导 矩阵的求导在很多领域有所应用,比如控制论、优化等。这里对矩阵求导的主要内容进行分析和介绍,力图使得读者能够从更完善的角度理解矩阵求导。
这里,使用小写字母 x 代表标量/向量(根据语境可以看出),大写字母 X 代表矩阵。
宏观上理解矩阵求导 从定义上来看,标量对矩阵的导数可以定义为:
∂ X ∂ f = [ ∂ X ij ∂ f ]
也就是 f 对 X 逐元素求导,同时保证结果和 X 相同纬度。这个定义对 X 的每个元素进行一样的操作,在实际应用上就会出现很大的问题。因为对于复杂函数以及后面介绍的矩阵对矩阵求导的情形,我们很难将每个元素拆分后进行求导。从更加本质的角度来看,我们实际上可以找一个不依赖于 个体 的方法,也就是针对矩阵整体进行分析。
我们考虑一元函数的导数:
{ d f = f ′ ( x ) d x d f = ∑ i ∂ x i ∂ f d x i = ∂ x ∂ f T d x
也就是说,我们可以从微分的角度定义导数。
note
事实上,回忆一开始定义导数的时候,我们就是通过微分的角度来定义的,现在只是返回了更原始的定义罢了
根据上面一维的情形,我们整理导数为:
lemma
全微分df 是梯度向量∂ x ∂ f ( d im : n × 1 ) 和微分向量d x ( d im : n × 1 ) 的内积
我们可以类似的将矩阵的导数和微分建立这样的联系:
definition
d f = i = 1 ∑ m j = 1 ∑ n ∂ X ij ∂ f d X ij = t r ( ∂ X ∂ f T d X )
^a57269
注意上面的红色代表我们想要求的矩阵导数,tr 代表矩阵的迹 (trace),用来定义矩阵空间中的内积。(事实上,矩阵的一种内积定义方式就是 ⟨ A , B ⟩ = t r ( A T B ) = ∑ i ∑ j A ij B ij )
得到了这样全微分关系是,我们需要考虑如何求解其中的每一项。首先是 df 。
很普遍的一种思路是首先建立一些基本元素的微分关系,然后建立在一些法则下的微分运算法则,从何可以组合得到最终的微分结果,这里也采用这一思路。 ^bd1e3b
基本运算 ^b44308 加减法 矩阵乘法 转置 迹 逆 d ( X − 1 ) = − X − 1 d X X − 1 可以从 X X − 1 = I ⇒ d X ( X − 1 ) + X d ( X − 1 ) = 0 得到 行列式 d ∣ X ∣ = tr ( X # d X ) ,其中 X # 是X的伴随矩阵在 X 可逆时,有 d ∣ X ∣ = ∣ X ∣ tr ( X − 1 d X ) 证明参考 行列式微分形式的推导 - 知乎open in new window 伴随矩阵的元素满足 X ji ∗ = A ij = ( − 1 ) i + j ∣ ∣ X ^ ij ∣ ∣ ,其中 X ^ ij 为矩阵 X 删掉第 i 行和第 j 列后的剩余矩阵。需要注意,由于伴随矩阵按照列布局代数余子式,因此 X ij ∗ 和A ij 的下标颠倒 假定算符 + ij 代表对矩阵位置 (i, j) 中的元素增加某个量,根据偏导数定义有: ∂ X ij ∂ ∣ X ∣ = ε → 0 lim ε ∣ X + ij ε ∣ − ∣ X ∣ = ε → 0 lim ε ( X ij + ε ) A ij + ∑ k = j X ik A ik − ∑ k X ik A ik = ε → 0 lim ε ( X ij + ε ) A ij − X ij A ij = ε → 0 lim ε ε A ij = A ij = X ji ∗
- 逐元素乘法
- $\mathrm{d}\left( X\odot Y \right) =\mathrm{d}X\odot Y+X\odot \mathrm{d}Y$
- 其中 $\odot$ 代表尺寸相同的矩阵逐元素相乘
- 逐元素函数
- $\mathrm{d}\sigma \left( X \right) =\sigma '\left( X \right) \odot \mathrm{d}X$,其中 $\sigma \left( X \right) =\left[ \sigma \left( X_{ij} \right) \right]$ 是逐元素标量函数运算
标量对矩阵的求导 根据上面的思考,我们已经得到了 矩阵微分和求导的关系 ^a57269 df 的微分形式 ^b44308
从而下面需要做的就是得到右边的结果,这里只需要一些简单的迹技巧:
标量套上迹: a = tr ( a ) 转置: tr ( A T ) = tr ( A ) 线性: tr ( A ± B ) = tr ( A ) ± tr ( B ) 矩阵乘法交换: tr ( A B ) = tr ( B A ) ,其中 A 和 B T 尺寸相同。 矩阵乘法/逐元素乘法交换: tr ( A T ( B ⊙ C ) ) = tr ( ( A ⊙ B ) T C ) ,其中两侧的元素都等于 ∑ i , j A ij B ij C ij 通过上面的迹技巧,可以将 df 转换为 tr ( A T d X ) 的形式,那么 A 就是需要求的 ∂ X ∂ f
需要注意这里还有最后一点需要注意,即 复合函数 。在这里不能直接沿用微积分中的标量求导的链式法则,因为矩阵对矩阵的导数目前还没有定义。
这里从微分的角度入手建立复合法则。基本原则是:首先写出 d f = tr ( ∂ Y ∂ f T d Y ) ,然后将 d Y 写成 d X 进行带入并使用迹技巧将其他项交换到 d X 左侧,从而解决问题。
一个常见的情形是 Y = A XB ,此时:
d f = tr ( ∂ Y ∂ f T d Y ) = tr ( ∂ Y ∂ f T A d XB ) = tr ( B ∂ Y ∂ f T A d X ) = tr ( ( A T ∂ Y ∂ f B T ) T d X )
从而 ∂ X ∂ f = A T ∂ Y ∂ f B T 。注意这里 d Y = d A XB + A d XB + A X d B = A d XB 。
下面演示一些算例。
Case 1 problem
f = a T X b ,其中a是mx1的列向量,X是mxn的矩阵,b是nx1的列向量。
d f = d a T X b + a T d X b + a T X d b = a T d X b ⇒ d f = tr ( d f ) = tr ( a T d X b ) = tr ( ( a b T ) T d X )
因此求导结果为:
∂ X ∂ f = a b T
Case 2 problem
f = a T exp ( X b ) ,其中a是mx1的列向量,X是mxn的矩阵,b是nx1的列向量。exp表示逐元素求指数。
d f = a T ( exp ( X b ) ⊙ d ( X b ) ) d f = tr ( a T ( exp ( X b ) ⊙ d ( X b ) ) ) = tr ( ( a ⊙ exp ( X b ) ) T d ( X b ) ) = tr ( b ( a ⊙ exp ( X b ) ) T d ( X ) ) = tr ( ( a ⊙ exp ( X b ) b T ) T d ( X ) )
这表明
∂ X ∂ f = a ⊙ exp ( X b ) b T
Case 3 problem
f = tr ( Y T M Y ) , Y = σ ( W X ) ,其中W是lxm矩阵,X是mxn矩阵,Y是lxn矩阵,M是lxl对称矩阵,σ是逐元素函数。
d f = tr ( ( d Y ) T M Y + Y T M d Y ) = tr ( ( d Y ) T M Y ) + tr ( Y T M d Y ) = tr ( Y T M T d Y ) + tr ( Y T M d Y ) = tr ( Y T ( M + M T ) d Y )
这表明 ∂ Y ∂ f = ( M + M T ) Y = 2 M Y
另外,有:
d f = tr ( ∂ Y ∂ f T d Y ) = tr ( ∂ Y ∂ f T ( σ ′ ( W X ) ⊙ ( W d X ) ) ) = tr ( ( ∂ Y ∂ f ⊙ σ ′ ( W X ) ) T W d X )
从而有:
∂ X ∂ f = W T ( ∂ Y ∂ f ⊙ σ ′ ( W X ) ) = W T ( 2 M σ ( W X ) ⊙ σ ′ ( W X ) )
Case 4- 线性回归 problem
l = ∥ Xw − y ∥ 2 ,求w的最小二乘估计,也就是求∂ w ∂ l 的零点。其中y是mx1的列向量,X是mxn矩阵,w是nx1列向量。
l = ∥ Xw − y ∥ 2 = ( Xw − y ) T ( Xw − y ) d l = ( X d w ) T ( Xw − y ) + ( Xw − y ) T X d w = 2 ( Xw − y ) T X d w
从而
∂ w ∂ l = 2 X T ( Xw − y )
因此最小二乘估计满足:
∂ w ∂ l = 2 X T ( Xw − y ) = 0 w = ( X T X ) − 1 X T y
case5- 方差的最大似然估计 problem
样本x 1 , ⋯ , x n ∼ N ( μ , σ ) ,求方差σ 的最大似然估计,即:l = log ( ∣ σ ∣ ) + N 1 ∑ i ( x i − x ˉ ) T σ − 1 ( x i − x ˉ ) , 求∂ σ ∂ l 的零点。其中xi是mx1列向量,x ˉ = N 1 ∑ i x i 是样本均值,σ 是mxm对称正定矩阵,l是标量。
首先计算 d log ( ∣ σ ∣ ) = ∣ σ ∣ − 1 d ∣ σ ∣ = tr ( σ − 1 d σ ) ,这里使用了前面 det 的微分形式。 对第二项有,
d ( N 1 ∑ i ( x i − x ˉ ) T σ − 1 ( x i − x ˉ ) ) = N 1 ∑ i ( x i − x ˉ ) T d σ − 1 ( x i − x ˉ ) = N 1 ∑ i ( x i − x ˉ ) T ( − σ − 1 ( d σ ) σ − 1 ) ( x i − x ˉ ) = − tr ( N 1 ∑ i ( x i − x ˉ ) T ( σ − 1 ( d σ ) σ − 1 ) ( x i − x ˉ ) ) = − N 1 ∑ i tr ( ( x i − x ˉ ) T ( σ − 1 ( d σ ) σ − 1 ) ( x i − x ˉ ) ) = − N 1 ∑ i tr ( σ − 1 ( x i − x ˉ ) ( x i − x ˉ ) T σ − 1 ( d σ ) ) = − tr ( σ − 1 S σ − 1 d σ )
其中 S = N 1 ∑ i ( x i − x ˉ ) ( x i − x ˉ ) T 是样本方差矩阵。因此综上可以得到:
∂ σ ∂ l = ( σ − 1 − σ − 1 S σ − 1 ) T
因此零点满足 σ = S ,也即其最大似然估计。
case6- 多元 Logistic 回归 problem
l = − y T log ( soft max ( W x ) ) ,其中y是除了一个元素为1外其他元素为0的mx1列向量,W是mxn矩阵,x是nx1列向量。soft max ( a ) = 1 T e x p ( a ) e x p ( a ) 。
方法 1
l = − y T log ( soft max ( W x ) ) = − y T ( log ( exp ( W x ) ) − 1 log ( 1 T exp ( W x ) ) ) = − y T W x + log ( 1 T exp ( W x ) )
进一步进行微分:
d l = − y T d W x + 1 T e x p ( W x ) 1 T ( e x p ( W x ) ⊙ d ( W x ) ) = tr ( − y T d W x + 1 T e x p ( W x ) 1 T ( e x p ( W x ) ⊙ d ( W x ) ) ) = tr ( − y T d W x ) + 1 T e x p ( W x ) tr ( 1 T ( e x p ( W x ) ⊙ d ( W x ) ) ) = tr ( − y T d W x ) + 1 T e x p ( W x ) tr ( e x p ( W x ) T d W x ) = tr ( − y T d W x + 1 T e x p ( W x ) e x p ( W x ) T d W x ) = tr ( − y T d W x + soft max ( W x ) T d W x ) = tr ( x ( soft max ( W x ) − y ) T d W )
因此 ∂ W ∂ l = ( soft max ( W x ) − y ) x T
方法 2
定义 a = W x ,那么 l = − y T log ( soft max ( a ) )
类似上面思路求出 ∂ a ∂ l = soft max ( a ) − y ,那么利用复合法则,有:
d l = tr ( ∂ a ∂ l T d a ) = tr ( ∂ a ∂ l T d W x ) = tr ( x ∂ a ∂ l T d W )
从而可以得到:
∂ W ∂ l = ∂ a ∂ l x T
case7- 二层神经网络 problem
l = − y T log ( soft max ( W 2 σ ( W 1 x ) ) ) ,求∂ W 1 ∂ l , ∂ W 2 ∂ l 。其中y是一个除一个元素为1以外其余元素全为0的mx1列向量,W2是mxp矩阵,W1是pxn矩阵,soft max ( a ) = 1 T e x p ( a ) e x p ( a ) ,σ是逐元素sigmoid函数σ ( a ) = 1 + e x p ( − a ) 1
定义 a 1 = W 1 x , h 1 = σ ( a 1 ) , a 2 = W 2 h 1 ,那么有
l = − y T log ( soft max ( a 2 ) ) , ∂ a 2 ∂ l = soft max ( a 2 ) − y ⇒ d l = tr ( ∂ a 2 ∂ l T d a 2 ) = tr ( ∂ a 2 ∂ l T d W 2 h 1 ) + d l 2 tr ( ∂ a 2 ∂ l T W 2 d h 1 ) ⇒ ∂ W 2 ∂ l = ∂ a 2 ∂ l h 1 T , ∂ h 1 ∂ l = W 2 T ∂ a 2 ∂ l
对第二项进一步分析:
d l 2 = tr ( ∂ h 1 ∂ l T d h 1 ) = tr ( ∂ h 1 ∂ l T ( σ ′ ( a 1 ) ⊙ d a 1 ) ) = tr ( ( ∂ h 1 ∂ l ⊙ σ ′ ( a 1 ) ) T d a 1 ) ⇒ ∂ a 1 ∂ l 2 = ∂ h 1 ∂ l ⊙ σ ′ ( a 1 )
进一步:
d l 2 = tr ( ∂ a 1 ∂ l T d a 1 ) = tr ( ∂ a 1 ∂ l T d W 1 x ) ⇒ ∂ W 1 ∂ l = ∂ a 1 ∂ l x T
problem
对问题可以更进一步,样本满足:
( x 1 , y 1 ) , ⋯ , ( x N , y N ) , l = − ∑ i y i T log ( soft max ( W 2 σ ( W 1 x i + b 1 ) + b 2 ) )
其中b1是px1列向量,b2是mx1列向量
类似上面思路,定义 a 1 , i = W 1 x i + b 1 , h 1 , i = σ ( a i , i ) , a 2 , i = W 2 h 1 , i + b 2
从而问题转换为:
l = − i ∑ y i T log ( soft max ( a 2 , i ) ) , ∂ a 2 , i ∂ l = soft max ( a 2 , i ) − y i
类似使用复合法则,有:
d l = tr ( ∑ i ∂ a 2 , i ∂ l T d a 2 , i ) = tr ( ∑ i ∂ a 2 , i ∂ l T d W 2 h 1 , i ) + d l 2 tr ( i ∑ ∂ a 2 , i ∂ l T W 2 d h 1 , i ) + tr ( ∑ i ∂ a 2 , i ∂ l T d b 2 )
从第一项有:
∂ W 2 ∂ l = i ∑ ∂ a 2 , i ∂ l h 1 , i T
从第二项有:
∂ h 1 , i ∂ l = W 2 T ∂ a 2 , i ∂ l
从第三项有:
∂ b 2 ∂ l = i ∑ ∂ a 2 , i ∂ l
对第二项进一步使用复合法则有:
∂ a 1 , i ∂ l = ∂ h 1 , i ∂ l ⊙ σ ′ ( a 1 , i )
d l 2 = tr ( ∑ i ∂ a 1 , i ∂ l T d a 1 , i ) = tr ( ∑ i ∂ a 1 , i ∂ l T d W 1 x i ) + tr ( ∑ i ∂ a 1 , i ∂ l T d b 1 ) ⇒ ∂ W 1 ∂ l 2 = ∑ i ∂ a 1 , i ∂ l x i T , ∂ b 1 ∂ l = ∑ i ∂ a 1 , i ∂ l
另一个求解思路如下:
使用矩阵表示 N 个样本来简化形式,定义
X = [ x 1 , ⋯ , x N ] , A 1 = [ a 1 , 1 , ⋯ , a 1 , N ] = W 1 X + b 1 1 T H 1 = [ h 1 , 1 , ⋯ , h 1 , N ] = σ ( A 1 ) , A 2 = W 2 H 1 + b 2 1 T
注意上面的 1 是用来扩展维度的。
类似上面的思路求出:
∂ A 2 ∂ l = [ soft max ( a 2 , 1 ) − y 1 , ⋯ soft max ( a 2 , N ) − y N ]
使用复合法则有:
d l = tr ( ∂ A 2 ∂ l T d A 2 ) = tr ( ∂ A 2 ∂ l T d W 2 H 1 ) + d l 2 tr ( ∂ A 2 ∂ l T W 2 d H 1 ) + tr ( ∂ A 2 ∂ l T d b 2 1 T )
从而得到了:
∂ W 2 ∂ l = ∂ A 2 ∂ l H 1 T , ∂ H 1 ∂ l = W 2 T ∂ A 2 ∂ l , ∂ b 2 ∂ l = ∂ A 2 ∂ l 1
对第二项使用复合法则继续有:
d l 2 = tr ( ∂ A 1 ∂ l T d A 1 ) = tr ( ∂ A 1 ∂ l T d W 1 X ) + tr ( ∂ A 1 ∂ l T d b 1 1 T ) ⇒ ∂ W 1 ∂ l 2 = ∂ A 1 ∂ l 2 X T , ∂ b 1 ∂ l 2 = ∂ A 1 ∂ l 2 1
矩阵对矩阵的求导 上面分析了标量对矩阵的导数,下面来分析下矩阵对矩阵的求导。
首先分析下矩阵对矩阵的导数应该有怎么样的定义:
矩阵 F(pxq) 对矩阵 X(mxn) 的导数应该有所有 mnpq 个偏导数 ∂ X ij ∂ F k l 导数和微分之间应该有类似上面标量微分的关系 根据上面的思考,我们首先定义向量 f(px1) 对向量 x(mx1) 的导数:
∂ x ∂ f = ⎝ ⎛ ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 1 ⋮ ∂ x m ∂ f 1 ∂ x 1 ∂ f 2 ∂ x 2 ∂ f 2 ⋮ ∂ x m ∂ f 2 ⋯ ⋯ ⋱ ⋯ ∂ x 1 ∂ f p ∂ x 2 ∂ f p ⋮ ∂ x m ∂ f ⎠ ⎞
其中结果是一个 mxp 的矩阵,满足 d f = ∂ x ∂ f T d x 。
接下来定义矩阵的 (按列优先 ) 向量化,即:
vec ( X ) = [ X 11 , ⋯ , X m 1 , X 12 , ⋯ , X m 2 , ⋯ , X 1 n , ⋯ , X mn ] T
definition
定义矩阵F对矩阵X的导数满足:
∂ X ∂ F = ∂ vec ( X ) ∂ vec ( F ) ( dim : mn × pq )
微分和导数之间具有联系:
vec ( d F ) = ∂ X ∂ F T vec ( d X )
note
按照这个定义,标量f对矩阵X(mxn)的矩阵是mnx1的向量,和上面标量的定义之间存在矛盾,不过这里比较容易相互转换。为了避免混淆,这里使用∇ X f 表示上面定义的mxn矩阵,从而有:∂ X ∂ f = vec ( ∇ X f ) 标量对矩阵的二阶导数,称为Hessian矩阵,定义为: ∇ X 2 f = ∂ X 2 ∂ 2 f = ∂ X ∂ ∇ X f ( dim : mn × mn )
是对称矩阵,对向量∂ X ∂ f 或者矩阵∇ X f 求导都可以得到结果,但从矩阵出发更加简单
∂ X ∂ F = ∂ X ∂ vec ( F ) = ∂ vec ( X ) ∂ F = ∂ vec ( X ) ∂ vec ( F ) ,从而导致求导时矩阵被向量化,破坏了矩阵的整体结构,结果形式变得复杂;但好处是多元微积分中关于梯度、Hessian矩阵的结论可以沿用过来,只需要矩阵向量化即可。比如优化问题中牛顿法的更新Δ X ,满足∂ X ∂ F = ∂ X ∂ vec ( F ) = ∂ vec ( X ) ∂ F = ∂ vec ( X ) ∂ vec ( F )
∂ X ∂ F = [ ∂ X ∂ F k l ] ( dim : m p × n q ) ∂ X ∂ F = [ ∂ X ij ∂ F ] ( dim : m p × n q )
这两种定义可以兼容上面标量对矩阵导数的定义,但是微分和导数的联系 (d F 等于导数中逐个mxn子块分别与dX做内积)意义不够简明,不便于计算和应用。
在资料中,有分子布局和分母布局两种定义,向量对向量的导数的排布有所不同,这里使用的是分母布局 ,机器学习和优化中的梯度矩阵采用此定义。而控制论等领域中的Jacobian矩阵采用分子布局 。 ∂ x ∂ f = ⎝ ⎛ ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 1 ⋮ ∂ x m ∂ f 1 ∂ x 1 ∂ f 2 ∂ x 2 ∂ f 2 ⋮ ∂ x m ∂ f 2 ⋯ ⋯ ⋱ ⋯ ∂ x 1 ∂ f p ∂ x 2 ∂ f p ⋮ ∂ x m ∂ f ⎠ ⎞
- 分子布局:
∂ x ∂ f = ⎝ ⎛ ∂ x 1 ∂ f 1 ∂ x 1 ∂ f 2 ⋮ ∂ x 1 ∂ f n ∂ x 2 ∂ f 1 ∂ x 2 ∂ f 2 ⋮ ∂ x 2 ∂ f n ⋯ ⋯ ⋮ ⋯ ∂ x m ∂ f 1 ∂ x m ∂ f 2 ⋮ ∂ x m ∂ f n ⎠ ⎞
- 分子布局下,相应的导数和微分的关系转变成了
d f = ∂ x ∂ f d x , ∂ X ∂ F = ∂ vec ( X ) ∂ vec ( F ) , vec ( d F ) = ∂ X ∂ F vec ( d X )
- 这两者互为转置,并无大的区别
类似标量求导的思路,现在建立运算法则。
依然使用导数和微分的联系,vec ( d F ) = ∂ X ∂ F T vec ( d X ) 。求微分的思路和上面相同,但是需要一些向量化的技巧。
线性:vec ( A + B ) = vec ( A ) + vec ( B ) 矩阵乘法: vec ( A XB ) = ( B T ⊗ A ) vec ( X ) 其中 ⊗ 代表 kronecker 积,A(mxn) 和 B(pxq) 的 Kronecker 积为: A ⊗ B = [ A ij B ] ( dim : m p × n q )
- 此式证明见张贤达《矩阵分析与应用》第 107-108 页。
转置:vec ( A T ) = K mn vec ( A ) ,其中 A 是 mxn 矩阵 Kmn(mnxmn) 是交换矩阵 (commutation matrix),将按列优先的向量化变为按行优先的向量化 K 22 = ⎝ ⎛ 1 1 1 1 ⎠ ⎞ , vec ( A T ) = ⎝ ⎛ A 11 A 12 A 21 A 22 ⎠ ⎞ , vec ( A ) = ⎝ ⎛ A 11 A 21 A 12 A 22 ⎠ ⎞
逐元素乘法:vec ( A ⊙ X ) = diag ( A ) vec ( X ) diag ( A ) 是使用 A 的元素 (按列优先) 排成的对角阵 相比于标量的导数,矩阵的导数显得更加复杂,这也是应该的,因为我们将一个本来是 4 维的向量投射到 2 维来进行运算,能保持运算就不错了:(
此外,考虑复合的情况。假设已知 ∂ Y ∂ F ,Y 是 X 的函数,从导数和微分的联系入手有:
vec ( d F ) = ∂ Y ∂ F T vec ( d Y ) = ∂ Y ∂ F T ∂ X ∂ Y T vec ( d X ) ⇒ ∂ X ∂ F = ∂ X ∂ Y ∂ Y ∂ F
注意上面式子是依赖于选取的分子/分母形式的,分子布局的应为下面形式:
vec ( d F ) = ∂ Y ∂ F vec ( d Y ) = ∂ Y ∂ F ∂ X ∂ Y vec ( d X ) ⇒ ∂ X ∂ F = ∂ Y ∂ F ∂ X ∂ Y
此外,这里有一些关系 Kronecker 积的恒等式:
( A ⊗ B ) T = A T ⊗ B T vec ( a b T ) = b ⊗ a ( A ⊗ B ) ( C ⊗ D ) = ( A C ) ⊗ ( B D ) 这可以通过对 F = D T B T X A C 求导证明 直接求导有:∂ X ∂ F = ( A C ) ⊗ ( B D ) 另一方面: Y = B T X A ⇒ ∂ Y ∂ F = C ⊗ D ∂ X ∂ Y = A ⊗ B ⇒ ∂ X ∂ F = ( A ⊗ B ) ( C ⊗ D )
K mn = K nm T , K mn K nm = I K p m ( A ⊗ B ) K n q = B ⊗ A ,其中 A 是 mxn 矩阵,B 是 pxq 矩阵 vec ( A X B T ) = ( B ⊗ A ) vec ( X ) vec ( A X B T ) = K p m vec ( B X T A T ) = K p m ( A ⊗ B ) K n q vec ( X )
case1 problem
F = A X ,其中X是mxn矩阵,求∂ X ∂ F
d F = A d X ⇒ vec ( d F ) = vec ( A d X ) ⇒ vec ( d F ) = ( I n ⊗ A ) vec ( d X ) ⇒ d F = ( I n ⊗ A ) T
如果 X 退化为向量,那么有:
f = A x , d f = ∂ x ∂ f T d x ⇒ ∂ x ∂ f = A T
case2 problem
f = log ∣ X ∣ ,X是nxn矩阵,求∇ X f 和∇ X 2 f
使用上面标量计算的结果,∇ X f = X − 1 T 。为了计算 ∇ X 2 f ,首先考虑微分:
d ∇ X f = − ( X − 1 d X X − 1 ) T ⇒ vec ( d ∇ X f ) = − K nn vec ( X − 1 d X X − 1 ) = − K nn ( X − 1 T ⊗ X − 1 ) vec ( d X )
从而结果为:
∇ X 2 f = − K nn ( X − 1 T ⊗ X − 1 )
这里注意上面是一个对称矩阵,所以消掉了转置。
当 X 是对称矩阵时,有:
∇ X 2 f = − ( X − 1 ⊗ X − 1 )
case3 problem
F = A exp ( XB ) ,A是lxm矩阵,X是mxn矩阵,B是nxp矩阵,exp是逐元素函数。
d F = A ( exp ( XB ) ⊙ ( d XB ) ) ⇒ vec ( d F ) = vec ( A ( exp ( XB ) ⊙ ( d XB ) ) ) = ( I p ⊗ A ) vec ( exp ( XB ) ⊙ ( d XB ) ) = ( I p ⊗ A ) diag ( exp ( XB ) ) vec ( d XB ) = ( I p ⊗ A ) diag ( exp ( XB ) ) ( B T ⊗ I m ) vec ( d X )
从而有:
∂ X ∂ F = ( B ⊗ I m ) diag ( exp ( XB ) ) ( I p ⊗ A T )
case4- 一元 Logistic 回归 problem
l = − y x T w + log ( 1 + exp ( x T w ) ) ,求∇ w l , ∇ w 2 l
使用上面标量乘法的结论,有 ∇ w l = x ( σ ( x T w ) − y ) , σ ( a ) = 1 + e x p ( a ) e x p ( a )
为了求 ∇ w 2 l ,首先考虑微分
d ∇ w l = d ( x ( σ ( x T w ) − y ) ) = x σ ′ ( x T w ) x T d w σ ′ ( a ) = ( 1 + e x p ( a ) ) 2 e x p ( a )
按照导数和微分的关系,得到:
∇ w 2 l = x σ ′ ( x T w ) x T
推广问题:
problem
( x 1 , y 1 ) , ⋯ , ( x N , y N ) , l = ∑ i ( − y i x i T w + log ( 1 + exp ( x i T w ) ) ) ,求∇ w l , ∇ w 2 l
解法 1:先对每个样本求导,然后相加
解法 2:定义矩阵
X = ⎝ ⎛ x 1 T ⋮ x N T ⎠ ⎞ , y = ⎝ ⎛ y 1 ⋮ y N ⎠ ⎞
将 l 写成矩阵形式有 l = − y T Xw + 1 T log ( 1 + exp ( Xw ) ) 从而有:
∇ w l = X T ( σ ( Xw ) − y ) d ∇ w l = X T ( σ ′ ( Xw ) ⊙ ( X d w ) ) = X T diag ( σ ′ ( Xw ) ) X d w ⇒ ∇ w 2 l = X T diag ( σ ′ ( Xw ) ) X
case5- 多元 Logistic 回归 problem
l = − y T log ( soft max ( W x ) ) = − y T W x + log ( 1 T exp ( W x ) ) ,求∇ W l , ∇ W 2 l 其中y是一个除一个元素为1外其它元素为0的mx1列向量,W是mxn矩阵,x是nx1列向量
前面标量求导已经有
∇ W l = ( soft max ( W x ) − y ) x T
进一步求
d ∇ W l = ( 1 T e x p ( a ) e x p ( a ) ⊙ d a − ( 1 T e x p ( a ) ) 2 e x p ( a ) ( 1 T ( e x p ( a ) ⊙ d a ) ) ) x T = ( 1 T e x p ( a ) diag ( e x p ( a ) ) − ( 1 T e x p ( a ) ) 2 e x p ( a ) e x p ( a ) T ) d a x T = ( diag ( soft max ( a ) ) − soft max ( a ) soft max ( a ) T ) d a x T
注意这里化简去掉了逐元素乘法。 第一项 exp ( a ) ⊙ d a = diag ( exp ( a ) ) d a 第二项 1 T ( exp ( a ) ⊙ d a ) = exp ( a ) T d a
进一步有:
D ( a ) = diag ( soft max ( a ) ) − soft max ( a ) soft max ( a ) T d ∇ W l = D ( a ) d a x T = D ( W x ) d W x x T ⇒ ∇ W 2 l = ( x x T ) ⊗ D ( W x )
最后,进行一个总结。从 整体 出发的矩阵求导的技术,重点在于联系微分和导数。通过建立基本的微分形式和运算规则,可以得到想要求的导数结果。
对于标量对矩阵的微分,有 d f = tr ( ∇ X T f d X ) 对于矩阵对矩阵的微分,有 vec ( d F ) = ∂ X ∂ F T vec ( d X ) 矩阵求导例子 标量求导 d x d ( u T v ) = d x d ( u T ) v + d x d ( v T ) u
矢量求导 矩阵求导 参考