【机器学习中的矩阵求导】(三)矩阵向量求导(微分法)
学习总结(1)用微分法,要熟练矩阵微分和迹函数的性质。(2)有一些场景,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。如果我们可以利用一些常用的简单求导结果,再使用链式求导法则,则会非常的方便。(3)本task是求解标量对向量的求导,以及标量对矩阵的求导。注意此处统一规定:使用分母布局。文章目录学习总结一、矩阵微分二、矩阵微分的性质三、使用微分法求解矩阵向量求导
学习总结
(1)用微分法,要熟练矩阵微分和迹函数的性质。由于微分法使用了迹函数的技巧,那么迹函数对向量矩阵求导这一大类问题,使用微分法是最简单直接的。
(2)有一些场景,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。如果我们可以利用一些常用的简单求导结果,再使用链式求导法则(下个task),则会非常的方便。
(3)本task是求解标量对向量的求导,以及标量对矩阵的求导。注意此处统一规定:使用分母布局(维度和分母一致)。
机器学习算法中一般会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧,后面统一以分子布局的雅克比矩阵为主。
一、矩阵微分
我们熟悉的标量的微分:
d f = f ′ ( x ) d x d f=f^{\prime}(x) d x df=f′(x)dx如果是多变量情况:
d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ) T d x d f=\sum_{i=1}^{n} \frac{\partial f}{\partial x_{i}} d x_{i}=\left(\frac{\partial f}{\partial \mathbf{x}}\right)^{T} d \mathbf{x} df=i=1∑n∂xi∂fdxi=(∂x∂f)Tdx
从上面可以发现:标量对向量的求导,和向量的微分,之间存在一个转置的一项。
推广到矩阵微分:
d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = tr ( ( ∂ f ∂ X ) T d X ) d f=\sum_{i=1}^{m} \sum_{j=1}^{n} \frac{\partial f}{\partial X_{i j}} d X_{i j}=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^{T} d \mathbf{X}\right) df=i=1∑mj=1∑n∂Xij∂fdXij=tr((∂X∂f)TdX)
注意:
- 上面矩阵微分的第二步,用了【迹函数等于主对角线的和】性质: tr ( A T B ) = ∑ i , j A i j B i j \operatorname{tr}\left(A^{T} B\right)=\sum_{i, j} A_{i j} B_{i j} tr(ATB)=i,j∑AijBij
- 矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即: d f = tr ( ( ∂ f ∂ X ) T d X ) d f = tr ( ( ∂ f ∂ x ) T d x ) d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^{T} d \mathbf{X}\right) \quad d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{x}}\right)^{T} d \mathbf{x}\right) df=tr((∂X∂f)TdX)df=tr((∂x∂f)Tdx)
二、矩阵微分的性质
- 微分加法: d ( X + Y ) = d X + d Y , d ( X − Y ) = d X − d Y d(X+Y)=d X+d Y, d(X-Y)=d X-d Y d(X+Y)=dX+dY,d(X−Y)=dX−dY
- 微分乘法: d ( X Y ) = ( d X ) Y + X ( d Y ) d(X Y)=(d X) Y+X(d Y) d(XY)=(dX)Y+X(dY)
- 微分转置: d ( X T ) = ( d X ) T d\left(X^{T}\right)=(d X)^{T} d(XT)=(dX)T
- 微分的迹: d tr ( X ) = tr ( d X ) d \operatorname{tr}(X)=\operatorname{tr}(d X) dtr(X)=tr(dX)
- 微分哈达玛积: d ( X ⊙ Y ) = X ⊙ d Y + d X ⊙ Y d(X \odot Y)=X \odot d Y+d X \odot Y d(X⊙Y)=X⊙dY+dX⊙Y
- 逐元素求导: d σ ( X ) = σ ′ ( X ) ⊙ d X d \sigma(X)=\sigma^{\prime}(X) \odot d X dσ(X)=σ′(X)⊙dX
- 逆矩阵微分: d X − 1 = − X − 1 ( d X ) X − 1 d X^{-1}=-X^{-1} (d X) X^{-1} dX−1=−X−1(dX)X−1
- 行列式微分: d ∣ X ∣ = ∣ X ∣ tr ( X − 1 d X ) d|X|=|X| \operatorname{tr}\left(X^{-1} d X\right) d∣X∣=∣X∣tr(X−1dX)
三、使用微分法求解矩阵向量求导
3.1 迹函数的技巧
- 标量的迹等于自己: tr ( x ) = x \operatorname{tr}(x)=x tr(x)=x;转置则迹不变
- 交换律: tr ( A B ) = tr ( B A ) \operatorname{tr}(A B)=\operatorname{tr}(B A) tr(AB)=tr(BA),需要满足 A A A、 B T B^T BT同维度
- 加减法: tr ( X + Y ) = tr ( X ) + tr ( Y ) , tr ( X − Y ) = tr ( X ) − tr ( Y ) \operatorname{tr}(X+Y)=\operatorname{tr}(X)+\operatorname{tr}(Y), \operatorname{tr}(X-Y)=\operatorname{tr}(X)-\operatorname{tr}(Y) tr(X+Y)=tr(X)+tr(Y),tr(X−Y)=tr(X)−tr(Y)
- 矩阵乘法和迹交换: tr ( ( A ⊙ B ) T C ) = tr ( A T ( B ⊙ C ) ) \operatorname{tr}\left((A \odot B)^{T} C\right)=\operatorname{tr}\left(A^{T}(B \odot C)\right) tr((A⊙B)TC)=tr(AT(B⊙C)),注意A,B,C的维度要相同
3.2 栗子1
看上一次定义法的求导问题:
y = a T X b , ∂ y ∂ X y=\mathbf{a}^{T} \mathbf{X} \mathbf{b}, \frac{\partial y}{\partial \mathbf{X}} y=aTXb,∂X∂y
(1)用微分乘法对 f f f求微分,得到: d y = d a T X b + a T d X b + a T X d b = a T d X b d y=d \mathbf{a}^{T} \mathbf{X} \mathbf{b}+\mathbf{a}^{T} d \mathbf{X} \mathbf{b}+\mathbf{a}^{T} \mathbf{X} d \mathbf{b}=\mathbf{a}^{T} d \mathbf{X} \mathbf{b} dy=daTXb+aTdXb+aTXdb=aTdXb
(2)两边套上迹函数,其中第一步到第二步用到了3.1迹函数的性质1,第三步到第四步用到了性质2(交换律):
d y = tr ( d y ) = tr ( a T d X b ) = tr ( b a T d X ) d y=\operatorname{tr}(d y)=\operatorname{tr}\left(\mathbf{a}^{T} d \mathbf{X} \mathbf{b}\right)=\operatorname{tr}\left(\mathbf{b} \mathbf{a}^{T} d \mathbf{X}\right) dy=tr(dy)=tr(aTdXb)=tr(baTdX)
(3)根据我们矩阵导数和微分的定义,迹函数里面在 d X dX dX左边的部分 b a T \mathbf{b}\mathbf{a}^T baT,加上一个转置即为我们要求的导数,即:
∂ f ∂ X = ( b a T ) T = a b T \frac{\partial f}{\partial \mathbf{X}}=\left(\mathbf{b a}^{T}\right)^{T}=a b^{T} ∂X∂f=(baT)T=abT
小结:以上就是微分法的基本流程,先求微分再做迹函数变换,最后得到求导结果。比起定义法,我们现在不需要去对矩阵中的单个标量进行求导了。
3.3 栗子2
y = a T exp ( X b ) , ∂ y ∂ X y=\mathbf{a}^{T} \exp (\mathbf{X} \mathbf{b}), \frac{\partial y}{\partial \mathbf{X}} y=aTexp(Xb),∂X∂y
d y = tr ( d y ) = tr ( a T dexp ( X b ) ) = 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 ) d y=\operatorname{tr}(d y) \\ =\operatorname{tr}\left(\mathbf{a}^{T} \operatorname{dexp}(\mathbf{X b})\right) \\ =\operatorname{tr}\left(\mathbf{a}^{T}(\exp (\mathbf{X b}) \odot d(\mathbf{X} \mathbf{b}))\right) \\ =\operatorname{tr}\left((\mathbf{a} \odot \exp (\mathbf{X} \mathbf{b}))^{T} d \mathbf{X} \mathbf{b}\right) \\ =\operatorname{tr}\left(\mathbf{b}(\mathbf{a} \odot \exp (\mathbf{X} \mathbf{b}))^{T} d \mathbf{X}\right) dy=tr(dy)=tr(aTdexp(Xb))=tr(aT(exp(Xb)⊙d(Xb)))=tr((a⊙exp(Xb))TdXb)=tr(b(a⊙exp(Xb))TdX)
第三到第四步,用了迹函数的矩阵乘法和迹交换(性质4)。求导结果为:
∂ y ∂ X = ( a ⊙ exp ( X b ) ) b T \frac{\partial y}{\partial \mathbf{X}}=(\mathbf{a} \odot \exp (\mathbf{X} \mathbf{b})) b^{T} ∂X∂y=(a⊙exp(Xb))bT
四、迹函数对向量矩阵求导
常见的迹函数的求导过程:
(1)直接根据矩阵微分的定义:
∂ t r ( A B ) ∂ A = B T , ∂ t r ( A B ) ∂ B = A T \frac{\partial t r(A B)}{\partial A}=B^{T}, \frac{\partial t r(A B)}{\partial B}=A^{T} ∂A∂tr(AB)=BT,∂B∂tr(AB)=AT
(2)
∂ t r ( W T A W ) ∂ W \frac{\partial t r\left(W^{T} A W\right)}{\partial W} ∂W∂tr(WTAW)
d ( tr ( W T A W ) ) = tr ( d W T A W + W T A d W ) = tr ( d W T A W ) + tr ( W T A d W ) = tr ( ( d W ) T A W ) + tr ( W T A d W ) = tr ( W T A T d W ) + tr ( W T A d W ) = tr ( W T ( A + A T ) d W ) \begin{gathered} d\left(\operatorname{tr}\left(W^{T} A W\right)\right)=\operatorname{tr}\left(d W^{T} A W+W^{T} A d W\right) \\ =\operatorname{tr}\left(d W^{T} A W\right)+\operatorname{tr}\left(W^{T} A d W\right) \\ =\operatorname{tr}\left((d W)^{T} A W\right)+\operatorname{tr}\left(W^{T} A d W\right) \\ =\operatorname{tr}\left(W^{T} A^{T} d W\right) \\ +\operatorname{tr}\left(W^{T} A d W\right)=\operatorname{tr}\left(W^{T}\left(A+A^{T}\right) d W\right) \end{gathered} d(tr(WTAW))=tr(dWTAW+WTAdW)=tr(dWTAW)+tr(WTAdW)=tr((dW)TAW)+tr(WTAdW)=tr(WTATdW)+tr(WTAdW)=tr(WT(A+AT)dW)
得到:
∂ tr ( W T A W ) ∂ W = ( A + A T ) W \frac{\partial \operatorname{tr}\left(W^{T} A W\right)}{\partial W}=\left(A+A^{T}\right) W ∂W∂tr(WTAW)=(A+AT)W
(3)复杂的迹函数求导:
∂ t r ( B T X T C X B ) ∂ X \frac{\partial t r\left(B^{T} X^{T} C X B\right)}{\partial X} ∂X∂tr(BTXTCXB)
d ( tr ( B T X T C X B ) ) = tr ( B T d X T C X B ) + tr ( B T X T C d X B ) = tr ( ( d X ) T C X B B T ) + tr ( B B T X T C d X ) = tr ( B B T X T C T d X ) + tr ( B B T X T C d X ) = tr ( ( B B T X T C T + B B T X T C ) d X ) \begin{gathered} d\left(\operatorname{tr}\left(B^{T} X^{T} C X B\right)\right) \\ =\operatorname{tr}\left(B^{T} d X^{T} C X B\right)+\operatorname{tr}\left(B^{T} X^{T} C d X B\right) \\ =\operatorname{tr}\left((d X)^{T} C X B B^{T}\right)+\operatorname{tr}\left(B B^{T} X^{T} C d X\right) \\ =\operatorname{tr}\left(B B^{T} X^{T} C^{T} d X\right) +\operatorname{tr}\left(B B^{T} X^{T} C d X\right) \\ =\operatorname{tr}\left(\left(B B^{T} X^{T} C^{T}+B B^{T} X^{T} C\right) d X\right) \end{gathered} d(tr(BTXTCXB))=tr(BTdXTCXB)+tr(BTXTCdXB)=tr((dX)TCXBBT)+tr(BBTXTCdX)=tr(BBTXTCTdX)+tr(BBTXTCdX)=tr((BBTXTCT+BBTXTC)dX)
得到:
∂ tr ( B T X T C X B ) ∂ X = ( C + C T ) X B B T \frac{\partial \operatorname{tr}\left(B^{T} X^{T} C X B\right)}{\partial X}=\left(C+C^{T}\right) X B B^{T} ∂X∂tr(BTXTCXB)=(C+CT)XBBT
Reference
(1)https://www.cnblogs.com/pinard/p/10791506.html
(2)矩阵求导知识点总结:https://www.cnblogs.com/gyhhaha/p/11782212.html
(3)wiki百科:https://en.wikipedia.org/wiki/Matrix_calculus
(4)矩阵求导与矩阵微分—中科院博士大佬
(5)矩阵求导术(上)
更多推荐


所有评论(0)