机器学习中的线性代数之矩阵求导

转自https://blog.csdn.net/u010976453/article/details/54381248

前面针对机器学习中基础的线性代数知识,我们做了一个常用知识的梳理。接下来针对机器学习公式推导过程中经常用到的矩阵求导,我们做一个详细介绍。

矩阵求导(Matrix Derivative)也称作矩阵微分(Matrix Differential),在机器学习、图像处理、最优化等领域的公式推导中经常用到。

矩阵的微积分本质上是多元变量的微积分问题,只是应用在矩阵空间上而已

根据YY 与 XX 的不同类型(实值、向量、矩阵)给出如下表中的表示:

类型标量(Scalar)yy向量(Vector)yy矩阵(Matrix)YY
Scalar xx yx∂y∂x yx∂y∂x Yx∂Y∂x
Vector xx yx∂y∂x yx∂y∂x  
Matrix XX yX∂y∂X    

下面我们根据分子的布局(即X的类型)来介绍矩阵的导数求解

0 布局约定(Layout conventions)

事实上,所有求导的法则都可以从最基本的求导规则推导出来。不知你有没发现,不同的文献中,同样的式子求导的结果有时候会不一样,仔细观察会发现刚好相差一个转置,于是我们得先说说求导的两个派别(布局)。

由向量关于向量的求导yx∂y∂x可以得出两种矛盾的表示:结果表示为n×mn×m 矩阵或m×nm×n 矩阵。也就是把yy 表示为列向量xx 表示为行向量或者反过来表示的问题。

布局(Layout):在矩阵求导中有两种布局,分别为分母布局(denominator layout)和分子布局(numerator layout)。这两种不同布局的求导规则是不一样的。 
向量 y=⎡⎣⎢⎢⎢⎢y1y2yn⎤⎦⎥⎥⎥⎥y=[y1y2⋮yn],关于标量xx 的求导,

在分子布局下,为: 

 
yx=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1xy2xynx⎤⎦⎥⎥⎥⎥⎥⎥⎥(1)(1)∂y∂x=[∂y1∂x∂y2∂x⋮∂yn∂x]

而在分母布局下,为: 
 
yx=[y1xy2xynx](2)(2)∂y∂x=[∂y1∂x∂y2∂x⋯∂yn∂x]

通过观察和推导我们可以知道,分子布局和分母布局之间刚好差一个转置,即在分子布局下与原来YY相同,而在分母布局下差一个转置。

 

对于正切矩阵yx∂y∂x采用分母布局,即YY⊤,很不符合表达的习惯,所以本文中我们采用的是分子布局。

1 关于标量的导数

对于 XX 是标量的情况,是我们最熟悉的一种情况。

1.1 标量关于标量X的求导

这中情况就是我们平时的代数求导,直接就是yx∂y∂x

1.2 向量关于标量X的求导

向量 y=⎡⎣⎢⎢⎢⎢y1y2yn⎤⎦⎥⎥⎥⎥y=[y1y2⋮yn],关于标量xx 的求导就是 yy 的每一个元素分别对xx求导,可以表示为 

 
yx=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1xy2xynx⎤⎦⎥⎥⎥⎥⎥⎥⎥(3)(3)∂y∂x=[∂y1∂x∂y2∂x⋮∂yn∂x]

此时为正切向量,yx∂y∂x 为 yy 的正切向量,有映射 yy : RmRmRm⟹Rm 。

 

1.3 矩阵关于标量X的求导

矩阵对标量的求导类似于向量关于标量的求导,也就是矩阵的每个元素分别对标量xx求导,矩阵 Y=⎡⎣⎢⎢⎢⎢⎢y11y21yn1y12y22yn2y1ny2nynn⎤⎦⎥⎥⎥⎥⎥Y=[y11y12⋯y1ny21y22⋯y2n⋮⋮⋱⋮yn1yn2⋯ynn] 对标量xx的导数为 

 
Yx=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢y11xy21xyn1xy12xy22xyn2xy1nxy2nxynnx⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥(4)(4)∂Y∂x=[∂y11∂x∂y12∂x⋯∂y1n∂x∂y21∂x∂y22∂x⋯∂y2n∂x⋮⋮⋱⋮∂yn1∂x∂yn2∂x⋯∂ynn∂x]

 

2 关于向量的导数

2.1标量关于向量 xx 的导数

标量yy 关于向量 x=⎡⎣⎢⎢⎢⎢x1x2xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn] 的求导可以表示为 

 
yx=[yx1 yx2  yxn](5)(5)∂y∂x=[∂y∂x1 ∂y∂x2 ⋯ ∂y∂xn]

此时的向量叫做梯度向量。 yx∂y∂x 为标量yy 在空间 RnRn 的梯度,该空间以xx 为基。

 

2.2 向量关于向量 xx 的导数

