Python社区  »  机器学习算法

三步搞定机器学习核心:矩阵求导

新机器视觉 • 1 周前 • 28 次点击  

点击下方卡片,关注“新机器视觉”公众号

视觉/图像重磅干货,第一时间送达


作者丨科技猛兽@知乎 编辑丨极市平
来源丨https://zhuanlan.zhihu.com/p/262751195

导读

 

本文系统地梳理了矩阵求导中需要用到的各种方法,并给出了多个例题,步骤非常详细。


矩阵求导是一类贯穿机器学习,微分方程,概率统计,控制论,凸优化等诸多数学学科的极其重要的操作,遗憾的是,在许多工科专业大学阶段的课本中鲜有系统讲解这部分知识的章节,而许多论文默认读者已经具备了矩阵求导的能力,所以我们值得花时间好好讨论一下如何进行矩阵求导。本文的目的就是系统地梳理一遍矩阵求导的方法,在写作期间很多思路来自于许多很有意义的文章,不胜感激,在此一一列举出作者:

长躯鬼侠:矩阵求导术(上)
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.1 矩阵求导术

在高等数学里面,我们已经学过了标量对标量的求导,比如标量 对标量 的求导,可以表示为 。也学过一个m维向量 对标量 的求导,结果也是个m维向量 。这个m维向量的每一维就是向量 的每一维分别对标量 的导数。

所以我们推测:不论是向量也好,矩阵也好,对向量求导也好,对矩阵求导也好,结果都可以转化成标量之间的求导,最后把结果按照一定的方式拼接起来,以向量或者矩阵的形式表达出来而已。

根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义,如下:

其中前2种标量对标量的求导以及向量对标量的求导高数中已经介绍,我们着重讨论剩下的7种情况。

1.2 分子布局和分母布局

依旧使用一个m维向量 对标量 的求导,结果也是个m维向量  来举例,我们很确定 是一个m维向量,可问题是:它究竟应该表示成行向量,还是表示成列向量呢?

答案是:都可以。求导的本质是把导数信息,即求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一,所以为了解决这个问题,我们引入求导布局的概念。

  • 分子布局:导数的维度以分子为主。
  • 分母布局:导数的维度以分母为主。

向量对标量求导(表第2项):

比如上面的 (单独提到 或者 均按照列向量讨论),如果按照分子布局,结果就会是m维列向量,与分子维度一致。如果按照分母布局,结果就会是m维行向量。

标量对向量求导(表第4项):

比如 ,注意这次自变量是列向量,因变量是标量了。如果按照分子布局,结果就会是m维行向量。如果按照分母布局,结果就会是m维列向量,与分母维度一致。

标量对矩阵求导(表第7项):

比如,标量 对矩阵 求导,那么如果按分母布局,则求导结果的维度和矩阵 的维度 是一致的。如果是分子布局,则求导结果的维度为 

矩阵对标量求导(表第3项):

比如,矩阵 对标量 求导,那么如果按分子布局,则求导结果的维度和矩阵 的维度 是一致的。如果是分母布局,则求导结果的维度为 

向量对向量求导(表第5项):

比如, 维的向量 对 维的向量 求导,一共有 个标量对标量的求导。求导的结果一般是排列为一个矩阵。那么如果按分子布局,则结果矩阵的第一个维度以分子为准,即结果是个 维的矩阵:

如果按分母布局,则结果矩阵的第一个维度以分子为准,即结果是个 维的矩阵:

结论:分子布局和分母布局的结果相差一个转置。

在机器学习的算法推导里,通常遵循以下布局的规范:

  • 如果向量或者矩阵对标量求导,则以分子布局为准。
  • 如果标量对向量或者矩阵求导,则以分母布局为准。
  • 对于向量对对向量求导,有些分歧,一般以分子布局的雅克比矩阵为主。

总结如下:

2 标量对矩阵的求导术的基本思想


2.1 定义法

在进行标量对矩阵的求导时我们默认按照分母布局,即求导的结果与矩阵的维度一致。比如 ,其中 是标量, 是m维向量, 是n维向量, 是 维的矩阵。

如果求 ,则结果是也应当是 维的矩阵。这个矩阵里面的每一个元素应该是标量 对 里面的每个元素 的导数。因为结果是分母布局,所以:

所以最后的结果应该长成这个样子:

是 维的矩阵。

当然,上面的做法相当于是硬生生把标量对矩阵的求导拆成了一堆标量对标量的求导,再把这些结果按照分母布局给组合了起来。这种方法可以称为定义法,但是它只适用于表达式不复杂,你能展开的情况。就像上面的

但如果表达式很复杂,你没法展开成分量的形式,那就没法转化成标量对标量的求导,这种方法就不再适用了。定义法所遵循的逐元素求导破坏了整体性。求导时不宜拆开矩阵,而是要找一个从整体出发的算法。即下面的微分法。

2.2 微分法

  • 在高等数学的一元微积分中,导数(标量对标量的导数)与微分有联系:
  • 在多元微积分中,梯度(标量对向量的导数)也与微分有联系:

这里第一个等号是全微分公式,第二个等号表达了梯度与微分的联系。

全微分是梯度向量与微分向量的内积;受此启发,我们将矩阵导数与微分建立联系。在这之前要先了解一个关于矩阵迹的性质:

对尺寸相同的矩阵 ,即是矩阵A,B的内积

  • 把多元微积分中的梯度与微分之间的联系扩展到矩阵,则有:

