矩阵对矩阵求导的定义¶

假设我们有一个 $p \times q$ 的矩阵 $F$ 要对 $m \times n$ 的矩阵 $X$ 求导,那么根据我们第一篇求导的定义,矩阵 $F$ 中的 $p q$ 个值要对矩阵 $X$ 中的 $m n$ 个值分别求导,那 么求导的结果一共会有 $m n p q$ 个。那么求导的结果如何排列呢? 方法有很多种。 最直观可以想到的求导定义有2种: 第一种是矩阵 $F$ 对矩阵 $X$ 中的每个值 $X_{i j}$ 求导,这样对于矩阵 $X$ 每一个位置 $(\mathrm{i}, \mathrm{j})$ 求导得到的结果是一个矩阵 $\frac{\partial F}{\partial X_{i j}}$ ,可以理解为矩阵 $X$ 的每个位置都被替 换成一个 $p \times q$ 的矩阵,最后我们得到了一个 $m p \times n q$ 的矩阵。 第二种和第一种类似,可以看做矩阵 $F$ 中的每个值 $F_{k l}$ 分别对矩阵 $X$ 求导,这样矩阵 $F$ 每一个位置 $(\mathrm{k}, \mathrm{I})$ 对矩阵 $X$ 求导得到的结果是一个矩阵 $\frac{\partial F_{k l}}{\partial X}$ ,可以 理解为矩阵 $F$ 的每个位置都被替换成一个 $m \times n$ 的矩阵,最后我们得到了一个 $m p \times n q$ 的矩阵。 这两种定义虽然没有什么问题,但是很难用于实际的求导,比如类似我们在机器学习中的矩阵向量求导(三)矩阵向量求导之微分法中很方便使用的微分 法求导。 目前主流的矩阵对矩阵求导定义是对矩阵先做向量化,然后再使用向量对向量的求导。而这里的向量化一般是使用列向量化。也就是说,现在我们的矩 阵对矩阵求导可以表示为: $$ \frac{\partial F}{\partial X}=\frac{\partial \operatorname{vec}(F)}{\partial \operatorname{vec}(X)} $$ 对于矩阵 $F$ ,列向量化后, $\operatorname{vec}(F)$ 的维度是 $p q \times 1$ 的向量,同样的, $\operatorname{vec}(X)$ 的维度是 $m n \times 1$ 的向量。最终求导的结果,这里我们使用分母布局, 得到的是一个 $m n \times p q$ 的矩阵。

矩阵对矩阵求导的微分法¶

按第一节的向量化的矩阵对矩阵求导有什么好处呢? 主要是为了使用类似于前面讲过的微分法求导。回忆之前标量对向量矩阵求导的微分法里,我们 有: $$ d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^T d \mathbf{X}\right) $$ 这里矩阵对矩阵求导我们有: $$ \operatorname{vec}(d F)=\frac{\partial \operatorname{vec}(F)^T}{\partial \operatorname{vec}(X)} \operatorname{vec}(d X)=\frac{\partial F^T}{\partial X} \operatorname{vec}(d X) $$ 和之前标量对矩阵的微分法相比,这里的迹函数被矩阵向量化代替了。 矩阵对矩阵求导的微分法,也有一些法则可以直接使用。主要集中在矩阵向量化后的运算法则,以及向量化和克罗内克积之间的关系。关于矩阵向量化 和克罗内克积,具体可以参考张贤达的《矩阵分析与应用》,这里只给出微分法会用到的常见转化性质,相关证明可以参考张的书。 矩阵向量化的主要运算法则有:

  • 1) 线性性质: $\operatorname{vec}(A+B)=\operatorname{vec}(A)+\operatorname{vec}(B)$
  • 2) 矩阵乘法: $\operatorname{vec}(A X B)=\left(B^T \otimes A\right) \operatorname{vec}(X)$ ,其中 $\bigotimes$ 是克罗内克积。
  • 3) 矩阵转置: $\operatorname{vec}\left(A^T\right)=K_{m n} \operatorname{vec}(A)$ ,其中 $A$ 是 $m \times n$ 的矩阵, $K_{m n}$ 是 $m n \times m n$ 的交换矩阵,用于矩阵列向量化和行向量化之间的转换。
  • 4) 逐元素乘法: $\operatorname{vec}(A \odot X)=\operatorname{diag}(A) \operatorname{vec}(X)$ ,其中 $\operatorname{diag}(A)$ 是 $m n \times m n$ 的对角矩阵,对角线上的元素是矩阵 $A$ 按列向量化后排列出来的。

克罗内克积的主要运算法则有:

  • 1) $(A \otimes B)^T=A^T \otimes B^T$
  • 2) $\operatorname{vec}\left(a b^T\right)=b \otimes a$
  • 3) $(A \otimes B)(C \otimes D)=A C \otimes B D$
  • 4) $K_{m n}=K_{n m}^T, K_{m n} K_{n m}=I$ 使用上面的性质,求出 $v e c(d F)$ 关于 $v e c(d X)$ 的表达式,则表达式左边的转置即为我们要求的 $\frac{\partial v e c(F)}{\partial v e c(X)}$, 或者说 $\frac{\partial F}{\partial X}$

矩阵对矩阵求导实例¶

下面我们给出一个使用微分法求解矩阵对矩阵求导的实例。 首先我们来看看: $\frac{\partial A X B}{\partial X}$ ,假设 $\mathrm{A}, \mathrm{X}, \mathrm{B}$ 都是矩阵, $\mathrm{X}$ 是 $m \times n$ 的矩阵。 首先求 $d F ,$ 和之前第三篇的微分法类似,我们有: $$ d F=A d X B $$ 然后我们两边列向量化(之前的微分法是套上迹函数), 得到: $$ \operatorname{vec}(d F)=\operatorname{vec}(A d X B)=\left(B^T \bigotimes A\right) \operatorname{vec}(d X) $$ 其中,第二个式子使用了上面矩阵向量化的性质2。 这样,我们就得到了求导结果为: $$ \frac{\partial A X B}{\partial X}=\left(B^T \bigotimes A\right)^T=B \bigotimes A^T $$

利用上面的结果我们也可以得到: $$ \begin{aligned} &\frac{\partial A X}{\partial X}=I_n \bigotimes A^T \\ &\frac{\partial X B}{\partial X}=B \bigotimes I_m \end{aligned} $$ 来个复杂一些的: $\frac{\partial \operatorname{Aexp}(B X C) D}{\partial X}$ 首先求微分得到: $$ d F=A[\operatorname{dexp}(B X C)] D=A[\exp (B X C) \odot(B d X C)] D $$ 两边矩阵向量化,我们有: $$ \begin{gathered} \operatorname{vec}(d F)=\left(D^T \bigotimes A\right) \operatorname{vec}[\exp (B X C) \odot(B d X C)]=\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C)) \operatorname{vec}(B d X C) \\ =\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C))\left(C^T \bigotimes B\right) \operatorname{vec}(d X) \end{gathered} $$ 其中第一个等式使用了矩阵向量化性质2,第二个等式使用了矩阵向量化性质 4 ,第三个等式使用了矩阵向量化性质 2 。 这样我们最终得到: $$ \frac{\partial A \exp (B X C) D}{\partial X}=\left[\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C))\left(C^T \bigotimes B\right)\right]^T=\left(C \bigotimes B^T\right) \operatorname{diag}(\exp (B X C))\left(D \bigotimes A^T\right) $$

矩阵对矩阵求导小结¶

由于矩阵对矩阵求导的结果包含克罗内克积,因此和之前我们讲到的其他类型的矩阵求导很不同,在机器学习算法优化中中,我们一般不在推导的时候使用矩阵对矩阵的求导,除非只是做定性的分析。

转载自:

  • 刘建平Pinard博客 https://www.cnblogs.com/pinard/p/10930902.html