向量函数(即函数组成的向量)y=⎡⎣⎢⎢⎢⎢y1y2yn⎤⎦⎥⎥⎥⎥y=[y1y2⋮yn] 关于向量x=⎡⎣⎢⎢⎢⎢x1x2xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn] 的导数记作 

 
yx=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢y1x1y2x1ynx1y1x2y2x2ynx2y1xny2xnynxn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥(6)(6)∂y∂x=[∂y1∂x1∂y1∂x2⋯∂y1∂xn∂y2∂x1∂y2∂x2⋯∂y2∂xn⋮⋮⋱⋮∂yn∂x1∂yn∂x2⋯∂yn∂xn]

此时获得的矩阵yx∂y∂x​ 叫做Jacobian 矩阵。

 

2.3 矩阵关于向量 xx 的导数

矩阵 Y=⎡⎣⎢⎢⎢⎢⎢y11y21yn1y12y22yn2y1ny2nynn⎤⎦⎥⎥⎥⎥⎥Y=[y11y12⋯y1ny21y22⋯y2n⋮⋮⋱⋮yn1yn2⋯ynn] 对向量x=⎡⎣⎢⎢⎢⎢x1x2xn⎤⎦⎥⎥⎥⎥x=[x1x2⋮xn] 的导数是推导中最复杂的一种,我们可以表示为 

 
Yx=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢y11x1y21x1yn1x1y1nx2y22x2yn2x2y1nxny2nxnynnxn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥(7)(7)∂Y∂x=[∂y11∂x1∂y1n∂x2⋯∂y1n∂xn∂y21∂x1∂y22∂x2⋯∂y2n∂xn⋮⋮⋱⋮∂yn1∂x1∂yn2∂x2⋯∂ynn∂xn]

 

3 关于矩阵的导数

我们一般只考虑标量关于矩阵的导数(因为矩阵对向量和矩阵的导数与前面2.3节的内容一致或相似),即标量yy 对矩阵 XX 的导数为 yX∂y∂X ,此时的导数是梯度矩阵,可以表示为下式: 

 
yX=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢yx11yx12yx1nyx21yx22yx2nyxn1yxn2yxnn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥(8)(8)∂y∂X=[∂y∂x11∂y∂x21⋯∂y∂xn1∂y∂x12∂y∂x22⋯∂y∂xn2⋮⋮⋱⋮∂y∂x1n∂y∂x2n⋯∂y∂xnn]

 

4 维度分析

当我们对一些复杂的矩阵乘积求偏导的时候,直接求很难直接求出,这时候我们可以通过分析矩阵的维度来得到结果。例如:

考虑以下导数 Aux∂Au∂x ,其中 AA 与xx 无关 且有 ARm×nA∈Rm×n, uBbbRn×1u∈BbbRn×1 ,xRp×1x∈Rp×1,我们知道结果肯定和ux∂u∂x 有关,于是先把 AA 提出求导式,至于到了哪暂时不知道,接着我们知道 uxRp×n∂u∂x∈Rp×n,于是 AA 只能转置后添加到后面。因此有 

 
Aux=$uxA(9)(9)∂Au∂x=$∂u∂xA⊤

 

再考虑问题 xAxx∂x⊤Ax∂x ,其中 ARn×nA∈Rn×n, xRn×nx∈Rn×n , 
为了分析这个问题我们考虑一个更一半的问题 

 
xAxx(10)(10)∂x⊤Ax∂x

其中 ARn×nA∈Rn×n, xBbbRn×nx∈BbbRn×n,且 AA 与xx 和 yy 无关 。于是我们利用维度分析,采用非精确的乘积法则,可以将它分为两个部分 
 
(xA)yx(11)(11)∂(x⊤A)y∂x

于是结果与两部分相关,一个是 
 
yxRm×n(12)(12)∂y∂x∈Rm×n

另一个是 
 
xAx=ARm×n(13)(13)∂x⊤A∂x=A∈Rm×n

同样通过维度分析,我们可以得到 
 
(xA)yx=yxAx+Ay(14)(14)∂(x⊤A)y∂x=∂y∂xA⊤x+Ay

因此经过维度的比较我们可以得到 
 
xAxx=(A+A)x(14)(14)∂x⊤Ax∂x=(A⊤+A)x

 

通过以上两个示例的学习,我们可以知道在求解复杂矩阵的求导问题时,通过维度来判断矩阵的导数形式很简便同时也不容易出错。下图是机器学习中常见的矩阵求导形式,可供参考:

常见矩阵求导形式

5 总结

在本文中,我们针对机器学习推导中的矩阵求导问题做了一个全面的分析,同时结合前文 深度学习系列(二)——机器学习中的线性代数知识 介绍的机器学习中线性代数的基础知识,我们对线性代数部分做了详细的了解。下一章我们介绍机器学习中涉及到的概率知识。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010976453/article/details/54381248
posted @ 2018-04-13 21:47  月夜_1  阅读(649)  评论(0)    收藏  举报