矩阵求导术(二)——矩阵对矩阵的求导

矩阵求导术(二)—— 矩阵对矩阵的求导

接上篇,继续讨论涉及矩阵的求导技术。其实总结下来,涉及矩阵的求导本质就是多个标量对标量的求导按照某种规则排列起来,而这样的排列符合许多微分、线性代数的运算法则,由此衍生出的运算规则可以简化矩阵微分运算过程的表达形式,进而提升求导效率。

参考资料

上篇:矩阵求导术(一)——标量对矩阵的求导

知乎高赞

另外,张贤达《矩阵分析与应用》也有对矩阵微分的详细论述,可做参考。

  • 向量对向量的求导

首先定义向量对向量的导数。注意,这里没有特别限定是列向量还是行向量,因为最终的理论都是要将导函数和自变量都列向量化。对于p×1列向量\boldsymbol{f},m×1列向量\boldsymbol{x},其导数定义为:

\frac{\partial{\boldsymbol{f}}}{\partial{\boldsymbol{x}}}=\begin{bmatrix} \frac{\partial{f_1}}{\partial{x_1}}&\frac{\partial{f_2}}{\partial{x_1}}&...&\frac{\partial{f_p}}{\partial{x_1}}\\ \frac{\partial{f_1}}{\partial{x_2}}&\frac{\partial{f_2}}{\partial{x_2}}&...&\frac{\partial{f_p}}{\partial{x_2}}\\ ...&...&...&...\\ \frac{\partial{f_1}}{\partial{x_m}}&\frac{\partial{f_2}}{\partial{x_m}}&...&\frac{\partial{f_p}}{\partial{x_m}} \end{bmatrix}={\boldsymbol{J}_f}^T,导数矩阵的大小为m×p,在这种书写规则下,可以得到微分表达式:

d\boldsymbol{f}=(\frac{\partial{\boldsymbol{f}}}{\partial{\boldsymbol{x}}})^Td\boldsymbol{x},需要注意的是这跟高等数学中的微分表达式相比要多一个转置操作。

  • 矩阵对矩阵的求导

将向量对向量的求导延伸为矩阵对矩阵的求导。将矩阵按列优先向量化:

对矩阵\{\boldsymbol{F}\}_{p\times q}向量化:vec(\boldsymbol{F})=[F_{11},F_{21},...,F_{p1},F_{12},F_{22},...F_{p2},...,F_{1q},F_{2q},...,F_{pq}]^T

于是矩阵对矩阵的求导可以先将矩阵向量化后借助上述向量对向量求导的定义式进行:

\frac{\partial{\boldsymbol{F}}}{\partial{\boldsymbol{X}}}=\frac{\partial{\boldsymbol{vec(F)}}}{\partial{\boldsymbol{vec(X)}}}=\begin{bmatrix} \frac{\partial{f_{11}}}{\partial{x_{11}}}&\frac{\partial{f_{21}}}{\partial{x_{11}}}&...&\frac{\partial{f_{pq}}}{\partial{x_{11}}}\\ ...&...&...&...\\ \frac{\partial{f_{11}}}{\partial{x_{m1}}}&\frac{\partial{f_{21}}}{\partial{x_{m1}}}&...&\frac{\partial{f_{pq}}}{\partial{x_{m1}}}\\ \frac{\partial{f_{11}}}{\partial{x_{12}}}&\frac{\partial{f_{21}}}{\partial{x_{12}}}&...&\frac{\partial{f_{pq}}}{\partial{x_{12}}}\\ ...&...&...&...\\ \frac{\partial{f_{11}}}{\partial{x_{m2}}}&\frac{\partial{f_{21}}}{\partial{x_{m1}}}&...&\frac{\partial{f_{pq}}}{\partial{x_{m1}}}\\ ...&...&...&...\\ ...&...&...&...\\ \frac{\partial{f_{11}}}{\partial{x_{mn}}}&\frac{\partial{f_{21}}}{\partial{x_{mn}}}&...&\frac{\partial{f_{pq}}}{\partial{x_{mn}}}\\ \end{bmatrix}

于是我们有:vec(d\boldsymbol{F})=(\frac{\partial{\boldsymbol{F}}}{\partial\boldsymbol{X}})^Tvec(d\boldsymbol{X}),于是,对于一个矩阵函数表达式,在求解其导数时,总体分为两步:

  • 等式两边同时求微分
  • 向量化

在此过程中,需要用到涉及向量化的一些化简技巧:

  1. 线性:vec(A+B)=vec(A)+vec(B)
  2. 矩阵乘法:vec(AXB)=(B^T\bigotimes A)vec(X), \bigotimes为Kronecker积(克罗内克积),这里采用右Kronecker积;
  3. 转置:vec(A^T)=K_{mn}vec(A)K_{mn}为转置矩阵,A为m×n矩阵K_{mn}=K_{mn}^{-1}
  • 注意:一般地,我们会将上篇中所述标量对矩阵的导数看做本文所述矩阵对矩阵导数的一种特殊情况。若是如此,我们会得到mn×1的结果,这与我们之前得到的m×n的结果不相兼容,但两者可以相互转换。
  • 为避免混淆,采用梯度算子记号表示上篇中所述标量对矩阵的求导情况:\nabla_{\boldsymbol{X}}f=\frac{\partial{f}}{\partial{\boldsymbol{X}}},两者的通过向量化算符转化:
  • \frac{\partial{f}}{\partial{\boldsymbol{X}}}=vec(\nabla_{\boldsymbol{X}}f),因此采用上下两篇来对标量和矩阵求导分别论述。

 

 

你可能感兴趣的:(tool)