矩阵求导法
1、前言
设y=f(x)且x=[x1 x2 ...xn]T,由多元函数微积分可知
dy=i=1∑ndxidydxi=(dxdy)Tdx
将向量x推广到矩阵的形式,可以得到
dy=i=1∑nj=1∑m∂Xij∂ydXij=tr((∂X∂y)TdX)
值得注意的是,本文所有向量都默认为列向量的形式,用小写字母表示标量和向量,用大写字母表示矩阵。
2、布局方式

一般来说,我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。
3、基本公式
3.1 微分基本性质
- 微分加减法:d(X±Y)=dX±dY
- 微分乘法:d(XY)=XdY+YdX
- 微分转置:d(XT)=(dX)T
- 逆矩阵微分:d(X−1)=−X−1d(X)X−1
- 哈达马积(Hadamard Product)微分:d(X⊙Y)=X⊙dY+dX⊙Y
- 逐项元素求导:dσ(X)=σ′(X)⊙dX
3.2 迹的基本性质(针对标量对向量或者矩阵求导情况)
- tr(x)=x(x为标量)
- tr(AT)=tr(A)
- tr(AB)=tr(BA)
- tr(A±B)=tr(A)±tr(B)
- d[tr(X)]=tr(dX)
- tr[(A⊙B)TC]=tr[AT(B⊙C)]
3.3 性质证明
(1)d(X−1)=−X−1d(X)X−1
证:
d(X−1)=d(X−1XX−1)=d(X−1)XX−1+X−1d(X)X−1+X−1Xd(X−1)=2d(X−1)+X−1d(X)X−1
3.4 例题
(1)已知标量y=aTXb,求∂x∂y。
解:
dy=d[tr(aTXb)]=tr[d(aTXb)]=tr[d(aT)Xb+aTd(X)b+aTXd(b)]=tr[aTd(X)b]=tr(baTdX)
∵dy=tr((∂X∂y)T)dX,∴∂X∂y=abT
(2)已知标量y=XTAX,求∂X∂y。
解:
dy=d[tr(XTAX)]=tr[d(XTAX)]=tr[d(XT)AX+XTAdX]=tr[d(XT)AX]+tr(XTAdX)=tr[d(X)TAX]+tr(XTAdX)=tr(XTATdX)+tr(XTAdX)=tr[XT(AT+A)dX]
∵dy=tr((∂X∂y)T)dX,∴∂X∂y=(A+AT)X
(3)已知标量y=aTeXb,求∂X∂y。
解:
dy=tr(dy)=tr(aTdeXb)=tr[aT(eXb⊙d(Xb))]=tr[(a⊙eXb)Td(Xb)]=tr[b(a⊙eXb)TdX]
∵dy=tr((∂X∂y)T)dX,∴∂X∂y=(a⊙eXb)bT
4、链式法则
4.1 向量对向量的链式法则
假设存在链式关系:x(m×1)→y(n×1)→z(p×1),则有如下链式求导法则:
∂x∂z=∂y∂z∂x∂y
从矩阵维度角度来看,∂x∂z是p×m的矩阵,∂y∂z是p×n的矩阵,∂x∂y是n×m的矩阵,满足矩阵相乘的法则。
4.2 标量对向量的链式法则
假设存在链式关系:x(m×1)→y(n×1)→z(1×1),从矩阵维度角度来看,∂x∂z是m×1的矩阵,∂y∂z是n×1的矩阵,∂x∂y是n×m的矩阵,显然无法写成如下形式:
∂x∂z=∂y∂z∂x∂y
为了使维度相容,式子应该写成:
∂x∂z=(∂x∂y)T∂y∂z
事实上,出现上述转置的原因是:我们使用了混合布局,对于标量对向量求导使用的是分母布局,而向量对向量求导使用的是分子布局。
对于更深的链式关系:x→y1→y2→...→yn→z,有链式求导法则:
∂x∂z=(∂yn−1∂yn∂yn−2∂yn−1...∂x∂y1)T∂yn∂z
例子:已知loss=(Xθ−y)T(Xθ−y),求∂θ∂loss。
解:
令z=Xθ−y,则存在链式关系:θ→z→loss,则由链式求导法则有:
∂θ∂loss=(∂θ∂z)T∂z∂loss=XT(2z)=2XT(Xθ−y)
4.3 标量对矩阵的链式法则
由于矩阵对矩阵的求导是比较复杂的定义,现在只对一些简单的线性关系求导继续分析。假设存在链式关系:X→Y→z,即z=f(Y),Y=AX+B,现在要求解∂X∂z,分析过程如下:
∂xij∂z=k,l∑∂Ykl∂z∂Xij∂Ykl=k,l∑∂Ykl∂z∂Xij∂∑s(AksXsl)=k,l∑∂Ykl∂z∂Xij∂AkiXil=k∑∂Ykj∂zAki
可以看出∂xij∂z的值为矩阵AT的第i行和∂Y∂z的第j列的内积,所以可得:
∂X∂z=AT∂Y∂z
参考文献
[1]SL_World.机器学习常用矩阵求导方法
[2] 刘建平.机器学习中的矩阵向量求导[一]
[3] 刘建平.机器学习中的矩阵向量求导[二]
[4] 刘建平.机器学习中的矩阵向量求导[三]
[5] 刘建平.机器学习中的矩阵向量求导[四]