机器学习-矩阵求导
整理自公众号--数据挖掘机养成记,穆哥写的矩阵求导真的太赞,生动有趣,由浅入深,先贴一张公众号的二维码,欢迎大家关注!
![](https://img.haomeiwen.com/i4155986/6d7f874535328f0a.png)
好了,正式进入正题:
1、引言
比如我们要计算:
![](https://img.haomeiwen.com/i4155986/a39fe8e3d5724b3d.png)
如果想省事,那么咱们不妨去查表吧,好了,度娘大显神通,我们得到了结果:
![](https://img.haomeiwen.com/i4155986/28b9636fe24fa9ef.png)
好像还有这么个公式:
![](https://img.haomeiwen.com/i4155986/2f289bf01b9fea25.png)
对比一下(1)和(2),似乎求导对象分别是行向量和列向量时,结果做个转置就行了?
所以,根据链式求导法则,有:
![](https://img.haomeiwen.com/i4155986/81cf7dc779da2fc2.png)
为什么,我们用链式求导法则求出的结果,和百度得到的结果不同?问题出在哪里了?链式求导错了,还是我们百度的结果不对?
其实真相是:矩阵求导有不同的规则
2、矩阵求导的两种规则
矩阵求导,说白了,就是矩阵或者向量里的每个元素,对别的矩阵或者向量里每个元素求导,然后把所有的求导结果,按一定规则排列在一起。规则是什么呢?不着急,我们一步步揭开它的神秘面纱。
这节,我们将从标量到向量再到矩阵,一步步探讨,为何会有不同的规则。
忽略最简单的情形--标量对标量求导,因为结果还是标量,不存在意义。
接下来我们探讨:向量对标量求导 和 标量对向量求导
首先我们约定,所有的向量都是列向量,那么对于向量x和标量a,x对a求导的结果是个列向量,结果中的每个元素是x里的每个元素对a求导的结果,而a对x求导,结果也可以认为是列向量,里面元素是a对x里每个元素求导。
上面这一点大家没有疑问吧,下面讨论 向量对向量求导 ,假设两个向量x和y,我们准备求解y对x求导,我们可以得到如下两条思路:
(1) y里的元素分别对x求导(即参照标量对向量求导)
(2) y分别对x里的元素求导(即参照向量对标量求导)
当采用思路1来解决这个问题,根据之前的讨论,我们会得到一系列的列向量,我们将这些列向量横向排列起来,组成一个二维矩阵,我们得到:
![](https://img.haomeiwen.com/i4155986/a1c135ca60c5e077.png)
上面每一列的结果就是按照标量对向量求导的规则得到的。
当采用思路2来解决这个问题时,根据之前的讨论,我们仍然可以得到一系列列向量,将这些向量排列我们可以得到:
![](https://img.haomeiwen.com/i4155986/ab9da293d9dd6d6f.png)
上面每一列的结果就是按照向量对标量求导的规则得到的。
讲道理,y对x求导应该只有一种结果,但是按照两种思路得到的结果,是互为转置的。
问题出现在哪里呢?回顾我们之前讨论的向量对标量和标量对向量的求导结果,我们草率地将结果都设为了列向量,然后导致了两种思路求解向量对向量求导结果的不同,所以我们需要区别对待向量对标量和标量对向量这两种情形,即:
规则1:当我们把标量对向量的求导结果认为是列向量时,向量对标量的求解结果就是一个行向量
规则2:当我们把向量对标量的求解结果认为是列向量时,标量对向量的求导结果就是一个行向量
这就引出了布局的概念
2.1 分母布局
从规则1不难发现,对于向量标量求导的两种情形,我们把标量对向量的求导结果作为列向量,也就是跟分母一致,而当向量出现在分子上时,我们会做一个转置,所以这种规则叫做分母布局即:
标量对向量求导:
![](https://img.haomeiwen.com/i4155986/6ff328818817c5e0.png)
向量对标量求导:
![](https://img.haomeiwen.com/i4155986/5c0327cd4c3c6fc8.png)
2.2 分子布局
同理,规则2是当向量出现在分子上时,我们把结果跟分子保持一致,所以这种规则叫做分子布局,情形跟分母布局互为转置,所以在两种布局下,向量对向量求导会得到两种互为转置的结果。
所以当我们讨论向量对向量求导时,我们默认分子分母都是列向量,二档分子分母都是行向量时,做个转置即可:
![](https://img.haomeiwen.com/i4155986/a4e4c0cbe40c2206.png)
那么问题来了,当分子是行向量,分母是列向量的时候,该怎么处理呢?这里我们不讲道理地把行向量对列向量求导,等同于列向量对列向量求导,即:
![](https://img.haomeiwen.com/i4155986/f7b8e25694db72a9.png)
至此,我们终于理清了向量对向量求导的所有情形,并引出了两种通用的规则,或者说布局,接下来进一步讨论标量对矩阵和矩阵对标量求导的情形,如果我们把矩阵看作是一系列的列向量,那套用上面讨论的标量和向量求导的情形,可以很容易得知:
在分母布局下,标量a对矩阵A求导,相当于a对A里的每个元素求导,结果跟矩阵A的size一致,而A对a求导,相当于A里面每个元素对a求导后做个转置。
在分子布局下,a对A求导,相当于a对A里的每个元素求导,再做个转置。而A对a求导,相当于A里每个元素对a求导,结果跟矩阵A的size一致。
这样我们就讨论完了矩阵求导的情形。
3、再回首
好了,我们再次回顾一下问斩一开头提到的悖论:
![](https://img.haomeiwen.com/i4155986/df5b1eb5ee0c6c25.png)
仔细推导可以发现,上面的式子是通过分母规则求得的,如果使用分子规则,我们可以得到如下的结果:
![](https://img.haomeiwen.com/i4155986/c5d898052203471f.png)
推导过程如下:
![](https://img.haomeiwen.com/i4155986/83a27d819dd822ea.jpeg)
另一个的例子就不推导啦,感兴趣的同学可以自己推导。
4、常见的矩阵求导公式:
![](https://img.haomeiwen.com/i4155986/3864cd68c549b207.png)