错位的梦寐

机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法

2019-12-25


使用微分法来求解标量对向量的求导,以及标量对矩阵的求导。

1. 矩阵微分

在高数里面我们学习过标量的导数和微分,他们之间有这样的关系: $df =f’(x)dx$ 。如果是多变量的情况,则微分可以写成:

\[\begin{equation} d f=\sum_{i=1}^{n} \frac{\partial f}{\partial x_{i}} d x_{i}=\left(\frac{\partial f}{\partial \mathbf{x}}\right)^{T} d \mathbf{x} \end{equation}\]

这里第一个等号是全微分公式,第二个等号表达了梯度与微分的联系:全微分 $df$ 是梯度向量 \(\frac{\partial f}{\partial \boldsymbol{x}}(n \times 1)\) 与微分向量 \(d \boldsymbol{x}(\mathrm{n} \times 1)\) 的内积;

我们可以发现标量对向量的求导和它的向量微分有一个转置的关系。

再推广到矩阵。对于矩阵微分,我们的定义为:

\[\begin{equation} d f=\sum_{i=1}^{m} \sum_{j=1}^{n} \frac{\partial f}{\partial X_{i j}} d X_{i j}=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^{T} d \mathbf{X}\right) \end{equation}\]

其中第二步使用了矩阵迹的性质,即迹函数等于主对角线的和。tr代表迹(trace)是方阵对角线元素之和,满足性质:对尺寸相同的矩阵A,B,

\[\begin{equation} \operatorname{tr}\left(A^{T} B\right)=\sum_{i, j} A_{i j} B_{i j} \end{equation}\]

$\operatorname{tr}\left(A^{T} B\right)$ 是矩阵A,B的内积

从上面矩阵微分的式子,我们可以看到矩阵微分和它的导数也有一个转置的关系,不过在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:

\[\begin{equation} d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^{T} d \mathbf{X}\right) \quad d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{x}}\right)^{T} d \mathbf{x}\right) \end{equation}\]

2. 常用的矩阵微分的运算法则:

1)微分加减法:$d(X+Y) =dX+dY, d(X-Y) =dX-dY$

2) 微分乘法:$d(XY) =(dX)Y + X(dY)$

3) 微分转置:$d(X^T) =(dX)^T$

4) 微分的迹:$dtr(X) =tr(dX)$

5) 微分哈达马乘积 (逐元素乘法):$d(X \odot Y) = X\odot dY + dX \odot Y$, $\odot $ 表示尺寸相同的矩阵X,Y逐元素相乘。

7) 逆矩阵微分:$d X^{-1}= -X^{-1}dXX^{-1}$

8) 行列式微分:$d |X|= |X|tr(X^{-1}dX)$

3. 使用微分法求解矩阵向量求导

若标量函数 $f$ 是矩阵 $X$ 经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对 $f$ 求微分,再使用迹函数技巧给 $df$ 套上迹并将其它项交换至 $dX$ 左侧,那么对于迹函数里面在 $dX$ 左边的部分,我们只需要加一个转置就可以得到导数了。

这里需要用到的迹函数的技巧主要有这么几个:

1) 标量的迹等于自己:$tr(x) =x$

2) 转置不变:$tr(A^T) =tr(A)$

3) 交换率:$tr(AB) =tr(BA)$ , 需要满足 $A,B^T$ 同维度。两侧都等于 \(\sum_{i, j} A_{i j} B_{j i}\)

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

5) 矩阵乘法和迹交换:$tr((A\odot B)^TC)= tr(A^T(B \odot C))$ , 需要满足 $A,B,C$ 同维度。两侧都等于\(\sum_{i, j} A_{i j} B_{i j} C_{i j}\)

第一个例子

\[y=\mathbf{a}^T\mathbf{X}\mathbf{b},\qquad 求 \frac{\partial y}{\partial \mathbf{X}}\]

其中 $a$ 是 $m \times 1$ 列向量,$X$ 是 $m \times n$ 矩阵,$b$ 是 $n \times 1$ 列向量,

首先,我们使用微分乘法的性质对 $y$ 求微分,得到:

\[dy = (d\mathbf{a}^T)\mathbf{X}\mathbf{b} + \mathbf{a}^Td\mathbf{X}\mathbf{b} + \mathbf{a}^T\mathbf{X}d\mathbf{b} = \mathbf{a}^Td\mathbf{X}\mathbf{b}\]

注意这里的 $a,b$ 是常量,\(d \boldsymbol{a}=\mathbf{0}, d \boldsymbol{b}=\mathbf{0}\) 。由于 $df$ 是标量,它的迹等于自身,

第二步,就是两边套上迹函数,并做矩阵乘法交换:即:

\[dy =tr(dy) = tr(\mathbf{a}^Td\mathbf{X}\mathbf{b}) = tr(\mathbf{b}\mathbf{a}^Td\mathbf{X})\]

