前言
在大学的微积分课程中,我们学习过关于标量函数的导数。但是当我们求解一个多元函数的极值时,单独一个自变量的偏导数往往不能告诉我们太多信息,于是我们有一种天然的想法是要把每个自变量的偏导数放在一起,看看他们的联合效果如何。这个过程其实是一个向量求导的过程。也就是说,我们把每个元素单独求偏导的结果按照一个顺序放入一个向量,与用这些元素组成的向量对函数直接求导,结果是一样的。因为这些非标量的求导过程实在太重要,我把他们整理到了这个博客中。
-
矩阵求导的分类
由于我们现在有三种不同维度的数据容器,我们一共可以求出3*3=9种不同类型的导数,这几种导数的形状也各不相同。幸运的是,通常我们只需要了解其中一部分,就可以满足工作中的大部分需求。
上图是九种组合的情况,其中小写字母x、加粗小写字母x以及加粗大写字母X分别表示标量、向量和矩阵。
标量对标量的导数是自变量在变化一个微小值时函数值的变化比例,我们已经在学校里接触过了,这里九不再赘述。剩余的还有五种求导形式较为简单,是我们首先应该掌握的:
- 标量对向量和矩阵求导
- 向量或矩阵对标量求导
- 向量对向量求导
而向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导则更加繁琐,我们在这里不做进一步介绍。
-
求导结果的布局
然而还有一件事应该先解决,即求导结果的形式。我们在前言里说过,标量对向量的求导,等于标量对每个分量求导再把求导的结果放到一个向量中。但这其实是不严谨的,因为我们没有说明按照列向量来放置这些结果,还是按照行向量来放。事实上,两者都可以,取决于一个概念:矩阵求导的布局。通常大部分时候,我们在谈论到一个向量时,除了特殊说明,都默认这是一个列向量。当我们用标量对向量求导时,如果我们选择将求导结果依然按照列排列,那么我们把这种布局方式称为分母布局(求导结果的行数与分母相同)。显而易见,分子布局下求导的结果应该是分母布局的转置。具体来说,这九种求导的形状如下:
-
标量对向量和矩阵的求导
正如我们前文所述,当一个标量是一个向量中分量的函数时,我们可以尝试拿这个标量对向量进行求导。
图一:标量对向量的求导
标量对矩阵的求导,推导过程是相似的。首先,我们将矩阵分块成一个列向量的形式,然后按照向量求导进行处理;对于每个求导后的分量,再次用向量求导的方式去处理。那么对于一个m*n的矩阵,我们的求导结果就是标量对矩阵中每个元素求导的结果,按照原矩阵形状放到一起而已。
-
向量或矩阵对标量的求导
向量或者矩阵对标量的求导,只需要将前者的每个元素对标量进行求导,再按照指定的布局方式放置即可。
以上,就是涉及到标量的四种求导。剩下还有一种向量对向量的求导,以及一些相关的常用公式,我们放到下一节再介绍。
参考文献:https://www.cnblogs.com/pinard/p/10750718.html
https://www.jianshu.com/p/d4277f9db7a0