学渣笔记之矩阵的导数与迹

矩阵的导数与迹

矩阵的导数

​ 对于一个将\(m\times n\)的矩阵映射为实数的函数\(f: \mathbb{R}^{m\times n}\mapsto\mathbb{R}\),我们定义\(f\)对矩阵\(A\)的导数为

\[\bigtriangledown_Af(A) = \begin{bmatrix}\dfrac{\partial f}{\partial A_{11}} & \ldots & \dfrac{\partial f}{\partial A_{1n}}\\ \vdots & \ddots & \vdots \\\dfrac{\partial f}{\partial A_{m1}} & \ldots & \dfrac{\partial f}{\partial A_{mn}}\end{bmatrix} \]

\(f(A)\)就是我们下面要介绍的迹。

方阵的迹

​ 对于一个\(n\)阶方阵\(A\)的迹被定义为方阵\(A\)的主对角线的元素之和,通常对方阵的求迹操作写成\(trA\),于是我们有

\[trA=\sum_{i=1}^nA_{ii} \]

一些有用的性质

  1. \(tr ABC = tr BCA = tr CAB\)

    这是对三个方阵的积求迹,循环移位后的结果还是一样的,不仅2个方阵或者3个方阵的积求迹满足此性质,对其他更多个数的方阵的积求迹也满足此性质。

  2. \(tr A = tr A^T\)

    这个就比较明显了,方阵转置后主对角线上的元素不会变

  3. \(tr(A +B) = tr A + tr B\)

  4. \(tr\ \alpha A= \alpha\ tr A\)

  5. \(\bigtriangledown_AtrAB = B^T\)

    这个看起来有点麻烦,下面验证一下,设方阵\(A\)

    \[A= \begin{bmatrix}a & b\\ c & d\end{bmatrix} \]

    设方阵\(B\)

    \[B = \begin{bmatrix}e & f\\ g & h\end{bmatrix} \]

    那么有

    \[AB = \begin{bmatrix}ae + bg & af + bh\\ce + dg & cf + dh\end{bmatrix} \]

    所以有

    \[tr AB=ae + bg + cf + dh \]

    然后有

    \[\bigtriangledown_AtrAB=\begin{bmatrix}e & g\\ f & h\end{bmatrix} = B^T \]

  6. \(\bigtriangledown_{A^T}f(A)=(\bigtriangledown_Af(A))^T\)

  7. \(\bigtriangledown tr ABA^TC=CAB+C^TAB^T\)

  8. \(\bigtriangledown_A|A| = |A|(A^{-1})^T\)

一个在后面用到的等式

\[\bigtriangledown_{A^T}tr ABA^TC=B^TA^TC^T+BA^TC \]

推导过程如下:

\(\bigtriangledown_{A^T}f(A)=(\bigtriangledown_Af(A))^T\)自然有

\[\bigtriangledown_{A^T}trABA^TC=(\bigtriangledown_AtrABA^TC)^T=(CAB+C^TAB^T)^T \]

所以有

\[(CAB+C^TAB^T)^T=B^T(CA)^T+(AB^T)^TC=B^TA^TC^T+BA^TC \]

\(\bigtriangledown_\theta J(\theta)\)的一点理解

​ Andrew ng在cs229-notes1中给出了一些公式,貌似还是有些东西并没有很明显的提出来,像我这种渣渣就有点晕。首先是给出的\(J(\theta)\)的矩阵表示如下

\[J(\theta)=\frac{1}{2}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2=\frac{1}{2}(\mathbf{X}\theta-\vec{y})^T(\mathbf{X}\theta-\vec{y}) \]

这个公式的推导过程还是比较简单的,下面的推导比较蛋疼,有些隐含的信息貌似Andrew ng没有明显指出来,对我这种渣渣就比较尴尬了。

\[\bigtriangledown_\theta J(\theta) = \bigtriangledown_\theta\frac{1}{2}(\mathbf{X}\theta-\vec{y})^T(\mathbf{X}\theta-\vec{y}) \]

强行展开

\[\bigtriangledown_\theta J(\theta) = \frac{1}{2}\bigtriangledown_\theta(\theta^T\mathbf{X}^T\mathbf{X}\theta-\theta^T\mathbf{X}^T\vec{y}-\vec{y}^T\mathbf{X}\theta+\vec{y}^T\vec{y}) \]

很明显,后面的\(\vec{y}^T\vec{y}\)是一个与\(\theta\)无关的常量,所以对\(\theta\)求偏导数为0,可以省略掉。假设\(\alpha\)是一个实数,那么我们有\(tr\ \alpha = \alpha\)\(\theta\)\(n\times 1\)的,\(\mathbf{X}\)\(m\times n\)的,所以\(\theta^T\mathbf{X}^T\mathbf{X}\theta\)的维数变换是\((1\times n)\times (n \times m) \times(m\times n)\times(n\times 1)\),所以结果是一个\(1\times 1\)的方阵;同理其他的加数也是\(1\times 1\)的方阵,所以有

\[\bigtriangledown_\theta J(\theta)=\frac{1}{2}\bigtriangledown_\theta tr(\theta^T\mathbf{X}^T\mathbf{X}\theta-\theta^T\mathbf{X}^T\vec{y}-\vec{y}^T\mathbf{X}\theta) \]

由于\(tr A = tr A^T\)\(tr (A+B)=tr A + tr B\),所以\(\theta^T\mathbf{X}^T\vec{y}=\vec{y}\mathbf{X}\theta\),然后就有

\[\bigtriangledown_\theta J(\theta)=\frac{1}{2}\bigtriangledown_\theta(tr\ \theta^T\mathbf{X}^T\mathbf{X}\theta-2tr\ \vec{y}\mathbf{X}\theta) \]

\(tr\ \vec{y}\mathbf{X}\theta\),有\(tr\ \vec{y}\mathbf{X}\theta=tr\ \theta\vec{y}\mathbf{X}\),又有\(\bigtriangledown_\theta tr\ AB = B^T\),所以有\(\bigtriangledown_\theta tr\ \theta\vec{y}\mathbf{X}=(\vec{y}\mathbf{X})^T=\mathbf{X}^T\vec{y}\);又因为

\[\dfrac{\partial \mathbf{X}^T\mathbf{A}\mathbf{X}}{\partial \mathbf{X}}=(\mathbf{A}+\mathbf{A}^T)\mathbf{X} \]

所以有\(\bigtriangledown_\theta tr\ \theta^T\mathbf{X}^T\mathbf{X}\theta=(\mathbf{X}^T\mathbf{X}+(\mathbf{X}^T\mathbf{X})^T)\theta=2\mathbf{X}^T\mathbf{X}\theta\),这样子就好办了

\[\therefore\quad\bigtriangledown_\theta J(\theta) = \mathbf{X}^T\mathbf{X}\theta - \mathbf{X}^T\vec{y} \]

\(\bigtriangledown_\theta J(\theta)= 0\)可以求出

\[\theta = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\vec{y} \]

参考资料

  1. Andrew NG的ML第二课以及其相关笔记
  2. 机器学习中常用的矩阵求导公式
posted @ 2016-05-31 14:14  狂徒归来  阅读(24491)  评论(4编辑  收藏  举报