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

矩阵的导数与迹

矩阵的导数

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

[igtriangledown_Af(A) = egin{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. (igtriangledown_AtrAB = B^T)

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

    [A= egin{bmatrix}a & b\ c & dend{bmatrix} ]

    设方阵(B)

    [B = egin{bmatrix}e & f\ g & hend{bmatrix} ]

    那么有

    [AB = egin{bmatrix}ae + bg & af + bh\ce + dg & cf + dhend{bmatrix} ]

    所以有

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

    然后有

    [igtriangledown_AtrAB=egin{bmatrix}e & g\ f & hend{bmatrix} = B^T ]

  6. (igtriangledown_{A^T}f(A)=(igtriangledown_Af(A))^T)

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

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

一个在后面用到的等式

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

推导过程如下:

(igtriangledown_{A^T}f(A)=(igtriangledown_Af(A))^T)自然有

[igtriangledown_{A^T}trABA^TC=(igtriangledown_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 ]

(igtriangledown_ heta J( heta))的一点理解

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

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

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

[igtriangledown_ heta J( heta) = igtriangledown_ hetafrac{1}{2}(mathbf{X} heta-vec{y})^T(mathbf{X} heta-vec{y}) ]

强行展开

[igtriangledown_ heta J( heta) = frac{1}{2}igtriangledown_ heta( heta^Tmathbf{X}^Tmathbf{X} heta- heta^Tmathbf{X}^Tvec{y}-vec{y}^Tmathbf{X} heta+vec{y}^Tvec{y}) ]

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

[igtriangledown_ heta J( heta)=frac{1}{2}igtriangledown_ heta tr( heta^Tmathbf{X}^Tmathbf{X} heta- heta^Tmathbf{X}^Tvec{y}-vec{y}^Tmathbf{X} heta) ]

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

[igtriangledown_ heta J( heta)=frac{1}{2}igtriangledown_ heta(tr heta^Tmathbf{X}^Tmathbf{X} heta-2tr vec{y}mathbf{X} heta) ]

(tr vec{y}mathbf{X} heta),有(tr vec{y}mathbf{X} heta=tr hetavec{y}mathbf{X}),又有(igtriangledown_ heta tr AB = B^T),所以有(igtriangledown_ heta tr hetavec{y}mathbf{X}=(vec{y}mathbf{X})^T=mathbf{X}^Tvec{y});又因为

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

所以有(igtriangledown_ heta tr heta^Tmathbf{X}^Tmathbf{X} heta=(mathbf{X}^Tmathbf{X}+(mathbf{X}^Tmathbf{X})^T) heta=2mathbf{X}^Tmathbf{X} heta),这样子就好办了

[ hereforequadigtriangledown_ heta J( heta) = mathbf{X}^Tmathbf{X} heta - mathbf{X}^Tvec{y} ]

(igtriangledown_ heta J( heta)= 0)可以求出

[ heta = (mathbf{X}^Tmathbf{X})^{-1}mathbf{X}^Tvec{y} ]

参考资料

  1. Andrew NG的ML第二课以及其相关笔记
  2. 机器学习中常用的矩阵求导公式
原文地址:https://www.cnblogs.com/crackpotisback/p/5545708.html