机器学习中的矩阵向量求导(一) 求导定义与求导布局

    在之前写的上百篇机器学习博客中,不时会使用矩阵向量求导的方法来简化公式推演,但是并没有系统性的进行过讲解,因此让很多朋友迷惑矩阵向量求导的具体过程为什么会是这样的。这里准备用几篇博文来讨论下机器学习中的矩阵向量求导,今天是第一篇。

    本系列主要参考文献为维基百科的Matrix Caculas和张贤达的《矩阵分析与应用》。

1. 矩阵向量求导引入

    在高等数学里面,我们已经学过了标量对标量的求导,比如标量y" role="presentation" style="position: relative;">𝑦y对标量x" role="presentation" style="position: relative;">𝑥x的求导,可以表示为∂y∂x" role="presentation" style="position: relative;">∂𝑦∂𝑥∂y∂x。

    有些时候,我们会有一组标量yi,i=1,2,...,m" role="presentation" style="position: relative;">𝑦𝑖,𝑖=1,2,...,𝑚yi,i=1,2,...,m来对一个标量x" role="presentation" style="position: relative;">𝑥x的求导,那么我们会得到一组标量求导的结果:

∂yi∂x,i=1,2.,,,m" role="presentation" style="position: relative;">∂𝑦𝑖∂𝑥,𝑖=1,2.,,,𝑚∂yi∂x,i=1,2.,,,m

    如果我们把这组标量写成向量的形式,即得到维度为m的一个向量y" role="presentation" style="position: relative;">𝐲y对一个标量x" role="presentation" style="position: relative;">𝑥x的求导,那么结果也是一个m维的向量:∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x

    可见,所谓向量对标量的求导,其实就是向量里的每个分量分别对标量求导,最后把求导的结果排列在一起,按一个向量表示而已。类似的结论也存在于标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导等。

    总而言之,所谓的向量矩阵求导本质上就是多元函数求导,仅仅是把把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更加简洁而已。

    为了便于描述,后面如果没有指明,则求导的自变量用x" role="presentation" style="position: relative;">𝑥x表示标量,x" role="presentation" style="position: relative;">𝐱x表示n维向量,X" role="presentation" style="position: relative;">𝐗X表示m×n" role="presentation" style="position: relative;">𝑚×𝑛m×n维度的矩阵,求导的因变量用y" role="presentation" style="position: relative;">𝑦y表示标量,y" role="presentation" style="position: relative;">𝐲y表示m维向量,Y" role="presentation" style="position: relative;">𝐘Y表示p×q" role="presentation" style="position: relative;">𝑝×𝑞p×q维度的矩阵。

2. 矩阵向量求导定义

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

自变量\因变量 标量y" role="presentation" style="position: relative;">𝑦y 向量y" role="presentation" style="position: relative;">𝐲y 矩阵Y" role="presentation" style="position: relative;">𝐘Y
标量x" role="presentation" style="position: relative;">𝑥x ∂y∂x" role="presentation" style="position: relative;">∂𝑦∂𝑥∂y∂x ∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x ∂Y∂x" role="presentation" style="position: relative;">∂𝐘∂𝑥∂Y∂x
向量x" role="presentation" style="position: relative;">𝐱x ∂y∂x" role="presentation" style="position: relative;">∂𝑦∂𝐱∂y∂x ∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝐱∂y∂x ∂Y∂x" role="presentation" style="position: relative;">∂𝐘∂𝐱∂Y∂x
矩阵X" role="presentation" style="position: relative;">𝐗X ∂y∂X" role="presentation" style="position: relative;">∂𝑦∂𝐗∂y∂X ∂y∂X" role="presentation" style="position: relative;">∂𝐲∂𝐗∂y∂X ∂Y∂X" role="presentation" style="position: relative;">∂𝐘∂𝐗∂Y∂X

    这9种里面,标量对标量的求导高数里面就有,不需要我们单独讨论,在剩下的8种情况里面,我们先讨论上图中标量对向量或矩阵求导,向量或矩阵对标量求导,以及向量对向量求导这5种情况。另外三种向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导我们在后面再讲。

    现在我们回看第一节讲到的例子,维度为m的一个向量y" role="presentation" style="position: relative;">𝐲y对一个标量x" role="presentation" style="position: relative;">𝑥x的求导,那么结果也是一个m维的向量:∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x。这是我们表格里面向量对标量求导的情况。这里有一个问题没有讲到,就是这个m维的求导结果排列成的m维向量到底应该是列向量还是行向量?

    这个问题的答案是:行向量或者列向量皆可!毕竟我们求导的本质只是把标量求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一,乱套了。

    为了解决这个问题,我们引入求导布局的概念。

