0%

Brief Manual of Matrix Caculus

Matrix Calculus

对于矩阵函数,我们也有对应的求导法则,这些法则对于矩阵的优化是必要的,掌握它们便于我们进行实际应用中的数值分析。对于$n\times n$矩阵,以及$n\times 1$的向量:

一些例子

我们先从一些简单的函数开始,假设:

$E$是一个标量函数,$E$对$\mathrm{x}$求导的结果应该是一个和$\mathrm{x}$同样形状的向量。经过简单的运算,我们有:

假设:

这和上面的是同样情况,$E$关于$\mathrm{x}$求导结果也是一个向量。

最后一个例子可以看出链式法则在矩阵求导时是怎么起作用的,假设:

对$\mathrm{x}$求导的话,结果应该是一个向量,按照链式法则:

这种链式法则根据求导的类型,会有形式上的变化,比如左乘或者右乘。避免不出错的方式是检查运算是否合法,以及结果的形状是否正确。比如两个$n\times 1$的向量就不能直接乘,求导结果肯定是把其中一个转置。经过这种检查后,基本上是不会出错的。对于上面的函数,我们有:

链式法则仍然是成立的。

下面我们来看含有矩阵的情况,即对$\mathbf{Ax}$进行求导。由于$\mathbf{Ax}$的结果是一个向量,对向量$\mathbf{x}$的求导结果是一个矩阵:

$\mathbf{Ax}$是$n\times 1$向量,所以应该对$\mathbf{x}^T\in \mathbb{R}^{1\times n}$求导,即沿着另外一条轴求导,得到一个$n\times n$向量。类似地,我们可以得到$\frac{\partial(\mathbf{Ax})^T}{\partial \mathbf{x}}=\mathbf{A}^T$,根据定义可以验证这个结果。

应用中最常见的是处理含有范数的优化,假设:

$E$是标量,如果对$\mathbf{x}$求导,得到的是一个向量。

如果是对$\mathbf{A}$求导,那么得到的是一个矩阵。

含trace的矩阵微分

矩阵迹是矩阵对角线的加和,可以用来定义矩阵的frobenius范数,所以常常出现在优化问题中。矩阵的Frobenius范数定义如下:

对于$\mathbf{A}\in\mathbb{R}^{n\times n}$,有等式如下:

即$\mathbf{A}\mathbf{A}^T$的结果是由每个列向量的自乘积相加产生的,同时我们可以观察到:

下面我们来观察线性函数$\mathbf{x}^T\mathbf{Ax}$的梯度,$\mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{x}\in\mathbb{R}^{n\times 1}$,我们有:

那么有:

所以有$\nabla_x \mathbf{x}^T\mathbf{A}\mathbf{x}=\mathbf{A}\mathbf{x}+\mathbf{A}^T\mathbf{x}$.

现在考虑$E=tr(\mathbf{AX})$对$\mathbf{X}$的求导,有$tr(\mathbf{A(X}+d\mathbf{X}))=tr(\mathbf{AX})+tr(\mathbf{A}d\mathbf{X})$,因此我们只要考虑$\frac{tr(\mathbf{A}d\mathbf{X})}{d\mathbf{X}}$即可。

为了能够对矩阵范数中的矩阵求导,我们考虑$E=tr(\mathbf{AB})$对$\mathbf{A}$的导数:

以及矩阵转置和矩阵微分的关系如下:

我们再考虑更一般的情况,假设$f:\mathbb{R}^n\to\mathbb{R}$,$\mathbf{A}\in\mathbb{R}^{n\times m}$,$\mathbf{x}\in\mathbb{R}^{m\times 1}$,我们希望计算$\nabla_x f(\mathbf{Ax})$. 根据链式法则:

因此,有$\nabla_x f(\mathbf{Ax})=\mathbf{A}^T\nabla f(\mathbf{Ax})$.

最后,我们考虑一个更复杂的例子,并展示链式法则是如何应用的:

令$\mathbf{AB}=f(\mathbf{A})$,$f$为矩阵值函数: