海贼王,我当定了! 蒙奇·D·路飞

矩阵求导

2019-06-23

说明

本文大部分内容翻译自Matrix calculus,部分结合自身的理解。

简单来说,矩阵求导就是分别将各元素进行求导,然后将求导的结果写成矩阵的形式(向量为矩阵特殊形式),根据写成的矩阵的排列方式,又分为分子布局和分母布局。

  • 分子布局:行数和分子相同的维度,列数和分母相同的维度。如列向量对列向量的导数为分子各元素分别对分母各元素的导数,然后将结果排列为矩阵,矩阵的行数为分子的行数,矩阵的列数为分母的行数
  • 分母布局:行数和分母相同的维度,列数和分子相同的维度。如列向量对列向量的导数为分子各元素分别对分母各元素的导数,然后将结果排列为矩阵,矩阵的行数为分母的行数,矩阵的列数为分子的行数
  • 混合布局:向量或者矩阵在分子时采用分子布局,向量或矩阵在分母时采用分母布局。

布局方式详细参见Layout conventions,不同的文章可能使用不同的布局方式,如在深度学习的领域中,如在优化算法中需要计算WαLW时,为了保证维度相容,就采用的是分母布局或混合布局。无需纠结,最终只是在求导结果中相差个转置,其实只要保证求导的结果矩阵维度相容,一般就没有问题,本文采用分子布局。

向量和矩阵之间,矩阵和矩阵之间的导数涉及到三维、四维张量,这里暂不考虑这种导数。

符号说明

我们使用M(n,m)表示包含nm列的nm实矩阵的空间,该空间中的一般矩阵用粗体大写字母表示,如A,X,Y等,

而若该矩阵属于M(n,1),即列向量,则用粗体小写字母表示,如a,x,y等,不做特别说明的话,向量默认为列向量,

特别地,M(1,1)空间中的元素为标量,用小些斜体字母表示,如a,x,y等。

通常使用字母表的前半部分(a,b,c,)用于表示常量,字母表的后半部分(x,y,z,)表示变量。

  • 标量a,b,c,d,e为常量,标量u,vxxX的函数
  • 向量a,b,c,d,e为常向量,向量u,vxxX的函数
  • 矩阵A,B,C,D,E为常矩阵,矩阵U,VxxX的函数

矩阵的转置:XT,矩阵的迹:tr(X),矩阵的行列式:det(X)|X|,矩阵的范数:||X||

向量求导定义

向量可以看作只有一列的矩阵,是矩阵求导的特殊情况

向量对标量求导定义

向量y=[y1,y2,,ym]T对标量x的导数写成如下形式:

yx=[y1x,y2x,,ymx]T

即:

(yx)i=yix

标量对向量求导定义

标量y对向量xT=[x1,x2,,xn]对的导数写成如下形式:

yxT=[yx1,yx2,,yxn]T

即:

(yxT)i=yxi

向量对向量求导定义

向量y=[y1,y2,,ym]T对向量x=[x1,x2,,xn]T对的导数写成如下形式:

yx=[y1x1y1x2y1xny2x1y2x2y2xnymx1ymx2ymxn]

mn维矩阵,也叫做雅可比矩阵。即:

(yx)ij=yixj

矩阵求导定义

矩阵对标量求导定义

矩阵Y对标量x的导数定义如下:

Yx=[y11xy12xy1nxy21xy22xy2nxym1xym2xymnx]

即:

(Yx)ij=yijx

标量对矩阵求导定义

标量y对矩阵X的导数定义如下:

yX=[yx11yx21yxp1yx12yx22yxp2yx1qyx2qyxpq]

即:

(yX)ij=yxji

求导法则

在微分、求导过程中,有三条法则非常重要,在矩阵的微分、求导过程中也同样重要。

  • 链式法则:如果y=f(g(x)),则y(x)=f(g(x))g(x)
  • 乘积法则:(fg)=fg+fg
  • 求和法则:(f+g)=f+g

求和法则是通用的,由于矩阵乘积不是可交换的,所以乘积法则需要注意顺序。链式法则在矩阵对标量和标量对矩阵求导时不适用(这个情况下,一般使用迹运算)。

一些恒等式

常用等式

||X||2=tr(XTX)=tr(XXT)
tr(ABCD)=tr(BCDA)=tr(CDAB)=tr(DABC)

转置

由上述的向量、矩阵的导数定义,易知:

yTx=yxT=(yx)T

其中x,y为满足上述定义的标量、向量或矩阵。

向量对向量求导恒等式

vector_by_vector

根据上面的定义和求导法则,很容易推导上述结果,下面选择一个进行推导证明:

(vux)ij=vuixj=vuixj+vxjui=vuixj+uivxj=v(ux)ij+(uvx)ijvux=vux+uvx

标量对向量求导恒等式

scalar_by_vector1 scalar_by_vector2

向量对标量求导恒等式

vector_by_scalar

标量对矩阵求导恒等式

scalar_by_matrix1 scalar_by_matrix2 scalar_by_matrix3 scalar_by_matrix4

这里选择几个进行证明:

(Xa+b)TC(Xa+b)X=tr((Xa+b)TC(Xa+b))X=tr((Xa+b)TC(X1a+b))X1+tr((X2a+b)TC(Xa+b))X2=tr((Xa+b)TCX1a)X1+tr((X2a)TC(Xa+b))X2=a(Xa+b)TC+(C(Xa+b)aT)T=a(Xa+b)T(C+CT)
f=tr(X1A)X=tr(X1XX1A)X=tr(X11XX1A)X1+tr(X1X2X1A)X2+tr(X1XX31A)X3=f+X1AX1+ff=X1AX1
|X|I=adj(X)X|X|=jadj(X)ijXjii(|X|X)ij=|X|Xji=adj(X)ij|X|X=adj(X)=|X|X1

上面证明过程中用到了伴随矩阵的性质,伴随矩阵的第i行对应的是代数余子式的第i列,而代数余子式的第i列的元素必定去掉了元素X的第i列,也就是说伴随矩阵的第i行元素全部与Xji无关。关于伴随矩阵的具体性质可以参见Adjugate matrix

其他大部分证明过程类似,或者用了类似的思想,这里由于敲公式太累了,也没有这么多时间,就不一一放出证明过程了。

矩阵对标量求导恒等式

matrix_by_scalar

标量对标量求导恒等式

scalar_by_scalar


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主

留言

No Comment Yet