所谓矩阵求导,本质上还是多元函数的求导。假如有:
A=⎣⎢⎢⎢⎡a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn⎦⎥⎥⎥⎤,x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
那么,
Ax=⎣⎢⎢⎢⎡a11x1+a12x2+⋯+a1nxna21x1+a22x2+⋯+a2nxn⋮am1x1+am2x2+⋯+amnxn⎦⎥⎥⎥⎤m×1
如果要将列向量 Ax 对 x 求导,只需要将 Ax 的每一个元素(n元多项式)对 x 中的每一个元素求导即可。问题是, Ax 的每一个元素都是一个标量,而 x 是列向量,求导后如何表示?
向量求导有两种布局,分子布局和分母布局。分子布局和分母布局的操作结果可以通过转置来切换。
-
分母布局:标量对向量求导,得到的结果跟分母上的向量保持一致。即,如果标量是对列向量求导,得到的导数也是列向量。
-
分子布局:标量对向量求导,得到的结果是分母上的向量的转置。即,如果标量对列向量求导,得到的导数将是行向量。
本文使用分母布局进行叙述,将 Ax 第一个元素对 x 求导即可得到:
⎣⎢⎢⎢⎡a11a12⋮a1n⎦⎥⎥⎥⎤
同理,对 Ax 的其他元素求导也能得到类似的列向量,但是为了后续的计算方便,我们会把所有求导后得到的列向量水平堆叠,得到:
∂x∂Ax=⎣⎢⎢⎢⎡a11a12⋮a1na21a22⋮a2n……⋱⋯am1am2⋮amn⎦⎥⎥⎥⎤=AT
用类似上述方法还可以得到以下结论:
∂xT∂Ax=A
∂x∂(xTA)=A
更进一步,我们还可以计算:
∂x∂xTAx=(AT+A)x
推导如下:
xT(Ax)=(x1x2⋯xn)(j=1∑na1jxjj=1∑na2jxj…j=1∑nan,jxj)T=i=1∑n((j=1∑naijxj)xi)=i=1∑nj=1∑naijxixj
因此,有:
∂xi∂(xTA⋅x)=(j=1∑naijxj)+(j=1∑najixj)=j=1∑n(aij+aji)xj=(AT+A)x
若 A 为对称矩阵,则上式子可以表示为:
∂x∂xTAx=2Ax
举个例子,A 的转置 与 A 的积是对称矩阵,因此有:
∂β∂(βT(ATA)β)=2ATAβ
总结,本文需要记住的公式大致如下:
x∂Ax=AT
∂xT∂Ax=A
∂x∂(xTA)=A
∂x∂xTAx=(AT+A)x
若 A 为对称矩阵则有:
∂x∂xTAx=2Ax
参考链接:
-
机器学习中的矩阵、向量求导
-
向量,矩阵求导