在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦。因此我们需要其他的一些求导方法。本文我们讨论使用微分法来求解标量对向量的求导,以及标量对矩阵的求导。
本文的标量对向量的求导,以及标量对矩阵的求导使用分母布局。如果遇到其他资料求导结果不同,请先确认布局是否一样。
1. 矩阵微分
在高数里面我们学习过标量的导数和微分,他们之间有这样的关系: d f = f ′ ( x ) d x df=f'(x)dx df=f′(x)dx。如果是多变量的情况,则微分可以写成:
d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ) T d x df=\sum\limits_{i=1}^n\frac{\partial f}{\partial x_i}dx_i = (\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x} df=i=1∑n∂xi∂fdxi=(∂x∂f)Tdx
从上次我们可以发现标量对向量的求导和它的向量微分有一个转置的关系。
现在我们再推广到矩阵。对于矩阵微分,我们的定义为:
d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f ∂ X ) T d X ) df=\sum\limits_{i=1}^m\sum\limits_{j=1}^n\frac{\partial f}{\partial X_{ij}}dX_{ij} = tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X}) df=i=1∑mj=1∑n∂Xij∂fdXij=tr((∂X∂f)TdX)
其中第二步使用了矩阵迹的性质,即迹函数等于主对角线的和。即
t r ( A T B ) = ∑ i , j A i j B i j tr(A^TB) = \sum\limits_{i,j}A_{ij}B_{ij} tr(ATB)=i,j∑AijBij
从上面矩阵微分的式子,我们可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:
d f = t r ( ( ∂ f ∂ X ) T d X ) d f = t r ( ( ∂ f ∂ x ) T d x ) df= tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X})\;\; \;df= tr((\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x}) df=tr((∂X∂f)TdX)df=tr((∂x∂f)Tdx)
2. 矩阵微分的性质
我们在讨论如何使用矩阵微分来求导前,先看看矩阵微分的性质:
1)微分加减法: d ( X + Y ) = d X + d Y , d ( X − Y )