3. 矩阵向量求导布局

    为了解决矩阵向量求导的结果不唯一,我们引入求导布局。最基本的求导布局有两个:分子布局(numerator layout)和分母布局(denominator layout )。

    对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量y" role="presentation" style="position: relative;">𝐲y是一个m维的列向量,那么求导结果∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x也是一个m维列向量。如果如果向量y" role="presentation" style="position: relative;">𝐲y是一个m维的行向量,那么求导结果∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x也是一个m维行向量。

    对于分母布局来说,我们求导结果的维度以分母为主,比如对于我们上面对标量求导的例子,如果向量y" role="presentation" style="position: relative;">𝐲y是一个m维的列向量,那么求导结果∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x是一个m维行向量。如果如果向量y" role="presentation" style="position: relative;">𝐲y是一个m维的行向量,那么求导结果∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x是一个m维的列向量向量。

    可见,对于分子布局和分母布局的结果来说,两者相差一个转置。

    再举一个例子,标量y" role="presentation" style="position: relative;">𝑦y对矩阵X" role="presentation" style="position: relative;">𝐗X求导,那么如果按分母布局,则求导结果的维度和矩阵X" role="presentation" style="position: relative;">𝑋X的维度m×n" role="presentation" style="position: relative;">𝑚×𝑛m×n是一致的。如果是分子布局,则求导结果的维度为n×m" role="presentation" style="position: relative;">𝑛×𝑚n×m。

    这样,对于标量对向量或者矩阵求导,向量或者矩阵对标量求导这4种情况,对应的分子布局和分母布局的排列方式已经确定了。

    稍微麻烦点的是向量对向量的求导,本文只讨论列向量对列向量的求导,其他的行向量求导只是差一个转置而已。比如m维列向量y" role="presentation" style="position: relative;">𝐲y对n维列向量x" role="presentation" style="position: relative;">𝐱x求导。它的求导结果在分子布局和分母布局各是什么呢?对于这2个向量求导,那么一共有mn" role="presentation" style="position: relative;">𝑚𝑛mn个标量对标量的求导。求导的结果一般是排列为一个矩阵。如果是分子布局,则矩阵的第一个维度以分子为准,即结果是一个m×n" role="presentation" style="position: relative;">𝑚×𝑛m×n的矩阵,如下:

∂y∂x=(∂y1∂x1∂y1∂x2…∂y1∂xn∂y2∂x1∂y2∂x2…∂y2∂xn⋮⋮⋱⋮∂ym∂x1∂ym∂x2…∂ym∂xn)" role="presentation" style="position: relative;">∂𝐲∂𝐱=⎛⎝⎜⎜⎜⎜⎜⎜∂𝑦1∂𝑥1∂𝑦2∂𝑥1⋮∂𝑦𝑚∂𝑥1∂𝑦1∂𝑥2∂𝑦2∂𝑥2⋮∂𝑦𝑚∂𝑥2……⋱…∂𝑦1∂𝑥𝑛∂𝑦2∂𝑥𝑛⋮∂𝑦𝑚∂𝑥𝑛⎞⎠⎟⎟⎟⎟⎟⎟∂y∂x=(∂y1∂x1∂y1∂x2…∂y1∂xn∂y2∂x1∂y2∂x2…∂y2∂xn⋮⋮⋱⋮∂ym∂x1∂ym∂x2…∂ym∂xn)

    上边这个按分子布局的向量对向量求导的结果矩阵,我们一般叫做雅克比 (Jacobian)矩阵。有的资料上会使用∂y∂xT" role="presentation" style="position: relative;">∂𝐲∂𝐱𝐓∂y∂xT来定义雅克比矩阵,意义是一样的。

    如果是按分母布局,则求导的结果矩阵的第一维度会以分母为准,即结果是一个n×m" role="presentation" style="position: relative;">𝑛×𝑚n×m的矩阵,如下:

