- 前言
- 矩阵微分定义
- 矩阵微分计算法则
- 常矩阵
- 线性
- 乘积
- 转置
- 迹
- 通过矩阵微分进行求导
- 常用的矩阵微分
- 后记
本次将记录如何进行矩阵求导(标量对矩阵)。由于矩阵求导涉及行列式、迹,因此比标量对向量、向量对向量都要复杂一些。
矩阵微分定义定义矩阵 X X X、实值函数 f ( X ) f(X) f(X)的微分和偏导矩阵: X = [ x 11 x 12 … x 1 n x 21 x 22 … x 2 n … … … … x n 1 x n 2 … x n n ] d X = [ d x 11 d x 12 … d x 1 n d x 21 d x 22 … d x 2 n … … … … d x n 1 d x n 2 … d x n n ] ∂ f ( X ) ∂ X = [ ∂ f ∂ x 11 ∂ f ∂ x 12 … ∂ f ∂ x 1 n ∂ f ∂ x 21 ∂ f ∂ x 22 … ∂ f ∂ x 2 n … … … … ∂ f ∂ x n 1 ∂ f ∂ x n 2 … ∂ f ∂ x n n ] 将 f ( X ) 看 做 关 于 矩 阵 元 素 的 多 元 函 数 , 则 d f ( X ) = ∑ i = 1 n ∑ j = 1 n ∂ f ∂ x i j d x i j 上 式 是 矩 阵 乘 积 的 内 积 , 即 矩 阵 A B T 的 迹 d f ( X ) = t r ( ∂ f ( X ) ∂ X ( d X ) T ) = t r ( ( ∂ f ( X ) ∂ X ) T d X ) = t r ( ( ∂ f ( X ) ∂ X T ) d X ) 就 将 矩 阵 求 导 , 微 分 和 矩 阵 的 迹 关 联 了 起 来 。 X=\begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \dots & \dots & \dots & \dots \\ x_{n1} & x_{n2} & \dots & x_{nn} \\ \end{bmatrix} \\ \quad \\ dX=\begin{bmatrix} dx_{11} & dx_{12} & \dots & dx_{1n} \\ dx_{21} & dx_{22} & \dots & dx_{2n} \\ \dots & \dots & \dots & \dots \\ dx_{n1} & dx_{n2} & \dots & dx_{nn} \\ \end{bmatrix} \\ \quad \\ \frac {\partial f(X)}{\partial X} = \begin{bmatrix} \frac {\partial f}{\partial x_{11}} & \frac {\partial f}{\partial x_{12}} & \dots & \frac {\partial f}{\partial x_{1n}} \\ \frac {\partial f}{\partial x_{21}} & \frac {\partial f}{\partial x_{22}} & \dots & \frac {\partial f}{\partial x_{2n}} \\ \dots & \dots & \dots & \dots \\ \frac {\partial f}{\partial x_{n1}} & \frac {\partial f}{\partial x_{n2}} & \dots & \frac {\partial f}{\partial x_{nn}} \\ \end{bmatrix} \\ \quad \\ 将f(X)看做关于矩阵元素的多元函数,则 \\ \quad \\ df(X)=\sum_{i=1}^n\sum_{j=1}^n \frac {\partial f}{\partial x_{ij}}dx_{ij} \\ \quad \\ 上式是矩阵乘积的内积,即矩阵AB^T的迹\\ \quad \\ df(X)=tr(\frac {\partial f(X)}{\partial X} (dX)^T) \\ = tr((\frac {\partial f(X)}{\partial X})^TdX) \\ = tr((\frac {\partial f(X)}{\partial X^T})dX) \\ \quad \\ 就将矩阵求导,微分和矩阵的迹关联了起来。 X=⎣⎢⎢⎡x11x21…xn1x12x22…xn2…………x1nx2n…xnn⎦⎥⎥⎤dX=⎣⎢⎢⎡dx11dx21…dxn1dx12dx22…dxn2…………dx1ndx2n…dxnn⎦⎥⎥⎤∂X∂f(X)=⎣⎢⎢⎢⎡∂x11∂f∂x21∂f…∂xn1∂f∂x12∂f∂x22∂f…∂xn2∂f…………∂x1n∂f∂x2n∂f…∂xnn∂f⎦⎥⎥⎥⎤将f(X)看做关于矩阵元素的多元函数,则df(X)=i=1∑nj=1∑n∂xij∂fdxij上式是矩阵乘积的内积,即矩阵ABT的迹df(X)=tr(∂X∂f(X)(dX)T)=tr((∂X∂f(X))TdX)=tr((∂XT∂f(X))dX)就将矩阵求导,微分和矩阵的迹关联了起来。 因此,对实值函数进行矩阵求导,相当于求函数的全微分,并展开为 d f ( X ) = t r ( ( ∂ f ( X ) ∂ X T ) d X ) df(X)=tr((\frac {\partial f(X)}{\partial X^T})dX) df(X)=tr((∂XT∂f(X))dX)的形式,就能得到分子布局的求导结果 ∂ f ( X ) ∂ X T \frac {\partial f(X)}{\partial X^T} ∂XT∂f(X)。
定义实矩阵函数 F ( X ) F(X) F(X)的微分: d F ( X ) = [ d f 11 ( X ) d f 12 ( X ) … d f 1 n ( X ) d f 21 ( X ) d f 22 ( X ) … d f 2 n ( X ) … … … … d f n 1 ( X ) d f n 2 ( X ) … d f n n ( X ) ] dF(X)=\begin{bmatrix} df_{11}(X) & df_{12}(X) & \dots & df_{1n}(X) \\ df_{21}(X) & df_{22}(X) & \dots & df_{2n}(X) \\ \dots & \dots & \dots & \dots \\ df_{n1}(X) & df_{n2}(X) & \dots & df_{nn}(X) \\ \end{bmatrix} dF(X)=⎣⎢⎢⎡df11(X)df21(X)…dfn1(X)df12(X)df22(X)…dfn2(X)…………df1n(X)df2n(X)…dfnn(X)⎦⎥⎥⎤ 仍然是一个与 F ( X ) F(X) F(X)同型的矩阵。引入矩阵函数的目的只是为了方便微分计算。
矩阵微分计算法则矩阵微分的计算法则,与标量微分的计算法则相同,将标量变量替换为矩阵变量后,需要注意的只有乘积顺序不能改变。
常矩阵d A m × n = 0 m × n dA^{m\times n}=0^{m\times n} dAm×n=0m×n
线性d ( c 1 F ( X ) + c 2 G ( X ) ) = c 1 d F ( X ) + c 2 d G ( X ) d(c_1F(X)+c_2G(X))=c_1dF(X)+c_2dG(X) d(c1F(X)+c2G(X))=c1dF(X)+c2dG(X)
乘积d ( F ( X ) G ( X ) ) = ( d F ( X ) ) G ( X ) + F ( X ) d ( G ( X ) ) d(F(X)G(X))=(dF(X))G(X)+F(X)d(G(X)) d(F(X)G(X))=(dF(X))G(X)+F(X)d(G(X))
转置( d F ( X ) ) T = d ( F T ( X ) ) (dF(X))^T=d(F^T(X)) (dF(X))T=d(FT(X)) 特例: d X T = ( d X ) T dX^T=(dX)^T dXT=(dX)T
迹d ( t r ( f ( X ) ) ) = d f ( X ) = t r ( d f ( X ) ) d ( t r ( F ( X ) ) ) = d ∑ i = 1 n f i i ( X ) = ∑ i = 1 n d f i i ( X ) = t r ( d F ( X ) ) d(tr(f(X)))=df(X)=tr(df(X)) \\ \quad \\ d(tr(F(X)))=d\sum_{i=1}^nf_{ii}(X)=\sum_{i=1}^ndf_{ii}(X)=tr(dF(X)) d(tr(f(X)))=df(X)=tr(df(X))d(tr(F(X)))=di=1∑nfii(X)=i=1∑ndfii(X)=tr(dF(X))
通过矩阵微分进行求导例: 求 : ∂ t r ( X T X ) ∂ X T 解 : d ( t r ( X T X ) ) = t r ( d ( X T X ) ) = t r ( d ( X T ) X + X T d X ) = t r ( ( d X ) T X + X T d X ) = t r ( ( d X T ) X ) + t r ( X T d X ) = t r ( X T ( d X T ) T ) + t r ( X T d X ) = t r ( X T d X ) + t r ( X T d X ) = t r ( 2 X T d X ) ∂ t r ( X T X ) ∂ X T = 2 X T 求:\\ \quad \\ \frac {\partial tr(X^TX)}{\partial X^T} \\ \quad \\ 解:\\ \quad \\ d(tr(X^TX))=tr(d(X^TX)) \\ = tr(d(X^T)X+X^TdX) \\ = tr((dX)^TX+X^TdX) \\ = tr((dX^T)X)+tr(X^TdX) \\ =tr(X^T(dX^T)^T)+tr(X^TdX) \\ = tr(X^TdX)+tr(X^TdX) \\ = tr(2X^TdX) \\ \quad \\ \frac {\partial tr(X^TX)}{\partial X^T} = 2X^T 求:∂XT∂tr(XTX)解:d(tr(XTX))=tr(d(XTX))=tr(d(XT)X+XTdX)=tr((dX)TX+XTdX)=tr((dXT)X)+tr(XTdX)=tr(XT(dXT)T)+tr(XTdX)=tr(XTdX)+tr(XTdX)=tr(2XTdX)∂XT∂tr(XTX)=2XT
实际上,所有的实值函数求导,包括标量对向量、矩阵求导,都能通过这样的求全微分、迹的交换、转置得到最终结果。
常用的矩阵微分行列式: d ∣ X ∣ = t r ( ∣ X ∣ X − 1 d X ) d|X|=tr(|X|X^{-1}dX) d∣X∣=tr(∣X∣X−1dX)
逆矩阵: d ( X − 1 ) = − X − 1 ( d X ) X − 1 d(X^{-1})=-X^{-1}(dX)X^{-1} d(X−1)=−X−1(dX)X−1
后记把矩阵求导转换为求矩阵微分,可以有效降低求导的难度。
本节是矩阵求导的最后一个部分。SLAM中涉及矩阵求导的部分很多,后续碰到SLAM中的矩阵求导时,会加到这一篇的求导例子中。