转自http://www.cnblogs.com/xuxm2007/p/3332035.html
矩阵微分
http://www.iwenchao.com/mathematics/matrix-differential.html
http://en.wikipedia.org/wiki/Matrix_calculus
http://www.atmos.washington.edu/~dennis/MatrixCalculus.pdf
https://ccrma.stanford.edu/~dattorro/matrixcalc.pdf
http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=3274 里面的电子书 不错很全面
矩阵微分(Matrix Differential)也称矩阵求导(Matrix Derivative),在机器学习、图像处理、最优化等领域的公式推导过程中经常用到。本文将对各种形式下的矩阵微分进行详细的推导。
1. 符号说明
接下来的微分计算中,假定 A, B, C是常矩阵与 X无关, Y, Z与 X相关。
d(y)/d(x) 是一个列向量,其中的元素 (i) 为 d(yi)/d(x)
d(y)/d(x) 是一个列向量,其中的元素 (i) 为 d(y)/d(xi)
d(yT)/d(x) 是一个矩阵,其中的元素 (i,j) 为 d(yj)/d(xi)
d(Y)/d(x) 是一个矩阵,其中的元素 (i,j) 为 d(Yi,j)/d(x)
d(y)/d(X) 是一个矩阵,其中的元素 (i,j) 为 d(y)/d(Xi,j)
2. 一次函数的微分(Linear Products)
首先介绍一个重要的性质(类似于函数的求导): d(YZ)/d(x)=Y*d(Z)/d(x)+d(Y)/d(x)*Z,注意到分母中的x是标量(Scalar)。在微分中分母是向量的情况下,个人经验是:若d(行向量)/d(列向量)或者d(列向量)/d(行向量),则也适合这个公式,如下面的前两个公式。
- d(xTA)/d(x) = A
推导过程:d(xTA)/d(x) = A*d(xT)/d(x)+xT*d(A)/d(x) = A*I+0 = A。若A为向量a也适用。 - d(Ax)/d(xT) = A 推导过程:d(Ax)/d(xT) = [d(xTAT)/d(x)]T = (AT)T = A。
- d(aTXb)/d(X) = abT首先求出aTXb = aTX:,1b1 + aTX:,2b2 + ... + aTX:,nbn,这是一个实数,所以对应的Xi,j的系数构成的矩阵就为微分结果,易得abT。若a, b为矩阵A, B公式也适用。
- d(aTXTb)/d(X) = baT计算过程同上,若a, b为矩阵A, B公式也适用。
注意,有些书上有这些公式:d(xA)/d(x)=A; d(Ax)/d(x)=AT。考虑到x为列向量,则Ax也为列向量,列向量对列向量的求导按照《矩阵论》中的公式,结果会是一个列向量而不是公式中的AT。这些特殊的情况就让数学家去钻研吧,应用研究很少遇到。
3. 二次函数的微分(Quadratic Products)
下面的讨论主要针对分子为二次的情况,分母还是向量或者矩阵。分母为高阶的情况较少,典型的例子有Hessian矩阵,在文章最后会介绍。
- d(xTAx)/d(x) = (A+AT)x在SVM求对偶的过程中有这一步求导。用展开的方式可以很快求得。若A为对称阵,则d(xTAx)/d(x) = 2Ax。
- d[(Ax+b)TC(Dx+e)]/d(x) = ATC(Dx+e) + DTCT(Ax+b) 这是该形式最为通用的公式。
- d(aTXTXb)/d(X) = X(abT + baT)
- 特殊情况:d(aTXTXa)/d(X) = 2XaaT
- d(aTXTCXb)/d(X) = CTXabT + CXbaT
- d(aTXTCXa)/d(X) = (C + CT)XaaT
- d(aTXTCXa)/d(X) = 2CXaaT,若C对称。
- d[(Xa+b)TC(Xa+b)]/d(X) = (C+CT)(Xa+b)aT
4. 矩阵的迹的微分(Trace)
在矩阵的迹tr()中的矩阵必须为方阵。设有N阶矩阵A,那么矩阵的迹tr(A)就等于A的特征值的总和,也为A矩阵的主对角线元素的总和,tr(AB)=tr(BA)。
- d(tr(X))/d(X) = I
- d(tr(Xk))/d(X) =k(Xk-1)T
- d[tr(ATXBT)]/d(X) = d[tr(BXTA)]/d(X) = AB
- d[tr(XAT)]/d(X) = d[tr(ATX)]/d(X) =d[tr(XTA)]/d(X) = d[tr(AXT)]/d(X) = A
- d[tr(AXBXT)]/d(X) = ATXBT + AXB
- d[tr(XAXT)]/d(X) = X(A+AT)
- d[tr(XTAX)]/d(X) =(A+AT)X
- d[tr(AXTX)]/d(X) = X(A+AT)
- d[tr(AXBX)]/d(X) = ATXTBT + BTXTAT
5. 雅可比矩阵(Jacobian)
雅可比矩阵也可以看做是向量对向量的求导而得到的,如果y=f(x),则对应的雅可比矩阵J=d(y)/d(xT)。
6. 海森矩阵(Hessian matrix)
如果y=f(x),则d[d(f)/d(x)]/d(x)是海森矩阵。在最优化中海森矩阵有诸多用途,如求最大值,最小值,鞍点等。
- d2(Ax+b)TC(Dx+e)/d(X2)= ATCD + DTCTA