其中tr代表迹(trace)是方阵对角线元素之和,最后一步的变换是根据上面的矩阵迹的性质。

全微分是导数与微分矩阵的内积。

从上面矩阵微分的式子,我们可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:

得到这2个式子的作用是什么?

答:这2个式子里面的 和 ,正是我们要求的标量对矩阵/向量的导数

换句话说,假定题目给任意一个函数 (就比如说),求它对于里面的某个矩阵 的导数。

我们只需要先想方设法搞出来 ,那么再套上迹 ,则 就可以得到了。

这就是微分法求对矩阵导数的基本思想,算法如下:


1. 根据给定的 寻找 
2. 给 套上迹 。等号左边因为 是个标量,所以不受影响,等号右边根据迹的技巧进行化简。
3. 等号右边化简之后先找到 ,根据导数与微分的联系得到 

根据上述Algorithms,理论上对于任何求对矩阵导数的问题可以三步搞定。

但只有基本思想还远远不够,因为要搞出来 ,你还需要掌握一些矩阵微分的操作,如下面常用的矩阵微分运算法则所示,这些法则更详细的解读可以参考张贤达教授的《矩阵分析与应用》

  • 常用的矩阵微分运算法则:
  1. 加减法:
  2. 矩阵乘法:
  3. 转置:
  4. 迹:
  5. 逐元素乘法:表示尺寸相同的矩阵 逐元素相乘。
  6. 逆:。此式可在两侧求微分来证明。
  7. 行列式:,其中表示X的伴随矩阵,在 可逆时又可以写作
  8. 逐元素函数: 是逐元素标量函数运算, 是逐元素求导数。

例如:

除此之外,微分法求对矩阵导数的基本思想的很重要的一步是给 套上迹 ,所以,矩阵的迹技巧(trace trick)也非常重要,下面列举一些:

  • 迹技巧(trace trick):

标量的迹等于自己:

转置:

线性:

交换律:,其中尺寸相同。两侧都等于 

矩阵乘法/逐元素乘法交换:,其中尺寸相同。两侧都等于

以上就是微分法求对矩阵导数的方法,在实际操作时万不可随意套用微积分中标量导数的结论,比如认为对 的导数为 ,这是没有根据的。

下面举2个很经典的例子:

例1:,求。其中列向量,矩阵,列向量,是标量。

解:根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分 

这里的是常量,,故有:

2. 给 套上迹 

3. 使用迹技巧做矩阵乘法交换。根据有:

根据导数与微分的联系

有:


与一开始所用的定义法结果吻合。

例2:,求。其中列向量,矩阵,列向量,exp表示逐元素求指数,是标量。

解:根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分 

2. 给  套上迹 

3. 使用迹技巧做矩阵乘法交换:

根据有:

 

根据导数与微分的联系有:

例3:, 求的最小二乘估计,即求的零点。其中列向量,矩阵,列向量,是标量。

解:依然是求标量对向量的导数。首先解决这个向量模的平方的问题:

根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分  

2. 给 套上迹 

根据导数与微分的联系有:

,有:

,得到的最小二乘估计为

例4:样本,求方差的最大似然估计。写成数学式是:,求的零点。其中列向量,是样本均值,对称正定矩阵,是标量,log表示自然对数。

解:本题可以转化成求的问题。

根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分 

但是要求出 需要用到之前讲解的几个关于矩阵微分的性质:

逆:
行列式:,其中表示X的伴随矩阵,在 可逆时又可以写作

第1项:

第2项:

2. 再给第二项套上迹 

其中定义为样本方差矩阵。

综上,

根据导数与微分的联系有:

,其零点即的最大似然估计为

例5:,求。其中是除一个元素为1外其它元素为0的列向量,矩阵,列向量,是标量;log表示自然对数,,其中表示逐元素求指数,代表全1向量。

解:首先把 展开,注意逐元素log满足等式,以及满足。得到:

根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分 

根据迹技巧:

矩阵乘法/逐元素乘法交换:,其中尺寸相同。两侧都等于

所以:

2. 给 套上迹 

根据导数与微分的联系有:

2.3 迹函数对向量或矩阵的求导

迹函数对对向量矩阵求导这一大类问题,其实更简单,因为它省去了Algorithms中的第1,2步,相当于已经帮你套上了 

例6:求 对于矩阵 的导数。

解:直接假设 ,按照Algorithms一步一步来:

1. 先使用矩阵乘法法则求微分 

矩阵 相当于常数,故有:

根据导数与微分的联系有:

例7: 求 对于矩阵 的导数。

解:直接假设 ,按照Algorithms一步一步来:

1. 先使用矩阵乘法法则求微分 

我们一项一项化简:

第1项 里面有个烦人的 ,想办法把它化简掉,根据迹的转置不变性交换律有:

第2项 

所以:

根据导数与微分的联系有:


3 标量对矩阵的求导术的链式法则


本节我们讨论矩阵向量求导链式法则,使用该法则很多时候可以帮我们快速求出导数结果。

标量对向量的求导,标量对矩阵的求导使用分母布局, 向量对向量的求导使用分子布局。

有的时候并不需要使用链式法则,比如下面的例子:

例8:,求 。其中矩阵,矩阵,矩阵,对称矩阵,是逐元素函数,是标量。

解:我们可以先求出,再使用一些手段来得到 

根据上面的Algorithms:

1. 先使用矩阵乘法法则求微分 

根据导数与微分的联系有:

 

为求,写出

而