矩阵求导公式的推导和计算(公式推导法)

矩阵求导公式的推导和计算(公式推导法)

  • 引言
  • 全微分公式
  • 一个例子
  • 链式求导法则的应用

引言

在上一篇文章《机器学习中的向量求导和矩阵求导》中,我们介绍了关于矩阵求导和向量求导的一些定义和计算方式。这些内容对于理解向量和矩阵的求导,以及在公式中矩阵和向量的大小是如何能够合法化的非常有帮助。

但是在实际的公式推导中,我们不可能按照定义逐个进行求导,一方面这样很麻烦,另一方面,对于包含矩阵和向量的公式的求导用这种方式进行求解也是不合适的。就好像你不会每次在求导的时候都是从极限的定义开始求解的一样。

这部分内容,相信大部分同学和我一样,在简单推导的时候还可以看个大概,遇到复杂的就不知所云。究其原因,还是在看公式推导的时候,只做到了大概了解。对于为什么某个求导的时候,后边的向量放到了前面之类的形式根本不知道为什么。举例来说,对于公式 f = a T X b f=\bm{a^\mathsf{T}Xb} f=aTXb,标量 f f f对向量 X \bm{X} X的偏导结果 ∂ f ∂ X = a b T \frac{\partial{f}}{\partial{\bm{X}}}=\bm{ab^{\mathsf{T}}} Xf=abT,为什么是这个结果?根据我们提到的上一篇文章《机器学习中的向量求导和矩阵求导》中的内容,求导的结果是分母布局的,为什么是这个布局……

全微分公式

在这篇文章中,我们将对包含矩阵和向量(向量也可以理解为是矩阵,只不过每一行只包含一列而已)的公式求偏导的内容进行介绍。对于公式的推导就会有条不紊。在对矩阵和向量的求导中,我们不从矩阵或向量的每一个元素的角度进行理解,我们从整体的角度进行运算1

首先,我们给出一个公式:

d f = t r ( ∂ f ∂ X T d X ) (1) df = tr({\frac{\partial{f}}{\partial{\bm{X}}}}^{\mathsf{T}}d\bm{X}) \tag{1} df=tr(XfTdX)(1)

首先,在这个公式中,首先:

  • tr表示迹,表示一个方阵的对角线元素之和。
  • 对于标量结果 f f f(loss,一般就是所有loss的加和,标量),其对矩阵 X ∈ R m × n \bm{X} \in \mathbb{R}^{m \times n} XRm×n求偏导,相当于在 m × n m \times n m×n的矩阵上求偏导,将所有偏导值与对应方向的偏微分进行相乘并加和可以得到 f f f的全微分。针对公式(1),用矩阵的形式来表达,也即微分矩阵 d X ∈ R m × n d\bm{X} \in \mathbb{R}^{m \times n} dXRm×n与偏导矩阵的内积就是 f f f 的全微分 d f df df
  • 相同尺寸的矩阵 A \bm{A} A B \bm{B} B的内积可以表示为 t r ( A T B ) tr(\bm{A^{\mathsf{T}}B}) tr(ATB)。(相同尺寸的矩阵 A \bm{A} A B \bm{B} B的内积表示矩阵对应位置元素逐个相乘的总和,即 i n n e r − P r o d u c t ( A , m a t h s f B ) = ∑ i , j A i j B i j inner-Product(\mathsf{A}, mathsf{B})=\sum_{i,j}\mathsf{A}_{ij}\mathsf{B}_{ij} innerProduct(A,mathsfB)=i,jAijBij。相关证明可以自行百度,理解的话其实就是 A T \bm{A}^{\mathsf{T}} AT 的第 i i i 行,与 B \bm{B} B 的第 i i i 列元素的内积就是 A \bm{A} A 中第 i i i 列与 B \bm{B} B 的第 i i i 列元素对应相乘并加和。因此,对角线元素加和就相当于两同形矩阵的对应元素之和。
  • 最终的求偏导结果,我们只需要将原方程的微分形式写成公式(1)的形式,就可以计算出偏导矩阵 ∂ f ∂ X \frac{\partial{f}}{\partial{\bm{X}}} Xf

一个例子

上文提到的例子, f = a T X b f=\bm{a^\mathsf{T}Xb} f=aTXb 是最常见的一种形式。我们以它为例子进行运算。在上面的式子中,向量 a ∈ R m a \in \mathbb{R}^{m} aRm,向量 b ∈ R n b \in \mathbb{R}^{n} bRn,矩阵 X ∈ R m × n X \in \mathbb{R}^{m \times n} XRm×n

首先,两边取微分,得到 d f = a T ( d X ) b (2) df=\bm{a^\mathsf{T}}(d\bm{X})\bm{b} \tag{2} df=aT(dX)b(2)

因为 d f df df是标量,所以 t r ( d f ) = d f tr(df) = df tr(df)=df,两边加上tr标记,我们就可以得到下式
d f = t r ( a T ( d X ) b ) (3) df=tr(\bm{a^\mathsf{T}}(d\bm{X})\bm{b}) \tag{3} df=tr(aT(dX)b)(3)

又由于 t f ( a b ) = t r ( b a ) tf(ab)=tr(ba) tf(ab)=tr(ba),所以
d f = t r ( b ( a T ( d X ) ) ) (4) df=tr(\bm{b}( \bm{a^\mathsf{T}}(d\bm{X}))) \tag{4} df=tr(b(aT(dX)))(4)

我们应用结合律去掉多余的括号,并将 d X d\bm{X} dX前面的内容加转置符号就可以得到结果,如下所示:
d f = t r ( ( ( a b T ) T d X ) (5) df=tr(( (\bm{a}\bm{b^\mathsf{T}})^{\mathsf{T}} d\bm{X}) \tag{5} df=tr(((abT)TdX)(5)

现在整个式子已经呈现公式(1)的样子,我们就可以得到结果了:
∂ f ∂ X = a b T \frac{\partial{f}}{\partial{\bm{X}}} = \bm{a}\bm{b^\mathsf{T}} Xf=abT

链式求导法则的应用

对于带有两层或者多层中间变量的偏导数的求法,我们一样将中间变量 d Z d\bm{Z} dZ表示成 d X d\bm{X} dX的形式就可以得出想要的结果了。


  1. 矩阵求导术 ↩︎

你可能感兴趣的:(笔记,线性代数,机器学习,神经网络)