首页 > 其他 > 详细

是时候搞定矩阵微分了!

时间:2019-11-02 16:58:36      阅读:94      评论:0      收藏:0      [点我收藏+]

前言与感谢

  • 以前就对矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导根本是错误的,因为矩阵维数根本不匹配,故这些无良的发布者可能根本就没有手推过,天天搞复制黏贴大法,很多时候都是大量重复错误的内容。最近读了一些材料,感觉心中有了一些数,因此想通过本文总结,一次性梳理清楚。是时候搞定矩阵微分了!
  • 在此,必须感谢为这个问题写下详细分析文章的人,尤其是参考资料[2,3,8]中的作者,他们是很用心的站在初学者的角度来考虑这些问题。的确如某位博主所言,我也认为矩阵微分是属于三不管区域,无论是数分、高代还是优化课程,前两者的老师觉得此问题不属于知识主线,不必教,后一类课程的老师觉得这本质上还属于线性代数+微积分的内容,应该在基础课程内搞定,因此造就了如此局面,书到用时方恨少啊!
  • 注:本文只是做一个方法的梳理,具体的证明过程都可在参考资料中找到

符号与求导布局的规定

  • 符号规定
    • $L$:标量
    • $\mathbf{x}$:$n$维向量
    • $\mathbf{y}$:$m$维向量
    • $\mathbf{X}$:大小为$m×n$的矩阵
  • 求导布局$(Layout)$的规定
    • 分母布局:标量$L$对向量$\mathbf{x}$求导得到的是$n$维向量,其中$(\frac{\partial{L}}{\partial{\mathbf{x}}})_{i}=\frac{\partial{L}}{\partial{\mathbf{x_i}}}$
    • 分母布局标量对矩阵$\mathbf{X}$得到的是大小为$m×n$的矩阵,其中$(\frac{\partial{L}}{\partial{\mathbf{X}}})_{ij}=\frac{\partial{L}}{\partial{\mathbf{x_{ij}}}}$
    • 分子布局:向量$\mathbf{y}$对向量$\mathbf{x}$求导得到的是矩阵,其行数与$\mathbf{y}$的维数保持一致,其中$(\frac{\partial{\mathbf{y}}}{\partial{\mathbf{x}}})_{ij}=\frac{\partial{\mathbf{y}_i}}{\partial{\mathbf{x_j}}}$

链式法则

  • 向量对向量求导
    • 设多个向量之间存在依赖关系:$\mathbf{a} \Rightarrow \mathbf{b} \Rightarrow ... \Rightarrow \mathbf{x} \Rightarrow \mathbf{y} \Rightarrow \mathbf{z}$
    • 计算方法:$\frac{\partial{\mathbf{z}}}{\partial{\mathbf{a}}}=\frac{\partial{\mathbf{z}}}{\partial{\mathbf{y}}} \frac{\partial{\mathbf{y}}}{\partial{\mathbf{x}}}...\frac{\partial{\mathbf{b}}}{\partial{\mathbf{a}}}$
  • 标量对向量求导
    • 设多个向量之间即标量$L$存在依赖关系:$\mathbf{x_1} \Rightarrow \mathbf{x_2} \Rightarrow ... \Rightarrow \mathbf{x_{n-1}} \Rightarrow \mathbf{x_n} \Rightarrow L$
    • 计算方法:$\frac{\partial{L}}{\partial{\mathbf{x_1}}}=(\frac{\partial{\mathbf{x_n}}}{\partial{\mathbf{x_{n-1}}}}\frac{\partial{\mathbf{x_{n-1}}}}{\partial{\mathbf{x_{n-2}}}}...\frac{\partial{\mathbf{x_2}}}{\partial{\mathbf{x_{1}}}})^T \frac{\partial{L}}{\partial{\mathbf{x_n}}}$
    • 特别的,若有$\mathbf{x} \Rightarrow \mathbf{y} \Rightarrow L$,则计算方法为:$\frac{\partial{\mathbf{L}}}{\partial{\mathbf{x}}}=(\frac{\partial{\mathbf{y}}}{\partial{\mathbf{x}}})^T\frac{\partial{L}}{\partial{\mathbf{y}}}$
  • 标量对矩阵求导
    • 当涉及到矩阵对矩阵求导时非常麻烦,此处给出的是常见的线性关系的链式求导
    • 若存在关系:$\mathbf{X}\Rightarrow \mathbf{Y}=\mathbf{AX}+\mathbf{B} \Rightarrow L=f(\mathbf{Y})$,则$\frac{\partial{L}}{\partial{\mathbf{X}}}=A^T\frac{\partial{L}}{\partial{\mathbf{Y}}}$
      • 注$1$:若关系中改为$\mathbf{Y}=\mathbf{XA}+\mathbf{B} $,则计算结果变为$\frac{\partial{L}}{\partial{\mathbf{X}}}=\frac{\partial{L}}{\partial{\mathbf{Y}}}A^T$
      • 注$2$:若将矩阵$\mathbf{X}$改为向量$\mathbf{x}$,则相应结论的仍然成立
        • 当$\mathbf{x}\Rightarrow \mathbf{y}=\mathbf{Ax}+\mathbf{b} \Rightarrow L=f(\mathbf{y})$时,有$\frac{\partial{L}}{\partial{\mathbf{x}}}=A^T\frac{\partial{L}}{\partial{\mathbf{y}}}$成立
        • 当$\mathbf{x}\Rightarrow \mathbf{y}=\mathbf{xA}+\mathbf{b} \Rightarrow L=f(\mathbf{y})$时,有$\frac{\partial{L}}{\partial{\mathbf{x}}}=\frac{\partial{L}}{\partial{\mathbf{y}}}A^T$成立

