学习
实践
活动
工具
TVP
写文章
专栏首页机器学习算法原理与实践机器学习中的矩阵向量求导(五) 矩阵对矩阵的求导

机器学习中的矩阵向量求导(五) 矩阵对矩阵的求导

    在矩阵向量求导前4篇文章中,我们主要讨论了标量对向量矩阵的求导,以及向量对向量的求导。本文我们就讨论下之前没有涉及到的矩阵对矩阵的求导,还有矩阵对向量,向量对矩阵求导这几种形式的求导方法。

    本文所有求导布局以分母布局为准,为了适配矩阵对矩阵的求导,本文向量对向量的求导也以分母布局为准,这和前面的文章不同,需要注意。

    本篇主要参考了张贤达的《矩阵分析与应用》和长躯鬼侠的矩阵求导术

1. 矩阵对矩阵求导的定义

    假设我们有一个$p \times q$的矩阵$F$要对$m \times n$的矩阵$X$求导,那么根据我们第一篇求导的定义,矩阵$F$中的$pq$个值要对矩阵$X$中的$mn$个值分别求导,那么求导的结果一共会有$mnpq$个。那么求导的结果如何排列呢?方法有很多种。

    最直观可以想到的求导定义有2种:

    第一种是矩阵$F$对矩阵$X$中的每个值$X_{ij}$求导,这样对于矩阵$X$每一个位置(i,j)求导得到的结果是一个矩阵$\frac{\partial F}{\partial X_{ij}}$,可以理解为矩阵$X$的每个位置都被替换成一个$p \times q$的矩阵,最后我们得到了一个$mp \times nq$的矩阵。

    第二种和第一种类似,可以看做矩阵$F$中的每个值$F_{kl}$分别对矩阵$X$求导,这样矩阵$F$每一个位置(k,l)对矩阵$X$求导得到的结果是一个矩阵$\frac{\partial F_{kl}}{\partial X}$, 可以理解为矩阵$F$的每个位置都被替换成一个$m \times n$的矩阵,最后我们得到了一个$mp \times nq$的矩阵。

    这两种定义虽然没有什么问题,但是很难用于实际的求导,比如类似我们在机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法中很方便使用的微分法求导。

    目前主流的矩阵对矩阵求导定义是对矩阵先做向量化,然后再使用向量对向量的求导。而这里的向量化一般是使用列向量化。也就是说,现在我们的矩阵对矩阵求导可以表示为:$$\frac{\partial F}{\partial X} = \frac{\partial vec(F)}{\partial vec(X)}$$

    对于矩阵$F$,列向量化后,$vec(F)$的维度是$pq \times 1$的向量,同样的,$vec(X)$的维度是$mn \times 1$的向量。最终求导的结果,这里我们使用分母布局,得到的是一个$mn \times pq$的矩阵。

2. 矩阵对矩阵求导的微分法

    按第一节的向量化的矩阵对矩阵求导有什么好处呢?主要是为了使用类似于前面讲过的微分法求导。回忆之前标量对向量矩阵求导的微分法里,我们有:$$df= tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X})$$

    这里矩阵对矩阵求导我们有:$$vec(dF) =\frac{\partial vec(F)^T}{\partial vec(X)} vec(dX) = \frac{\partial F^T}{\partial X} vec(dX)$$

    和之前标量对矩阵的微分法相比,这里的迹函数被矩阵向量化代替了。

    矩阵对矩阵求导的微分法,也有一些法则可以直接使用。主要集中在矩阵向量化后的运算法则,以及向量化和克罗内克积之间的关系。关于矩阵向量化和克罗内克积,具体可以参考张贤达的《矩阵分析与应用》,这里只给出微分法会用到的常见转化性质, 相关证明可以参考张的书。

    矩阵向量化的主要运算法则有:

    1) 线性性质:$vec(A+B) =vec(A) +vec(B)$

    2) 矩阵乘法:$vec(AXB)= (B^T \bigotimes A)vec(X)$,其中$\bigotimes$是克罗内克积。

    3) 矩阵转置:$vec(A^T) =K_{mn}vec(A)$,其中$A$是$m \times n$的矩阵,$K_{mn}$是$mn \times mn$的交换矩阵,用于矩阵列向量化和行向量化之间的转换。

    4) 逐元素乘法:$vec(A \odot X) = diag(A)vec(X)$, 其中$diag(A)$是$mn \times mn$的对角矩阵,对角线上的元素是矩阵$A$按列向量化后排列出来的。

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

    1) $(A \bigotimes B)^T = A^T \bigotimes B^T$

    2) $vec(ab^T) = b \bigotimes a$

    3) $(A \bigotimes B)(C \bigotimes D )=AC \bigotimes BD$

    4) $K_{mn} = K_{nm}^T, K_{mn}K_{nm}=I$

    使用上面的性质,求出$vec(dF)$关于$ vec(dX)$的表达式,则表达式左边的转置即为我们要求的$\frac{\partial vec(F)}{\partial vec(X)} $,或者说$\frac{\partial F}{\partial X} $

