矩阵求导

Rohana ·
更新时间:2024-11-14
· 723 次阅读

矩阵求导常见于机器学习一些算法的推导过程,形式简洁漂亮。使用矩阵向量求导的方法大幅简化了公式推演。

此部分看刘建平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∑n​j=1∑n​xi​Aij​xj​​=i=1∑n​Aik​xi​+j=1∑n​Akj​xj​)

∂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∑m​q=1∑n​ap​Apq​bq​​=∂Xij​∂ai​Aij​bj​​=ai​bj​)

一些求导的基本法则还是类似普通求导

微分法

主要利用矩阵的迹:

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​∂f​dxi​=(∂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,实在不行也可以拆开逐项求导

矩阵对矩阵求导

用的不是太多,需要时再看


作者:我很欣赏你



矩阵求导 求导 矩阵

需要 登录 后方可回复, 如果你还没有账号请 注册新账号