两个重要的向量对向量求导结论(利用定义容易验证)

  • 设$\mathbf{A}$为$m×n$的矩阵,则$\frac{\partial{\mathbf{Ax}}}{\partial{\mathbf{x}}}=A$
  • 设$\mathbf{B}$为$n×m$的矩阵,则$\frac{\partial{\mathbf{x^TB}}}{\partial{\mathbf{x}}}=B^T$

标量求导的迹方法$(Trace Method)$

  • 思想:由于$dL=\sum_{i=1}^m \sum_{j=1}^n \frac{\partial{L}}{\partial{\mathbf{X_{ij}}}} d \mathbf{X_{ij}}=tr(( \frac{\partial{L}}{\partial{\mathbf{X}}})^Td \mathbf{X})$,故全微分$dL$是导数$ \frac{\partial{L}}{\partial{\mathbf{X}}}$与微分矩阵$d\mathbf{X}$的内积,因此只要凑到这种形式下,等价于找到了标量$L$对$\mathbf{X}$的导数
  • 先复习一下关于迹的重要性质,这在之后凑微分矩阵是非常重要的:
    • $L=tr(L)$
    • $tr(\mathbf{X}^T)=tr(\mathbf{X})$
    • $tr(\mathbf{X+Y})=tr(\mathbf{X})+tr(\mathbf{Y})$
    • $tr(\mathbf{XY})=tr(\mathbf{YX})$
    • $tr(A^T(B\odot C))=tr((A\odot B)^T C)$,其中$\mathbf{X},\mathbf{Y},\mathbf{Z}$为尺寸完全相同的矩阵,且$\odot$表示逐元素乘积
  • 其次,将全微分的运算公式列表如下,详细的说明可以在参考材料[1,4,5]中找到
    • $dL=0$
    • $d(\alpha \mathbf{X})=\alpha d\mathbf{X}$
    • $d(\mathbf{X}+\mathbf{Y})=d\mathbf{X}+d\mathbf{Y}$
    • $d(tr(\mathbf{X}))=tr(d\mathbf{X})$
    • $d(\mathbf{X}\mathbf{Y})=(d\mathbf{X})\mathbf{Y}+\mathbf{X}d\mathbf{Y}$
    • $d(\mathbf{X}\odot \mathbf{Y})=(d\mathbf{X})\odot \mathbf{Y}+\mathbf{X}\odot d\mathbf{Y}$
    • $d\mathbf{X}^{-1}=-\mathbf{X}^{-1}(d\mathbf{X})\mathbf{X}^{-1}$
    • $d\vert \mathbf{X}\vert = \vert \mathbf{X} \vert tr(\mathbf{X}^{-1}d\mathbf{X})$
    • $d \ln \vert \mathbf{X}\vert = tr(\mathbf{X}^{-1}d\mathbf{X})$
    • $d\mathbf{X}^T = (d\mathbf{X})^T$

累加法求解相同矩阵的微分

参考材料:

  1. 长躯鬼侠. 矩阵求导术(上), (https://zhuanlan.zhihu.com/p/24709748)
  2. 刘建平. 机器学习中的矩阵向量求导, (https://www.cnblogs.com/pinard/)
  3. Kaare Brandt Petersen, Michael Syskind Pedersen. "The Matrix Cookbook", 2008
  4. Thomas P. Minka. "Old and New Matrix Algebra Useful for Statistics", 2000
  5. Searle Shayle R. "Matrix Algebra Useful for Statistics", 1982
  6. Jan R. Magnus, Heinz Neudecker. "Matrix Differential Calculus with Applications in Statistics and Econometrics", 2007
  7. "Matrix Vector Derivatives for Machine Learning", (作者邮箱:ruanchong_ruby@163.com)

附:上述材料[3-7]的下载连接为https://pan.baidu.com/s/1Duk0i3Dw7CYXWe07lgPZ9g(密码: pcct)

是时候搞定矩阵微分了!

原文:https://www.cnblogs.com/gyhhaha/p/11782212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!