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


    矩阵的导数与迹

    矩阵的导数

    ​ 对于一个将(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. 机器学习中常用的矩阵求导公式
  • 相关阅读:
    favourite programming quotes
    a fast algorithm to compute the area of a polygon
    customize your own memory allocator (2)
    一道概率算法
    study on source code of Tcmalloc
    智力题2
    how does malloc/free work?
    Windows PowerShell系列课程(视频课程讲师:李大川)
    跟我一起学Visual Studio 2008系列课程(视频课程讲师:徐长龙)
    C# 3.0 锐利体验系列课程(视频课程讲师:李建忠)
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/5545708.html
Copyright © 2020-2023  润新知