矩阵求导常见于机器学习一些算法的推导过程,形式简洁漂亮。使用矩阵向量求导的方法大幅简化了公式推演。
此部分看刘建平Pinard的blog,讲的非常细致,一共有五章。
求导布局有标量对向量,标量对矩阵,向量对向量等。求导完后具体的格式如何与求导布局相关。一般只有标量对向量 / 矩阵求导才是默认分母布局。
自变量\因变量 | 标量y | 列向量y\mathbf{y}y | 矩阵Y\mathbf{Y}Y |
---|---|---|---|
标量x | / | $\frac{\partial \mathbf{y}}{\partial x} $ 分子布局:m维列向量(默认布局);分母布局:m维行向量 | ∂Y∂X\frac{\partial \mathbf{Y}}{\partial \mathbf{X}}∂X∂Y 分子布局:p×q矩阵(默认布局)分母布局:q×p矩阵 |
列向量x\mathbf{x}x | ∂y∂x\frac{\partial{y}}{\partial \mathbf{x}}∂x∂y 分子布局:n维行向量;分母布局:n维列向量(默认布局) | ∂y∂x\frac{\partial \mathbf{y}}{\partial \mathbf{x}}∂x∂y 分子布局:m×n雅克比矩阵(默认布局);分母布局:n×m梯度矩阵 | / |
矩阵X\mathbf{X}X | ∂y∂X\frac{\partial y}{\partial \mathbf{X}}∂X∂y 分子布局:n×m矩阵;分母布局:m×n矩阵(默认布局) | / | / |
定义法是最容易想的方法,遇到遗忘时直接推即可,但运算较为复杂,常用有
∂aTx∂x=a\frac{\partial a^Tx}{\partial x}=a∂x∂aTx=a
∂xTx∂x=2x\frac{\partial x^Tx}{\partial x}=2x∂x∂xTx=2x
∂xTAx∂x=ATx+Ax\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial \mathbf{x}} = \mathbf{A}^T\mathbf{x} + \mathbf{A}\mathbf{x}∂x∂xTAx=ATx+Ax (∂xTAx∂xk=∂∑i=1n∑j=1nxiAijxj∂xk=∑i=1nAikxi+∑j=1nAkjxj\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial x_k} = \frac{\partial \sum\limits_{i=1}^n\sum\limits_{j=1}^n x_iA_{ij}x_j}{\partial x_k} = \sum\limits_{i=1}^n A_{ik}x_i + \sum\limits_{j=1}^n A_{kj}x_j∂xk∂xTAx=∂xk∂i=1∑nj=1∑nxiAijxj=i=1∑nAikxi+j=1∑nAkjxj)
∂aTXb∂X=abT\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial \mathbf{X}} = ab^T∂X∂aTXb=abT (∂aTXb∂Xij=∂∑p=1m∑q=1napApqbq∂Xij=∂aiAijbj∂Xij=aibj\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial X_{ij}} = \frac{\partial \sum\limits_{p=1}^m\sum\limits_{q=1}^n a_pA_{pq}b_q}{\partial X_{ij}} = \frac{\partial a_iA_{ij}b_j}{\partial X_{ij}} = a_ib_j∂Xij∂aTXb=∂Xij∂p=1∑mq=1∑napApqbq=∂Xij∂aiAijbj=aibj)
一些求导的基本法则还是类似普通求导
微分法主要利用矩阵的迹:
df=∑i=1n∂f∂xidxi=(∂f∂x)Tdx=tr((∂f∂x)Tdx)df=\sum\limits_{i=1}^n\frac{\partial f}{\partial x_i}dx_i = (\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x}=tr((\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x})df=i=1∑n∂xi∂fdxi=(∂x∂f)Tdx=tr((∂x∂f)Tdx) (标量的迹是其本身,矩阵也可做对应推导)
df=tr(df)df =tr(df)df=tr(df)
一般先对原式求微分,再两边套上迹,利用微分和迹的公式
https://www.cnblogs.com/pinard/p/10791506.html
链式法则向量对向量:∂z∂x=∂z∂y∂y∂x\frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}}\frac{\partial \mathbf{y}}{\partial \mathbf{x}}∂x∂z=∂y∂z∂x∂y
标量对向量:(∂z∂x)T=(∂z∂y)T∂y∂x(\frac{\partial z}{\partial \mathbf{x}})^T = (\frac{\partial z}{\partial \mathbf{y}})^T\frac{\partial \mathbf{y}}{\partial \mathbf{x}}(∂x∂z)T=(∂y∂z)T∂x∂y
标量对向量可用于平方损失函数l=(Xθ−y)T(Xθ−y)l=(X\theta - y)^T(X\theta - y)l=(Xθ−y)T(Xθ−y)的求导:令z=Xθ−yz = X\theta - yz=Xθ−y, l=zTzl=z^Tzl=zTz,实在不行也可以拆开逐项求导
矩阵对矩阵求导用的不是太多,需要时再看