极市导读
本文系统地梳理了矩阵求导中需要用到的各种方法,并给出了多个例题,步骤非常详细。>>加入极市CV技术交流群,走在计算机视觉的最前沿
矩阵求导是一类贯穿机器学习,微分方程,概率统计,控制论,凸优化等诸多数学学科的极其重要的操作,遗憾的是,在许多工科专业大学阶段的课本中鲜有系统讲解这部分知识的章节,而许多论文默认读者已经具备了矩阵求导的能力,所以我们值得花时间好好讨论一下如何进行矩阵求导。本文的目的就是系统地梳理一遍矩阵求导的方法,在写作期间很多思路来自于许多很有意义的文章,不胜感激,在此一一列举出作者:
长躯鬼侠:矩阵求导术(上)
https://zhuanlan.zhihu.com/p/24709748
刘建平Pinard - 博客园
https://www.cnblogs.com/pinard/
1 求导定义与布局方式
1.1 矩阵求导术
1.2 分子布局和分母布局
2 标量对矩阵的求导术的基本思想
2.1 定义法
2.2 微分法
2.3 迹函数对向量或矩阵的求导
3 标量对矩阵的求导术的链式法则
3.1 向量对向量求导的链式法则
3.2 标量对多个向量的链式求导法则
3.3 标量对多个矩阵的链式求导法则
4 矩阵对矩阵的求导术
:标量
或者 :n维向量
: 维的矩阵
:标量
或者 :m维向量
: 维的矩阵
1.1 矩阵求导术
在高等数学里面,我们已经学过了标量对标量的求导,比如标量 对标量 的求导,可以表示为 。也学过一个m维向量 对标量 的求导,结果也是个m维向量 。这个m维向量的每一维就是向量 的每一维分别对标量 的导数。
所以我们推测:不论是向量也好,矩阵也好,对向量求导也好,对矩阵求导也好,结果都可以转化成标量之间的求导,最后把结果按照一定的方式拼接起来,以向量或者矩阵的形式表达出来而已。
根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义,如下:
其中前2种标量对标量的求导以及向量对标量的求导高数中已经介绍,我们着重讨论剩下的7种情况。
1.2 分子布局和分母布局
依旧使用一个m维向量 对标量 的求导,结果也是个m维向量 来举例,我们很确定 是一个m维向量,可问题是:它究竟应该表示成行向量,还是表示成列向量呢?
答案是:都可以。求导的本质是把导数信息,即求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一,所以为了解决这个问题,我们引入求导布局的概念。
向量对标量求导(表第2项):
比如上面的 (单独提到 或者 均按照列向量讨论),如果按照分子布局,结果就会是m维列向量,与分子维度一致。如果按照分母布局,结果就会是m维行向量。
标量对向量求导(表第4项):
比如 ,注意这次自变量是列向量,因变量是标量了。如果按照分子布局,结果就会是m维行向量。如果按照分母布局,结果就会是m维列向量,与分母维度一致。
标量对矩阵求导(表第7项):
比如,标量 对矩阵 求导,那么如果按分母布局,则求导结果的维度和矩阵 的维度 是一致的。如果是分子布局,则求导结果的维度为 。
矩阵对标量求导(表第3项):
比如,矩阵 对标量 求导,那么如果按分子布局,则求导结果的维度和矩阵 的维度 是一致的。如果是分母布局,则求导结果的维度为 。
向量对向量求导(表第5项):
比如, 维的向量 对 维的向量 求导,一共有 个标量对标量的求导。求导的结果一般是排列为一个矩阵。那么如果按分子布局,则结果矩阵的第一个维度以分子为准,即结果是个 维的矩阵:
如果按分母布局,则结果矩阵的第一个维度以分子为准,即结果是个
结论:分子布局和分母布局的结果相差一个转置。
在机器学习的算法推导里,通常遵循以下布局的规范:
总结如下:
2.1 定义法
在进行标量对矩阵的求导时我们默认按照分母布局,即求导的结果与矩阵的维度一致。比如
如果求
所以最后的结果应该长成这个样子:
是
当然,上面的做法相当于是硬生生把标量对矩阵的求导拆成了一堆标量对标量的求导,再把这些结果按照分母布局给组合了起来。这种方法可以称为定义法,但是它只适用于表达式不复杂,你能展开的情况。就像上面的
但如果表达式很复杂,你没法展开成分量的形式,那就没法转化成标量对标量的求导,这种方法就不再适用了。定义法所遵循的逐元素求导破坏了整体性。求导时不宜拆开矩阵,而是要找一个从整体出发的算法。即下面的微分法。
2.2 微分法
这里第一个等号是全微分公式,第二个等号表达了梯度与微分的联系。
全微分
对尺寸相同的矩阵
其中tr代表迹(trace)是方阵对角线元素之和,最后一步的变换是根据上面的矩阵迹的性质。
全微分
从上面矩阵微分的式子,我们可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:
答:这2个式子里面的
换句话说,假定题目给任意一个函数
我们只需要先想方设法搞出来
这就是微分法求对矩阵导数的基本思想,算法如下:
:
1. 根据给定的寻找 。
2. 给套上迹 。等号左边因为 是个标量,所以不受影响,等号右边根据迹的技巧进行化简。
3. 等号右边化简之后先找到,根据导数与微分的联系 得到 。
根据上述Algorithms,理论上对于任何求对矩阵导数的问题可以三步搞定。
但只有基本思想还远远不够,因为要搞出来
例如:
除此之外,微分法求对矩阵导数的基本思想的很重要的一步是给
标量的迹等于自己:
转置:
线性:
交换律:
矩阵乘法/逐元素乘法交换:
以上就是微分法求对矩阵导数的方法,在实际操作时万不可随意套用微积分中标量导数的结论,比如认为
下面举2个很经典的例子:
例1:
解:根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
这里的
2. 给
3. 使用迹技巧做矩阵乘法交换。根据
根据导数与微分的联系
与一开始所用的定义法结果吻合。
例2:
解:根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
2. 给
3. 使用迹技巧做矩阵乘法交换:
根据
根据导数与微分的联系
例3:
解:依然是求标量对向量的导数。首先解决这个向量模的平方的问题:
根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
2. 给
根据导数与微分的联系
令
例4:样本
解:本题可以转化成求
根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
但是要求出
逆:
。
行列式:,其中 表示X的伴随矩阵,在 可逆时又可以写作 。
第1项:
第2项:
2. 再给第二项套上迹
其中定义
综上,
根据导数与微分的联系
例5:
解:首先把
根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
根据迹技巧:
矩阵乘法/逐元素乘法交换:
,其中 尺寸相同。两侧都等于 。
所以:
2. 给
根据导数与微分的联系
2.3 迹函数对向量或矩阵的求导
迹函数对对向量矩阵求导这一大类问题,其实更简单,因为它省去了Algorithms中的第1,2步,相当于已经帮你套上了
例6:求
解:直接假设
1. 先使用矩阵乘法法则求微分
矩阵
根据导数与微分的联系
例7:求
解:直接假设
1. 先使用矩阵乘法法则求微分
我们一项一项化简:
第1项
第2项
所以:
根据导数与微分的联系
本节我们讨论矩阵向量求导链式法则,使用该法则很多时候可以帮我们快速求出导数结果。
标量对向量的求导,标量对矩阵的求导使用分母布局, 向量对向量的求导使用分子布局。
有的时候并不需要使用链式法则,比如下面的例子:
例8:
解:我们可以先求出
根据上面的Algorithms:
1. 先使用矩阵乘法法则求微分
根据导数与微分的联系
为求
而
根据导数与微分的联系
但是很多时候,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。需要一些简洁的方法。
3.1 向量对向量求导的链式法则
假设多个向量存在依赖关系,比如三个向量
从维度的角度我们也可以验证上述做法的合理性:等号左侧是一个
等号右侧是一个
但是要注意的是要求所有有依赖关系的变量都是向量,如果有一个
3.2 标量对多个向量的链式求导法则
在机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量,无法使用上一节的链式求导法则,比如2个向量
但可以确定的是:
我们发现,按照我们定义的布局方式(忘了请再看一遍第1节),
上述原则可以推广到依赖关系链更加复杂的情况,比如我们有依赖关系:
注意,这个链式法则只适用于依赖关系为:
例9:
解:这道题我们再用链式法则做一遍:
依然是求标量对向量的导数。首先解决这个向量模的平方的问题:
令
根据
这里需要注意
3.3 标量对多个矩阵的链式求导法则
标量对多个矩阵的链式求导法则,假设有这样的依赖关系:
矩阵对矩阵的求导是比较复杂的定义,留到下一节专门讨论。所以这里暂时只给出了对矩阵中一个标量的链式求导方法,即如何求解
而对于
例10:
解:不使用
这里请注意这个
这里
故有:
所以:
同理,若
可以使用维度来检验相容性。
前面我们研究的内容可以用下表来概括:
本节要研究的是矩阵对矩阵的求导,即表中的空白部分。
之前我们定义了向量
那矩阵
首先根据定义法的思想,应包含所有
此时,你手里的2个矩阵变成了2个向量:
接下来我们就可以按照之前的做法,求向量对向量的导数了。
这样,矩阵对矩阵的导数就转化为了向量对向量的导数:
按此定义,
为避免混淆,用记号
再次强调本节使用的是分母布局,机器学习和优化中的梯度矩阵采用此定义。而控制论等领域中的
同样通过向量化定义矩阵
标量对矩阵的二阶导数,又称Hessian矩阵,定义为
微分法求矩阵对矩阵导数的基本思想,算法如下:
:
1. 根据给定的寻找 。
2. 将向量化为 ,使用矩阵等价变形和向量化的技巧化简。
3. 等号右边化简之后先找到,根据分母布局导数与微分的联系 得到 。
根据上述Algorithms,理论上对于任何求矩阵对矩阵导数的问题可以三步搞定。
但只有基本思想还远远不够,因为要化简
2. 矩阵乘法:
举个例子:
3. 转置:
4. 逐元素乘法:
矩阵的
1 假设
证明:
对
直接求导得到
令
证明:
对
2 假设
可以对
从导数与微分的联系入手,
例11:
解:根据上面的Algorithms:
1. 先根据给定的
2. 将
3. 根据导数与微分的联系
例12:
解:首先求
此时相当于是:
根据上面的Algorithms:
1. 先根据给定的
2. 将
3. 根据导数与微分的联系
结果是对称矩阵。在
例13:
解:根据上面的Algorithms:
1. 先根据给定的
2. 将
3. 根据导数与微分的联系
例14:
解:
首先要分清楚要求的东西是什么对什么的导数:
所以:
先求微分:
其中,
根据向量对向量的导数与微分的联系是:
例15:
样本
解:
首先要分清楚要求的东西是什么对什么的导数:
定义矩阵
首先求
这里没法直接求
所以:
再求
根据上面的Algorithms:
1. 先根据给定的
根据向量对向量的导数与微分的联系是:
例16:
解:例5中已经求得了:
再求
根据上面的Algorithms:
1. 先根据给定的
定义
定义矩阵
2. 将
3. 根据导数与微分的联系
标量对矩阵/向量的导数与微分的联系是:
:
1. 根据给定的寻找 。
2. 给套上迹 。等号左边因为 是个标量,所以不受影响,等号右边根据迹的技巧进行化简。
3. 等号右边化简之后先找到,
根据导数与微分的联系得到 。
向量对向量的导数与微分的联系是:
矩阵对矩阵的导数与微分的联系是:
:
1. 根据给定的寻找 。
2. 将向量化为 ,使用矩阵等价变形和向量化的技巧化简。
3. 等号右边化简之后先找到,根据分母布局导数与微分的联系 得到 。
推荐阅读