先说明一些符号:
标量y,向量y,矩阵X,Y.
y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
X=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋯⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤
在矩阵求导这里有两种布局方式,常用的是分子布局,我下面所用的就是分子布局。
标量对向量求导
∂x∂y=[∂x1∂y∂x2∂y⋯∂xn∂y]
这是分子布局下标量对向量的求导,记住了这种方式,下面的就容易多了.
向量对向量求导
向量对向量求导,本质就是分子向量的每一个值(标量)对分母向量求导,具体的就是y1对x求导,y2对x求导,一直到yn对x求导.那么正如标量对向量求导,y1对x求导的结果就是
∂x∂y1=[∂x1∂y1∂x2∂y1⋯∂xn∂y1]
所以
∂x∂y=⎣⎢⎢⎢⎢⎡∂x1∂y1∂x1∂y2⋮∂x1∂yn∂x2∂y1∂x2∂y2⋮∂x1∂yn⋯⋯⋯⋯∂xn∂y1∂xn∂y2⋮∂xn∂yn⎦⎥⎥⎥⎥⎤
每一行就是标量对向量求导的计算结果。
标量对矩阵求导
对于矩阵X,它是m×n的矩阵,我们可以给它看成是n个m维的列向量,那么问题就变为了标量对n个向量的求导,例如标量y对矩阵X的第一列
⎣⎢⎢⎢⎡x11x21⋮xm1⎦⎥⎥⎥⎤
的求导就是
[∂x11y∂x21y⋯∂xm1y]
所以
∂X∂y=⎣⎢⎢⎢⎢⎡∂x11∂y∂x12∂y⋮∂x1n∂y∂x21∂y∂x22∂y⋮∂x2n∂y⋯⋯⋯⋯∂xm1∂y∂xm2∂y⋮∂xmn∂y⎦⎥⎥⎥⎥⎤
下图来自维基百科上矩阵求导详述

解释完了上面的部分,我们也就明白下图中为什么是这样的结果了
我们仅仅看分子布局(Numerator layout)那一列
假如a=[a1a2⋯am]T,向量a和向量x=[x1x2⋯xn]T一点关系没有.
那么求导的结果就是m×n的零矩阵.x对自身求导的结果是单位矩阵.这两个就不写出来了,我们下面看一下后两个,假设
A=⎣⎢⎢⎢⎡a11a21⋮am1a12a22⋮am2⋯⋯⋯⋯a1na2n⋮amn⎦⎥⎥⎥⎤
那么
Ax=⎣⎢⎢⎢⎡a11x1+a12x2+⋯+a1nxna21x1+a22x2+⋯+a2nxn⋮am1x1+am2x2+⋯+amnxn⎦⎥⎥⎥⎤
此时∂x∂Ax就是向量对向量的导数
,按照上述步骤就是分解为m个标量对向量的导数,
第一个标量是a11x1+a12x2+⋯+a1nxn,它对x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
的导数是[a11a12⋯a1n]
看到这里大家最好拿纸笔自己推算一下。
那么自然的,就得到了
∂x∂Ax=⎣⎢⎢⎢⎡a11a21⋮am1a12a22⋮am2⋯⋯⋯⋯a1na2n⋮amn⎦⎥⎥⎥⎤
这就是矩阵A.
现在再看最后一个∂x∂xTA,
首先计算xTA,xT=[x1x2⋯xn],这里注意这里的矩阵A和上一个不是一个矩阵,只不过用A这个符号表示这是一个矩阵。这里的矩阵A应该等于
A=⎣⎢⎢⎢⎡a11a21⋮an1a12a22⋮an2⋯⋯⋯⋯a1ma2m⋮anm⎦⎥⎥⎥⎤
n×m型的矩阵。
那么xTA就等于
⎣⎢⎢⎢⎡a11x1+a21x2+⋯+an1xna12x1+a22x2+⋯+an2xn⋮a1mx1+am2x2+⋯+anmxn⎦⎥⎥⎥⎤
所以∂x∂xTA依旧是向量对向量的求导,我们首先看第一个标量a11x1+a21x2+⋯+an1xn对x的导数,就是
[a11a21⋯an1]
那么自然的
∂x∂xTA=⎣⎢⎢⎢⎡a11a12⋮a1ma21a22⋮a2m⋯⋯⋯⋯an1an2⋮anm⎦⎥⎥⎥⎤
这显然就是矩阵A的转置。(别忘了这是分子布局的情况下)
其实只要记住分子布局下标量对向量的求导形式:
∂x∂y=[∂x1∂y∂x2∂y⋯∂xn∂y],x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
后面的各种形式也就很容易理解了。