∂y∂x=(∂y1∂x1∂y2∂x1…∂ym∂x1∂y1∂x2∂y2∂x2…∂ym∂x2⋮⋮⋱⋮∂y1∂xn∂y2∂xn…∂ym∂xn)" role="presentation" style="position: relative;">∂𝐲∂𝐱=⎛⎝⎜⎜⎜⎜⎜⎜∂𝑦1∂𝑥1∂𝑦1∂𝑥2⋮∂𝑦1∂𝑥𝑛∂𝑦2∂𝑥1∂𝑦2∂𝑥2⋮∂𝑦2∂𝑥𝑛……⋱…∂𝑦𝑚∂𝑥1∂𝑦𝑚∂𝑥2⋮∂𝑦𝑚∂𝑥𝑛⎞⎠⎟⎟⎟⎟⎟⎟∂y∂x=(∂y1∂x1∂y2∂x1…∂ym∂x1∂y1∂x2∂y2∂x2…∂ym∂x2⋮⋮⋱⋮∂y1∂xn∂y2∂xn…∂ym∂xn)

    上边这个按分母布局的向量对向量求导的结果矩阵,我们一般叫做梯度矩阵。有的资料上会使用∂yT∂x" role="presentation" style="position: relative;">∂𝐲𝐓∂𝐱∂yT∂x来定义梯度矩阵,意义是一样的。

    有了布局的概念,我们对于上面5种求导类型,可以各选择一种布局来求导。但是对于某一种求导类型,不能同时使用分子布局和分母布局求导。

    但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧,我的所有文章中会以分子布局的雅克比矩阵为主。

    具体总结如下:

自变量\因变量 标量y" role="presentation" style="position: relative;">𝑦y 列向量y" role="presentation" style="position: relative;">𝐲y 矩阵Y" role="presentation" style="position: relative;">𝐘Y
标量x" role="presentation" style="position: relative;">𝑥x /

∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝑥∂y∂x

分子布局:m维列向量(默认布局)

分母布局:m维行向量

∂Y∂x" role="presentation" style="position: relative;">∂𝐘∂𝑥∂Y∂x

分子布局:p×q" role="presentation" style="position: relative;">𝑝×𝑞p×q矩阵(默认布局)

分母布局:q×p" role="presentation" style="position: relative;">𝑞×𝑝q×p矩阵

列向量x" role="presentation" style="position: relative;">𝐱x

∂y∂x" role="presentation" style="position: relative;">∂𝑦∂𝐱∂y∂x

分子布局:n维行向量

分母布局:n维列向量(默认布局)

∂y∂x" role="presentation" style="position: relative;">∂𝐲∂𝐱∂y∂x

分子布局:m×n" role="presentation" style="position: relative;">𝑚×𝑛m×n雅克比矩阵(默认布局)

分母布局:n×m" role="presentation" style="position: relative;">𝑛×𝑚n×m梯度矩阵

/
矩阵X" role="presentation" style="position: relative;">𝐗X

∂y∂X" role="presentation" style="position: relative;">∂𝑦∂𝐗∂y∂X

分子布局:n×m" role="presentation" style="position: relative;">𝑛×𝑚n×m矩阵

分母布局:m×n" role="presentation" style="position: relative;">𝑚×𝑛m×n矩阵(默认布局)

/ /

4. 矩阵向量求导基础总结

    有了矩阵向量求导的定义和默认布局,我们后续就可以对上表中的5种矩阵向量求导过程进行一些常见的求导推导总结求导方法,并讨论向量求导的链式法则。

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)

(0)

相关推荐