前言与感谢
- 以前就对矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导根本是错误的,因为矩阵维数根本不匹配,故这些无良的发布者可能根本就没有手推过,天天搞复制黏贴大法,很多时候都是大量重复错误的内容。最近读了一些材料,感觉心中有了一些数,因此想通过本文总结,一次性梳理清楚。是时候搞定矩阵微分了!
- 在此,必须感谢为这个问题写下详细分析文章的人,尤其是参考资料[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$
累加法求解相同矩阵的微分
参考材料:
- 长躯鬼侠. 矩阵求导术(上), (https://zhuanlan.zhihu.com/p/24709748)
- 刘建平. 机器学习中的矩阵向量求导, (https://www.cnblogs.com/pinard/)
- Kaare Brandt Petersen, Michael Syskind Pedersen. "The Matrix Cookbook", 2008
- Thomas P. Minka. "Old and New Matrix Algebra Useful for Statistics", 2000
- Searle Shayle R. "Matrix Algebra Useful for Statistics", 1982
- Jan R. Magnus, Heinz Neudecker. "Matrix Differential Calculus with Applications in Statistics and Econometrics", 2007
- "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