在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。
本文主要是对刘建平的机器学习中的矩阵向量求导系列文章的整理和转载,并融入了CSDN、知乎等平台上相关文章要点的学习心得,主要参考链接附在文章结尾处。
1|0求导定义与求导布局
1|1矩阵求导引入
在高等数学里面,我们已经学过了标量对标量的求导,比如标量yy对标量xx的求导,可以表示为∂y|∂x。
有些时候,我们会有一组标量yi(i=1,2,…,m)yi(i=1,2,…,m)来对一个标量xx求导,那么我们会得到一组标量求导的结果:
∂yi|∂x,i=1,2.,,,m
如果我们把这组标量写成向量的形式,即维度为m的一个向量yy对一个标量xx求导,那么结果也是一个m维的向量:∂y∂x。
可见,所谓向量对标量的求导,其实就是向量里的每个分量分别对标量求导,最后把求导的结果排列在一起,按一个向量表示而已。类似的结论也存在于标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导等。
总而言之,所谓的矩阵向量求导本质上就是多元函数求导,仅仅是把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更加简洁而已。
为了便于描述,后面如果没有指明,则求导的自变量用xx表示标量,xx表示n维向量,XX表示m×nm×n维度的矩阵,求导的因变量用yy表示标量,yy表示m维向量,YY表示p×qp×q维度的矩阵。
2|0矩阵求导定义
根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义,如下:
这9种里面,标量对标量的求导高数里面就有,不需要我们单独讨论,在剩下的8种情况里面,本节先讨论上图中标量对向量或矩阵求导,向量或矩阵对标量求导,以及向量对向量求导这5种情况。另外三种向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导在第3节再讲。
现在我们回看前面讲到的例子,维度为m的一个向量yy对一个标量xx的求导,那么结果也是一个m维的向量:∂y∂x∂y∂x。这是我们表格里面向量对标量求导的情况。这里有一个问题没有讲到,就是这个m维的求导结果排列成的m维向量到底应该是列向量还是行向量?
这个问题的答案是:行向量或者列向量皆可!毕竟我们求导的本质只是把标量求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一,乱套了。
为了解决这个问题,我们引入求导布局的概念。
2|1矩阵向量求导布局
为了解决矩阵向量求导的结果不唯一,我们引入求导布局。最基本的求导布局有两个:分子布局(numerator layout)和分母布局(denominator layout )。
- 对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量y是一个m维的列向量,那么求导结果∂y|∂x也是一个m维列向量。如果向量yy是一个m维的行向量,那么求导结果∂y|∂x也是一个m维行向量。
- 对于分母布局来说,我们求导结果的维度以分母为主,比如对于我们上面对标量求导的例子,如果向量y是一个m维的列向量,那么求导结果∂y|∂x是一个m维行向量。如果向量y是一个m维的行向量,那么求导结果∂y|∂x是一个m维的列向量向量。
可见,对于分子布局和分母布局的结果来说,两者相差一个转置。
再举一个例子,标量y对矩阵X求导,那么如果按分母布局,则求导结果的维度和矩阵XX的维度m×n是一致的。如果是分子布局,则求导结果的维度为n×m。
这样,对于标量对向量或者矩阵求导,向量或者矩阵对标量求导这4种情况,对应的分子布局和分母布局的排列方式已经确定了。
稍微麻烦点的是向量对向量的求导,本文只讨论列向量对列向量的求导,其他的行向量求导只是差一个转置而已。比如m维列向量y对n维列向量x求导,它的求导结果在分子布局和分母布局各是什么呢?
对于这2个向量求导,那么一共有mn个标量对标量的求导。求导的结果一般是排列为一个矩阵。如果是分子布局,则矩阵的第一个维度以分子为准,即结果是一个m×n的矩阵,如下:
上边这个按分子布局的向量对向量求导的结果矩阵,我们一般叫做雅克比 (Jacobian)矩阵。
如果是按分母布局,则求导的结果矩阵的第一维度会以分母为准,即结果是一个n×m的矩阵,如下
上边这个按分母布局的向量对向量求导的结果矩阵,我们一般叫做梯度矩阵。
有了布局的概念,我们对于上面5种求导类型,可以各选择一种布局来求导。但是对于某一种求导类型,不能同时使用分子布局和分母布局求导。
但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧,本文中会以分子布局的雅克比矩阵为主。
具体总结如下:
2|2矩阵向量求导基础总结
有了矩阵向量求导的定义和默认布局,我们后续就可以对上表中的5种矩阵向量求导过程进行一些常见的求导推导并总结求导方法,并讨论向量求导的链式法则。
3|0定义法
上一节主要讨论了向量矩阵求导的9种定义与求导布局的概念。本节就其中的标量对向量求导,标量对矩阵求导, 以及向量对向量求导这三种场景的基本求解思路进行讨论。
对于本文中的标量对向量或矩阵求导这两种情况,如上节所说,以分母布局为默认布局。向量对向量求导,以分子布局为默认布局。如遇到其他文章中的求导结果和本文不同,请先确认使用的求导布局是否一样。另外,由于机器学习中向量或矩阵对标量求导的场景很少见,本文不会单独讨论这两种求导过程。
3|1用定义法求解标量对向量求导
标量对向量求导,严格来说是实值函数对向量的求导。即定义实值函数f:Rn→Rf:Rn→R,自变量x是n维向量,而输出y是标量。对于一个给定的实值函数,如何求解∂y|∂x呢?
首先我们想到的是基于矩阵求导的定义来做,由于所谓标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导&#