矩阵求导

本文为个人对下面两篇博客的总结和理解,另外包含一个Deep Learning中的神经网络的求导例子

https://zhuanlan.zhihu.com/p/24709748

https://zhuanlan.zhihu.com/p/24863977

梯度矩阵

一些定义

$n\times1$列向量偏导算子梯度算子记作$\nabla_\boldsymbol{x}$,定义为

所以实值标量函数$f(\boldsymbol{x})$的梯度向量$\nabla_\boldsymbol{x} f(\boldsymbol{x})$为$n\times 1$列向量,定义为

类似的,实值标量函数$f(X)$关于矩阵变元$X$的梯度矩阵为

矩阵的列向量化(类似numpy中的flatten):

微分推导

根据列向量导数与微分的关系有:

这里第一个等号是全微分公式,第二个等号表达了梯度与微分的联系:全微分$\text{d}f$是$n\times1$梯度向量$\frac{\partial f}{\partial \boldsymbol{x}}$与$n\times1$微分向量$\text{d}\boldsymbol x$的内积,受此启发,将矩阵导数与微分建立联系

矩阵微分的运算技巧

(1)加减法:$d(X\pm Y) = dX \pm dY $;矩阵乘法:$d(XY) = dX Y + X dY $;转置:$d(X^T) = (dX)^T $;迹:$d\text{tr}(X) = \text{tr}(dX) $。

(2)逆:$\text{d}X^{-1} = -X^{-1}\text{d}X X^{-1} $。此式可在$XX^{-1}=I$两侧求微分来证明。

(3)行列式:$\text{d}|X| = \text{tr}(X^{\sharp}\text{d}X)$,其中$X^{\sharp}$表示X的伴随矩阵,在X可逆时又可以写作$d|X|= |X|\text{tr}(X^{-1}dX)$。此式可用Laplace展开来证明,详见张贤达《矩阵分析与应用》第279页。

(4)逐元素乘法:$\text{d}(X\odot Y) = \text{d}X\odot Y + X\odot \text{d}Y$,$\odot$表示尺寸相同的矩阵X,Y逐元素相乘。

(5)逐元素函数:$\text{d}\sigma(X) = \sigma’(X)\odot \text{d}X $,$\sigma(X) = \left[\sigma(X_{ij})\right]$是逐元素运算的标量函数。

(6)链式法则:$\frac{\partial F}{\partial X} = \frac{\partial Y}{\partial X}\frac{\partial F}{\partial Y} ​$,但前提是需要准确求出各项导数

(7)在某一维上求和:$X\ \bf{1}^{(n,1)}$

迹技巧

(1)$\text{d}f=\text{tr}(\frac{\partial f}{\partial X}^T \text{d}X)$

(2)标量函数$f(X)$总可以写成迹函数的形式,即$f(X)=\text{tr}(f(X))$

(3)对于$(\text{d}X)^T$,总可以通过迹函数的性质$\text{tr}(A)=\text{tr}(A^T)$,通过$\text{tr}[Q(\text{d}X)^TR]=\text{tr}(Q^TR^T\text{d}X)$,写成迹函数微分矩阵的规范形式

(4)线性:$\text{tr}(A\pm B) = \text{tr}(A)\pm \text{tr}(B) $

(5)矩阵乘法交换:$\text{tr}(A^TB)=\text{tr}(BA^T)$,其中A与B形状相同,且等式两侧都等于$\sum_{i,j}A_{ij}B_{ij} $

(6)矩阵乘法/逐元素乘法交换: $\text{tr}(A^T(B\odot C)) = \text{tr}((A\odot B)^TC) $,其中ABC形状相同,且等式两侧都等于$\sum_{i,j}A_{ij}B_{ij}C_{ij} $

(7)得到规范形式后,利用下面的等式即可得到对应的梯度矩阵

例子

example1

以Andrew Ng的Deep Learning课程中的一个两层神经网络为例,在这里,我们希望将计算统一化,将所有的变量都视为矩阵,并且不需要知道矩阵的具体形状,只需要清楚哪些矩阵的形状相同即可。已知的条件如下:

接下来要求$\nabla_{W_1} J,\nabla_{b_1}J,\nabla_{W_2} J,\nabla_{b_2} J$四个梯度矩阵,并且尽可能的利用已经求出的梯度矩阵去计算

将$A_2$代入到$J$中,化简得到

于是

同理可以得到以下等式

对于隐层

有了这些等式后,也就很容易能够得到$\nabla_{W_1} J,\nabla_{b_1}J$了

0%