根据我们矩阵导数和微分的定义,迹函数里面在 $dX$ 左边的部分 $\mathbf{b}\mathbf{a}^T$ , 加上一个转置即为我们要求的导数,即:

\[\frac{\partial f}{\partial \mathbf{X}} = (\mathbf{b}\mathbf{a}^T)^T =ab^T\]

以上就是微分法的基本流程,先求微分再做迹函数变换,最后得到求导结果。比起定义法,我们现在不需要去对矩阵中的单个标量进行求导了。

解:这是标量对向量的导数,不过可以把向量看做矩阵的特例。先将向量模平方改写成向量与自身的内积:$l=(X \boldsymbol{w}-\boldsymbol{y})^{T}(X \boldsymbol{w}-\boldsymbol{y})$ ,求微分,使用矩阵乘法、转置等法则:

\[\begin{equation} \begin{aligned} d l&=(X d \boldsymbol{w})^{T}(X \boldsymbol{w}-\boldsymbol{y})+(X \boldsymbol{w}-\boldsymbol{y})^{T}(X d \boldsymbol{w})\\ &=2(X \boldsymbol{w}-\boldsymbol{y})^{T} X d \boldsymbol{w} \end{aligned} \end{equation}\]

对照导数与微分的联系 \(d l=\frac{\partial l}{\partial \boldsymbol{w}}^{T} d \boldsymbol{w}\) ,得到

\[\begin{equation} \frac{\partial l}{\partial \boldsymbol{w}}=2 X^{T}(X \boldsymbol{w}-\boldsymbol{y}) \end{equation}\]

$\frac{\partial l}{\partial \boldsymbol{w}}=0$ 即 $X^{T} X \boldsymbol{w}=X^{T} \boldsymbol{y}$ ,得到 $w$ 的最小二乘估计为 $\boldsymbol{w}=\left(X^{T} X\right)^{-1} X^{T} \boldsymbol{y}$

4. 迹函数对向量矩阵求导

由于微分法使用了迹函数的技巧,那么迹函数对对向量矩阵求导这一大类问题,使用微分法是最简单直接的。

首先是 :

\[\frac{\partial tr(AB)}{\partial A} = B^T, \frac{\partial tr(AB)}{\partial B} =A^T\]

再来看看:

\[\frac{\partial tr(W^TAW)}{\partial W}\] \[\begin{equation} \begin{aligned} d\left(\operatorname{tr}\left(W^{T} A W\right)\right)&= \operatorname{tr}\left(d W^{T} A W+W^{T} A d W\right)\\&=\operatorname{tr}\left(d W^{T} A W\right)+\operatorname{tr}\left(W^{T} A d W\right)\\&=\operatorname{tr}\left((d W)^{T} A W\right) +\operatorname{tr}\left(W^{T} A d W\right)\\&=\operatorname{tr}\left(W^{T} A^{T} d W\right)+\operatorname{tr}\left(W^{T} A d W\right) \\&=\operatorname{tr}\left(W^{T}\left(A+A^{T}\right) d W\right) \end{aligned} \end{equation}\]

因此可以得到:

\[\begin{equation} \frac{\partial \operatorname{tr}\left(W^{T} A W\right)}{\partial W}=\left(A+A^{T}\right) W \end{equation}\]

更加复杂的迹函数求导:$\frac{\partial tr(B^TX^TCXB)}{\partial X}$

\[\begin{equation} \begin{aligned} d\left(t r\left(B^{T} X^{T} C X B\right)\right)&= \operatorname{tr}\left(B^{T} d X^{T} C X B\right)+\operatorname{tr}\left(B^{T} X^{T} C d X B\right)\\&=\operatorname{tr}\left((d X)^{T} C X B B^{T}\right)+\operatorname{tr}\left(B B^{T} X^{T} C d X\right) \\&=\operatorname{tr}\left(B B^{T} X^{T} C^{T} d X\right)+\operatorname{tr}\left(B B^{T} X^{T} C d X\right)\\&=\operatorname{tr}\left(\left(B B^{T} X^{T} C^{T}+B B^{T} X^{T} C\right) d X\right) \end{aligned} \end{equation}\]

因此可以得到:

\[\begin{equation} \frac{\partial \operatorname{tr}\left(B^{T} X^{T} C X B\right)}{\partial X}=\left(C+C^{T}\right) X B B^{T} \end{equation}\]

5. 微分法求导小结

使用矩阵微分,可以在不对向量或矩阵中的某一元素单独求导再拼接,因此会比较方便,当然熟练使用的前提是对上面矩阵微分的性质,以及迹函数的性质熟练运用。

还有一些场景,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。如果我们可以利用一些常用的简单求导结果,再使用链式求导法则,则会非常的方便。

参考

  1. 机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法
  2. 矩阵求导术(上)
  3. 矩阵求导术(下)

Comments

Content