3. 矩阵对矩阵求导实例

    下面我们给出一个使用微分法求解矩阵对矩阵求导的实例。

    首先我们来看看:$\frac{\partial AXB}{\partial X}$, 假设A,X,B都是矩阵,X是$m \times n$的矩阵。

    首先求$dF$, 和之前第三篇的微分法类似,我们有: $$dF =AdXB$$

    然后我们两边列向量化(之前的微分法是套上迹函数), 得到:$$vec(dF) = vec(AdXB) = (B^T \bigotimes A)vec(dX)$$

    其中,第二个式子使用了上面矩阵向量化的性质2。

    这样,我们就得到了求导结果为:$$\frac{\partial AXB}{\partial X} =  (B^T \bigotimes A)^T = B \bigotimes A^T$$

    利用上面的结果我们也可以得到:$$\frac{\partial AX}{\partial X} =  I_n \bigotimes A^T$$$$\frac{\partial XB}{\partial X} =  B \bigotimes I_m$$

    来个复杂一些的:$\frac{\partial Aexp(BXC)D}{\partial X}$

    首先求微分得到:$$dF =A [dexp(BXC)]D = A[exp(BXC) \odot (BdXC)]D  $$

    两边矩阵向量化,我们有:$$vec(dF) = (D^T \bigotimes A) vec[exp(BXC) \odot (BdXC)]  =  (D^T \bigotimes A) diag(exp(BXC))vec(BdXC) =  (D^T \bigotimes A) diag(exp(BXC))(C^T\bigotimes B)vec(dX) $$

    其中第一个等式使用了矩阵向量化性质2,第二个等式使用了矩阵向量化性质4, 第三个等式使用了矩阵向量化性质2。

    这样我们最终得到:$$\frac{\partial Aexp(BXC)D}{\partial X} = [(D^T \bigotimes A) diag(exp(BXC))(C^T\bigotimes B)]^T = (C \bigotimes B^T) diag(exp(BXC)) (D\bigotimes A^T )$$

4. 矩阵对矩阵求导小结

    由于矩阵对矩阵求导的结果包含克罗内克积,因此和之前我们讲到的其他类型的矩阵求导很不同,在机器学习算法优化中中,我们一般不在推导的时候使用矩阵对矩阵的求导,除非只是做定性的分析。如果遇到矩阵对矩阵的求导不好绕过,一般可以使用机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则中第三节最后的几个链式法则公式来避免。

    到此机器学习中的矩阵向量求导系列就写完了,希望可以帮到对矩阵求导的推导过程感到迷茫的同学们。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://www.cnblogs.com/pinard复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法

        在机器学习中的矩阵向量求导(一) 求导定义与求导布局中,我们讨论了向量矩阵求导的9种定义与求导布局的概念。今天我们就讨论下其中的标量对向量求导,标量对矩...

    刘建平Pinard
  • 机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法

        在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,...

    刘建平Pinard
  • 机器学习中的矩阵向量求导(一) 求导定义与求导布局

        在之前写的上百篇机器学习博客中,不时会使用矩阵向量求导的方法来简化公式推演,但是并没有系统性的进行过讲解,因此让很多朋友迷惑矩阵向量求导的具体过程为什么...

    刘建平Pinard
  • 矩阵求导、几种重要的矩阵及常用的矩阵求导公式

    一般来讲,我们约定x=(x1,x2,...xN)T,这是分母布局。常见的矩阵求导方式有:向量对向量求导,标量对向量求导,向量对标量求导。

    狼啸风云
  • 矩阵求导 -- 机器学习常用

    Echo_fy
  • 【机器学习 基本概念】矩阵、向量求导法则

    复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix。

    魏晓蕾
  • 机器之心最干的文章:机器学习中的矩阵、向量求导

    机器之心
  • 深度学习-矩阵求导的坑

    石晓文
  • 矩阵范数求导规则_矩阵逆的范数和矩阵范数的逆

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内...

    全栈程序员站长
  • 神奇的多项式求导矩阵与积分矩阵

    启发:该方法很好理解,利用了矩阵的性质,实现了系数的自动变换与落位,在计算实现时可以考虑该方法减少迭代次数,提高运算效率。但是可能只适合线性多项式。

    Piper蛋窝
  • 让向量、矩阵和张量的求导更简洁些吧

    本文是我在阅读 Erik Learned-Miller 的《Vector, Matrix, and Tensor Derivatives》时的记录。 本文的主要...

    用户7699929
  • 小白的机器学习实战——向量,矩阵和数组 小白的机器学习实战——向量,矩阵和数组

    尾尾部落
  • OpenGL(五)-- OpenGL中矩阵的变换OpenGL(五)-- OpenGL中矩阵的变换

    通过模型矩阵,观察者矩阵(View Matrix),投影矩阵(Projection Matrix)三步矩阵变换后最终确定该展示怎样的图像。要注意的是矩阵的计算时...

    用户8893176
  • 从矩阵链式求导的角度来深入理解BP算法(原理+代码)

    在BP神经网络模型及其Gradient Descent的推导过程中有推导过BP算法,但只是简单用符号来表示求导关系,并没有详细介绍求导的具体步骤。

    Cyril-KI
  • 吴恩达机器学习笔记16-矩阵与矩阵的乘法

    “Linear Algebra review(optional)——Matrix-matrix multiplication”

    讲编程的高老师
  • 深度学习的JavaScript基础:矩阵和向量的表示

    与Java、C++这样的静态类型语言不同,JS中的变量似乎没有类型,在声明变量时不用指定变量类型。但实际上JS也有字符串、数字、布尔值、对象、数组、未定义等类型...

    云水木石
  • 吴恩达机器学习笔记15-矩阵与向量的乘法

    “Linear Algebra review(optional)——Matrix-vector multiplication”

    讲编程的高老师
  • 机器学习中的统计学——协方差矩阵

    在之前的几篇文章中曾讲述过主成分分析的数学模型、几何意义和推导过程(PS:点击即可阅读),这里面就要涉及到协方差矩阵的计算,本文将针对协方差矩阵做一个详细的介绍...

    统计学家

扫码关注腾讯云开发者

领取腾讯云代金券