矩阵分析与应用(二)——矩阵微分

部分符号约定

本文介绍矩阵分析的矩阵微分部分。

我们重述一遍本系列文章(一)里的符号约定:

  1. 一般而言,粗体大写字母(如 A \boldsymbol{A} A )代表矩阵,粗体小写字母(如 b \boldsymbol{b} b )代表列向量,粗体小写字母的转置(如 x T \boldsymbol{x}^\mathrm{T} xT )代表行向量
  2. x T \boldsymbol{x}^\mathrm{T} xT 代表转置, x ∗ \boldsymbol{x}^* x 代表共轭, x H \boldsymbol{x}^\mathrm{H} xH 代表共轭转置。 I \boldsymbol{I} I 代表单位矩阵, O \boldsymbol{O} O 代表零矩阵。

同时,我们为了方便起见,引入新的符号约定,其与上面第1条的精神内核是一致的。

  1. 实值矩阵函数沿用“非粗体代表标量,小写粗体代表列向量,大写粗体代表矩阵”的约定,具体如下
  • f ( x ) f\left( \boldsymbol{x} \right) f(x) R m → R \mathbb{R} ^m\rightarrow \mathbb{R} RmR 的映射
  • f ( X ) f\left( \boldsymbol{X} \right) f(X) R m × n → R \mathbb{R} ^{m\times n}\rightarrow \mathbb{R} Rm×nR 的映射
  • f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) R m → R p \mathbb{R} ^m\rightarrow \mathbb{R}^{p} RmRp 的映射
  • f ( X ) \boldsymbol{f}\left( \boldsymbol{X} \right) f(X) R m × n → R p \mathbb{R} ^{m\times n}\rightarrow \mathbb{R}^{p} Rm×nRp 的映射
  • F ( x ) \boldsymbol{F}\left( \boldsymbol{x} \right) F(x) R m → R p × q \mathbb{R} ^m\rightarrow \mathbb{R}^{p\times q} RmRp×q 的映射
  • F ( X ) \boldsymbol{F}\left( \boldsymbol{X} \right) F(X) R m × n → R p × q \mathbb{R} ^{m\times n}\rightarrow \mathbb{R}^{p\times q} Rm×nRp×q 的映射
  1. x , X \boldsymbol{x},\boldsymbol{X} x,X 代表元素为实数, z , Z \boldsymbol{z},\boldsymbol{Z} z,Z 代表元素为复数。

一阶偏导: Jacobian 矩阵与梯度矩阵

注:本文中单独出现的“Jacobian”一词均指代“Jacobian 矩阵”

对于高数的一元函数 f ( x ) f\left( x \right) f(x) ,其导数为 d f ( x ) d x \frac{\mathrm{d}f\left( x \right)}{\mathrm{d}x} dxdf(x) 。导数反应了 f f f x x x 的一阶近似关系。那么对于多元函数而言,我们是否也能定义一个“导数”呢?事实上, Jacobian 就相当于多元函数的“一阶导数”,用于衡量一阶近似关系

在高数重积分的多元函数的换元中,其伸缩因子为雅可比行列式,实际上就是本章要讲的 Jacobian 矩阵的行列式。为了以更简洁且直观的形式书写 Jacobian ,我们首先引入偏导算子

偏导算子

首先我们引入偏导算子。如果 x \boldsymbol{x} x m m m 行的列向量, X \boldsymbol{X} X m × n m\times n m×n 的矩阵,则

{ D x = ∂ ∂ x T = [ ∂ ∂ x 1 , ⋯   , ∂ ∂ x m ] ( d i m = 1 × m ) D X = ∂ ∂ X T = [ ∂ ∂ x 11 ⋯ ∂ ∂ x m 1 ⋮ ⋱ ⋮ ∂ ∂ x 1 n ⋯ ∂ ∂ x m n ] ( d i m = n × m ) (1.1) \begin{cases} \mathrm{D}_{\boldsymbol{x}}=\frac{\partial}{\partial \boldsymbol{x}^{\mathrm{T}}}=\left[ \frac{\partial}{\partial x_1},\cdots ,\frac{\partial}{\partial x_m} \right] \left( \mathrm{dim}=1\times m \right)\\ \mathrm{D}_{\boldsymbol{X}}=\frac{\partial}{\partial \boldsymbol{X}^{\mathrm{T}}}=\left[ \begin{matrix} \frac{\partial}{\partial x_{11}}& \cdots& \frac{\partial}{\partial x_{m1}}\\ \vdots& \ddots& \vdots\\ \frac{\partial}{\partial x_{1n}}& \cdots& \frac{\partial}{\partial x_{mn}}\\ \end{matrix} \right] \left( \mathrm{dim}=n\times m \right)\\ \end{cases}\tag{1.1} Dx=xT=[x1,,xm](dim=1×m)DX=XT= x11x1nxm1xmn (dim=n×m)(1.1)

注意!求偏导后有个转置,所以原列向量变成了行向量,原 m × n m\times n m×n 的矩阵变成了 n × m n\times m n×m

注:为什么要转置呢?我们考虑 f ( x 1 , ⋯   , x n ) f\left( x_1,\cdots ,x_n \right) f(x1,,xn) 全微分 d f = [ ∂ f ∂ x 1 , ⋯   , ∂ f ∂ x n ] [ d x 1 ⋮ d x n ] \mathrm{d}f=\left[ \frac{\partial f}{\partial x_1},\cdots ,\frac{\partial f}{\partial x_n} \right] \left[ \begin{array}{c} \mathrm{d}x_1\\ \vdots\\ \mathrm{d}x_n\\ \end{array} \right] df=[x1f,,xnf] dx1dxn ,即 d f = ( ∂ f ∂ x ) T d x \mathrm{d}f=\left( \frac{\partial f}{\partial \boldsymbol{x}} \right) ^{\mathrm{T}}\mathrm{d}\boldsymbol{x} df=(xf)Tdx ,其中 ( ∂ f ∂ x ) T \left( \frac{\partial f}{\partial \boldsymbol{x}} \right) ^{\mathrm{T}} (xf)T 天然携带一个转置

标量函数的Jacobian 矩阵

首先,我们先定义标量函数的Jacobian。

定义:若有 d f ( X ) = t r ( A d X ) \mathrm{d}f\left( \boldsymbol{X} \right) =\mathrm{tr}\left( \boldsymbol{A}\mathrm{d}\boldsymbol{X} \right) df(X)=tr(AdX) 成立,则称 A \boldsymbol{A} A f ( X ) f\left( \boldsymbol{X} \right) f(X) 关于 X \boldsymbol{X} X 的Jacobian。

思考:为什么Jacobian的定义要套一层 t r \mathrm{tr} tr
我的想法:若变元 X \boldsymbol{X} X 被替换为向量,那么外面有没有 t r \mathrm{tr} tr 都无所谓,反正都是标量。但如果作为矩阵,为了让 X \boldsymbol{X} X 保持优美的矩阵形式,不惨遭向量化,就得这么定义。而由于 t r \mathrm{tr} tr 的相似不变性,在证明中也会很好用。

从而不难注意到:标量函数 f ( x ) f\left( \boldsymbol{x} \right) f(x) 关于 x \boldsymbol{x} x 的Jacobian为

D x f ( x ) = ∂ f ( x ) ∂ x T = [ ∂ f ( x ) ∂ x 1 , ⋯   , ∂ f ( x ) ∂ x m ] (1.2) \mathrm{D}_{\boldsymbol{x}}f\left( \boldsymbol{x} \right) =\frac{\partial f\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}^{\mathrm{T}}}=\left[ \frac{\partial f\left( \boldsymbol{x} \right)}{\partial x_1},\cdots ,\frac{\partial f\left( \boldsymbol{x} \right)}{\partial x_m} \right] \tag{1.2} Dxf(x)=xTf(x)=[x1f(x),,xmf(x)](1.2)

其中 d f ( x ) = D x f ( x ) d x \mathrm{d}f\left( \boldsymbol{x} \right) =\mathrm{D}_{\boldsymbol{x}}f\left( \boldsymbol{x} \right) \mathrm{d}\boldsymbol{x} df(x)=Dxf(x)dx 。从“导数=微分商”的视角来看, d f ( x ) = D x f ( x ) d x ⇒ D x f ( x ) = ∂ f ( x ) ∂ x T \mathrm{d}f\left( \boldsymbol{x} \right) =\mathrm{D}_{\boldsymbol{x}}f\left( \boldsymbol{x} \right) \mathrm{d}\boldsymbol{x}\Rightarrow \mathrm{D}_{\boldsymbol{x}}f\left( \boldsymbol{x} \right) =\frac{\partial f\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}^{\mathrm{T}}} df(x)=Dxf(x)dxDxf(x)=xTf(x) ,所以Jacobian又可以看作导数对多元函数的推广

同理,定义 D X f ( X ) \mathrm{D}_{\boldsymbol{X}}f\left( \boldsymbol{X} \right) DXf(X) f ( X ) f\left( \boldsymbol{X} \right) f(X) 的 Jacobian

D X f ( X ) = ∂ f ( X ) ∂ X T = [ ∂ f ( X ) ∂ x 11 ⋯ ∂ f ( X ) ∂ x m 1 ⋮ ⋱ ⋮ ∂ f ( X ) ∂ x 1 n ⋯ ∂ f ( X ) ∂ x m n ] (1.3) \mathrm{D}_{\boldsymbol{X}}f\left( \boldsymbol{X} \right) =\frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}^{\mathrm{T}}}=\left[ \begin{matrix} \frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{11}}& \cdots& \frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{m1}}\\ \vdots& \ddots& \vdots\\ \frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{1n}}& \cdots& \frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{mn}}\\ \end{matrix} \right] \tag{1.3} DXf(X)=XTf(X)= x11f(X)x1nf(X)xm1f(X)xmnf(X) (1.3)

从而 f ( X ) f\left( \boldsymbol{X} \right) f(X) 的全微分可以被写为 d f ( X ) = t r ( D X f ( X ) d X ) \mathrm{d}f\left( \boldsymbol{X} \right) =\mathrm{tr}\left( \mathrm{D}_{\boldsymbol{X}}f\left( \boldsymbol{X} \right) \mathrm{d}\boldsymbol{X} \right) df(X)=tr(DXf(X)dX)

当然,还有另一种做法,就是将矩阵向量化,然后按照向量的Jacobian处理。此时即为 D v e c X f ( X ) = ∂ f ( X ) ∂ v e c X \mathrm{D}_{\mathrm{vec}\boldsymbol{X}}f\left( \boldsymbol{X} \right) =\frac{\partial f\left( \boldsymbol{X} \right)}{\partial \mathrm{vec}\boldsymbol{X}} DvecXf(X)=vecXf(X) ,我们将其称为 f ( X ) f\left( \boldsymbol{X} \right) f(X) 关于 X \boldsymbol{X} X行偏导向量。在实际应用中,我们更常使用 Jacobian 些。

矩阵函数的Jacobian

矩阵函数 F ( X ) \boldsymbol{F}\left( \boldsymbol{X} \right) F(X) 的 Jacobian 则会相对复杂一些,具体为若 F ( X ) \boldsymbol{F}\left( \boldsymbol{X} \right) F(X) R m × n → R p × q \mathbb{R} ^{m\times n}\rightarrow \mathbb{R} ^{p\times q} Rm×nRp×q ,则其Jacobian为

D X F ( X ) = ∂ v e c ( F ( X ) ) ∂ ( v e c X ) T (1.4) \mathrm{D}_{\boldsymbol{X}}\boldsymbol{F}\left( \boldsymbol{X} \right) =\frac{\partial \mathrm{vec}\left( \boldsymbol{F}\left( \boldsymbol{X} \right) \right)}{\partial \left( \mathrm{vec}\boldsymbol{X} \right) ^{\mathrm{T}}}\tag{1.4} DXF(X)=(vecX)Tvec(F(X))(1.4)

其中 D X F ( X ) ∈ R p q × m n \mathrm{D}_{\boldsymbol{X}}\boldsymbol{F}\left( \boldsymbol{X} \right) \in \mathbb{R} ^{pq\times mn} DXF(X)Rpq×mn ,这样有 v e c ( d F ) = ∂ v e c ( F ( X ) ) ∂ ( v e c X ) T v e c ( d X ) \mathrm{vec}\left( \mathrm{d}\boldsymbol{F} \right) =\frac{\partial \mathrm{vec}\left( \boldsymbol{F}\left( \boldsymbol{X} \right) \right)}{\partial \left( \mathrm{vec}\boldsymbol{X} \right) ^{\mathrm{T}}}\mathrm{vec}\left( \mathrm{d}\boldsymbol{X} \right) vec(dF)=(vecX)Tvec(F(X))vec(dX)

注:为什么矩阵函数的Jacobian要用这么绕的定义方式呢?留作习题供读者思考。(可参考:张贤达《矩阵分析与应用》(第二版)第145页)

梯度矩阵

在高数中,我们可能更熟悉梯度,本质上梯度和Jacobian描述的是一个东西,只是差了个转置。

定义梯度算子 ∇ x = [ ∂ ∂ x 1 , ⋯   , ∂ ∂ x m ] T = ( D x ) T \nabla _{\boldsymbol{x}}=\left[ \frac{\partial}{\partial x_1},\cdots ,\frac{\partial}{\partial x_m} \right] ^{\mathrm{T}}=\left( \mathrm{D}_{\boldsymbol{x}} \right) ^{\mathrm{T}} x=[x1,,xm]T=(Dx)T 。容易发现,梯度算子相当于偏导算子的转置

注:我们可以这么理解, Jacobian 相当于一个专用的矩阵,专门用于和 d x \mathrm{d}\boldsymbol{x} dx 乘,所以就转置了。而梯度很可能会参与后续操作,我们期望被操作的向量尽可能是以行向量的形式存在的,所以不转置。

同理,关于矩阵的梯度算子也有两种,分别是 ∇ v e c X = ( D v e c X ) T \nabla _{\mathrm{vec}\boldsymbol{X}}=\left( \mathrm{D}_{\mathrm{vec}\boldsymbol{X}} \right) ^{\mathrm{T}} vecX=(DvecX)T ∇ X = ( D X ) T \nabla _{\boldsymbol{X}}=\left( \mathrm{D}_{\boldsymbol{X}} \right) ^{\mathrm{T}} X=(DX)T

与 Jacobian 类似的,我们也可以给出梯度矩阵,它们均为 Jacobian 的转置,此处不予赘述。

我们称梯度的负方向 − ∇ x f ( x ) -\nabla _{\boldsymbol{x}}f\left( \boldsymbol{x} \right) xf(x)梯度流,其用于表征函数下降最快的方向。例如机器学习中就常用梯度下降法优化损失函数,使得损失函数尽可能小。

二阶偏导: Hessian 矩阵

实Hessian矩阵

注:本文中单独出现的“Hessian”一词均指代“Hessian 矩阵”

同理,我们可以定义二阶偏导,称之为 Hessian 。有了前面 Jacobian 的基础,类比出 Hessian 也并不困难。

考虑 f ( x ) f\left( \boldsymbol{x} \right) f(x) 的 Hessian ,其被定义为 ∂ 2 f ( x ) ∂ x ∂ x T = ∂ ∂ x T ( ∂ f ( x ) ∂ x ) \frac{\partial ^2f\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}\partial \boldsymbol{x}^{\mathrm{T}}}=\frac{\partial}{\partial \boldsymbol{x}^{\mathrm{T}}}\left( \frac{\partial f\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}} \right) xxT2f(x)=xT(xf(x)) ,当然我们也可记作 ∇ x 2 f ( x ) = D x ( ∇ x f ( x ) ) \nabla _{\boldsymbol{x}}^{2}f\left( \boldsymbol{x} \right) =\mathrm{D}_{\boldsymbol{x}}\left( \nabla _{\boldsymbol{x}}f\left( \boldsymbol{x} \right) \right) x2f(x)=Dx(xf(x))

当然,将 x \boldsymbol{x} x 换成 X \boldsymbol{X} X ,定义依然成立。其 Hessian 被定义为 ∂ 2 f ( X ) ∂ X ∂ X T = ∂ ∂ X T ( ∂ f ( X ) ∂ X ) \frac{\partial ^2f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}\partial \boldsymbol{X}^{\mathrm{T}}}=\frac{\partial}{\partial \boldsymbol{X}^{\mathrm{T}}}\left( \frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}} \right) XXT2f(X)=XT(Xf(X)) ,同理可记作 ∇ X 2 f ( X ) = D X ( ∇ X f ( X ) ) \nabla _{\boldsymbol{X}}^{2}f\left( \boldsymbol{X} \right) =\mathrm{D}_{\boldsymbol{X}}\left( \nabla _{\boldsymbol{X}}f\left( \boldsymbol{X} \right) \right) X2f(X)=DX(Xf(X))

二阶微分与Hessian的关系是:若 d 2 f ( x ) = ( d x ) T B d x \mathrm{d}^2f\left( \boldsymbol{x} \right) =\left( \mathrm{d}\boldsymbol{x} \right) ^{\mathrm{T}}\boldsymbol{B}\mathrm{d}\boldsymbol{x} d2f(x)=(dx)TBdx ,则其Hessian为 H [ f ( x ) ] = 1 2 ( B + B T ) \boldsymbol{H}\left[ f\left( \boldsymbol{x} \right) \right] =\frac{1}{2}\left( \boldsymbol{B}+\boldsymbol{B}^{\mathrm{T}} \right) H[f(x)]=21(B+BT) 。若 $\mathrm{d}^2f\left( \boldsymbol{X} \right) =\left( \mathrm{d}\left( \mathrm{vec}\boldsymbol{X} \right) \right) ^{\mathrm{T}}\boldsymbol{B}\mathrm{d}\left( \mathrm{vec}\boldsymbol{X} \right) $ ,则其Hessian为 H [ f ( x ) ] = 1 2 ( B + B T ) \boldsymbol{H}\left[ f\left( \boldsymbol{x} \right) \right] =\frac{1}{2}\left( \boldsymbol{B}+\boldsymbol{B}^{\mathrm{T}} \right) H[f(x)]=21(B+BT)

全纯函数与共轭坐标

在很多时候,我们需要研究复Hessian。为了将实数的结论推广,我们有必要回顾下复变的结论。

在复变中有着“解析函数”这一重要概念,我们有时也称之为“全纯函数”,具体而言就是要满足Cauchy-Riemann条件。全纯函数十分重要,基本上解析就是复变的半壁江山。我们的指数函数、正余弦函数、正整数次幂函数都是全纯的,但例如 f ( z ) = ∣ z ∣ 2 = z ∗ z f\left( z \right) =\left| z \right|^2=z^*z f(z)=z2=zz不是全纯的

为了将它们变成全纯的,我们不再使用 r = ( x , y ) T r=\left(x,y\right)^{\mathrm{T}} r=(x,y)T 坐标,而是使用共轭坐标 c = ( z , z ∗ ) T c=\left(z,z^*\right)^{\mathrm{T}} c=(z,z)T 表示。在处理一个量 z z z 时,将其共轭量 z ∗ z^* z 当作常数,此时函数就是全纯的了。具体而言,将 f ( z ) f\left( z \right) f(z) 看成 f ˉ ( z , z ∗ ) = z ∗ z \bar{f}\left( z,z^* \right) =z^*z fˉ(z,z)=zz ,在处理 z z z 时将 z ∗ z^* z 看作常数。即此时这相当于一个正比例函数,自然是全纯的。

这样我们就可以定义关于 z z z z ∗ z^* z 的形式偏导了,具体而言
{ ∂ ∂ z = 1 2 ( ∂ ∂ x − j ∂ ∂ y ) ∂ ∂ z ∗ = 1 2 ( ∂ ∂ x + j ∂ ∂ y ) (2.1) \begin{cases} \frac{\partial}{\partial z}=\frac{1}{2}\left( \frac{\partial}{\partial x}-\mathrm{j}\frac{\partial}{\partial y} \right)\\ \frac{\partial}{\partial z^*}=\frac{1}{2}\left( \frac{\partial}{\partial x}+\mathrm{j}\frac{\partial}{\partial y} \right)\\ \end{cases}\tag{2.1} z=21(xjy)z=21(x+jy)(2.1)
此时如果 x x x y y y 独立,那么 z z z z ∗ z^* z 也应独立,即 ∂ z ∂ z ∗ = 0 , ∂ z ∗ ∂ z = 0 \frac{\partial z}{\partial z^*}=0,\frac{\partial z^*}{\partial z}=0 zz=0,zz=0

复Jacobian和共轭Jacobian

前面说了,使用共轭坐标时,对一个求偏导,其共轭量为常数。因此
{ D Z f ( Z , Z ∗ ) = ∂ f ( Z , Z ∗ ) ∂ Z T ∣ Z ∗ 为常数矩阵 D Z ∗ f ( Z , Z ∗ ) = ∂ f ( Z , Z ∗ ) ∂ Z H ∣ Z 为常数矩阵 (2.2) \begin{cases} \mathrm{D}_{\boldsymbol{Z}}f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right) =\left. \frac{\partial f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right)}{\partial \boldsymbol{Z}^{\mathrm{T}}} \right|_{\boldsymbol{Z}^*\text{为常数矩阵}}\\ \mathrm{D}_{\boldsymbol{Z}^*}f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right) =\left. \frac{\partial f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right)}{\partial \boldsymbol{Z}^{\mathrm{H}}} \right|_{\boldsymbol{Z}\text{为常数矩阵}}\\ \end{cases}\tag{2.2} DZf(Z,Z)=ZTf(Z,Z) Z为常数矩阵DZf(Z,Z)=ZHf(Z,Z) Z为常数矩阵(2.2)
不难得到全微分形式为
d f = D v e c Z f d v e c Z + D v e c Z ∗ f d v e c Z ∗ = t r ( D Z f d Z + D Z ∗ f d Z ∗ ) (2.3) \begin{aligned} \mathrm{d}f&=\mathrm{D}_{\mathrm{vec}\boldsymbol{Z}}f\mathrm{dvec}\boldsymbol{Z}+\mathrm{D}_{\mathrm{vec}\boldsymbol{Z}^*}f\mathrm{dvec}\boldsymbol{Z}^*\\ &=\mathrm{tr}\left( \mathrm{D}_{\boldsymbol{Z}}f\mathrm{d}\boldsymbol{Z}+\mathrm{D}_{\boldsymbol{Z}^*}f\mathrm{d}\boldsymbol{Z}^* \right)\\ \end{aligned}\tag{2.3} df=DvecZfdvecZ+DvecZfdvecZ=tr(DZfdZ+DZfdZ)(2.3)
因此,若有 d f = t r ( A d Z + B d Z ∗ ) \mathrm{d}f=\mathrm{tr}\left( \boldsymbol{A}\mathrm{d}\boldsymbol{Z}+\boldsymbol{B}\mathrm{d}\boldsymbol{Z}^* \right) df=tr(AdZ+BdZ) ,则将 A = D Z f d Z \boldsymbol{A}=\mathrm{D}_{\boldsymbol{Z}}f\mathrm{d}\boldsymbol{Z} A=DZfdZ 称为其Jacobian, B = D Z ∗ f d Z ∗ \boldsymbol{B}=\mathrm{D}_{\boldsymbol{Z^*}}f\mathrm{d}\boldsymbol{Z}^* B=DZfdZ 称为共轭Jacobian。显然这一结论与实数的形式兼容,可以视为实Jacobian向复数的推广。

全Hessian

再进行一次微分有
d 2 f = [ d v e c Z d v e c Z ∗ ] H [ ∂ 2 f ∂ v e c Z ∗ ∂ ( v e c Z ) T ∂ 2 f ∂ v e c Z ∗ ∂ ( v e c Z ∗ ) T ∂ 2 f ∂ v e c Z ∂ ( v e c Z ) T ∂ 2 f ∂ v e c Z ∂ ( v e c Z ∗ ) T ] [ d v e c Z d v e c Z ∗ ] (2.4) \mathrm{d}^2f=\left[ \begin{array}{c} \mathrm{dvec}\boldsymbol{Z}\\ \mathrm{dvec}\boldsymbol{Z}^*\\ \end{array} \right] ^{\mathrm{H}}\left[ \begin{matrix} \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}^*\partial \left( \mathrm{vec}\boldsymbol{Z} \right) ^{\mathrm{T}}}& \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}^*\partial \left( \mathrm{vec}\boldsymbol{Z}^* \right) ^{\mathrm{T}}}\\ \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}\partial \left( \mathrm{vec}\boldsymbol{Z} \right) ^{\mathrm{T}}}& \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}\partial \left( \mathrm{vec}\boldsymbol{Z}^* \right) ^{\mathrm{T}}}\\ \end{matrix} \right] \left[ \begin{array}{c} \mathrm{dvec}\boldsymbol{Z}\\ \mathrm{dvec}\boldsymbol{Z}^*\\ \end{array} \right] \tag{2.4} d2f=[dvecZdvecZ]H vecZ(vecZ)T2fvecZ(vecZ)T2fvecZ(vecZ)T2fvecZ(vecZ)T2f [dvecZdvecZ](2.4)
其中 H \boldsymbol{H} H 称为 f ( Z , Z ∗ ) f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right) f(Z,Z) 的全Hessian矩阵, H Z ∗ , Z \boldsymbol{H}_{\boldsymbol{Z}^*,\boldsymbol{Z}} HZ,Z 称为 f ( Z , Z ∗ ) f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right) f(Z,Z) 的主Hessian矩阵.
H = [ H Z ∗ , Z H Z ∗ , Z ∗ H Z , Z H Z , Z ∗ ] = [ ∂ 2 f ∂ v e c Z ∗ ∂ ( v e c Z ) T ∂ 2 f ∂ v e c Z ∗ ∂ ( v e c Z ∗ ) T ∂ 2 f ∂ v e c Z ∂ ( v e c Z ) T ∂ 2 f ∂ v e c Z ∂ ( v e c Z ∗ ) T ] (2.5) \boldsymbol{H}=\left[ \begin{matrix} \boldsymbol{H}_{\boldsymbol{Z}^*,\boldsymbol{Z}}& \boldsymbol{H}_{\boldsymbol{Z}^*,\boldsymbol{Z}^*}\\ \boldsymbol{H}_{\boldsymbol{Z},\boldsymbol{Z}}& \boldsymbol{H}_{\boldsymbol{Z},\boldsymbol{Z}^*}\\ \end{matrix} \right] =\left[ \begin{matrix} \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}^*\partial \left( \mathrm{vec}\boldsymbol{Z} \right) ^{\mathrm{T}}}& \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}^*\partial \left( \mathrm{vec}\boldsymbol{Z}^* \right) ^{\mathrm{T}}}\\ \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}\partial \left( \mathrm{vec}\boldsymbol{Z} \right) ^{\mathrm{T}}}& \frac{\partial ^2f}{\partial \mathrm{vec}\boldsymbol{Z}\partial \left( \mathrm{vec}\boldsymbol{Z}^* \right) ^{\mathrm{T}}}\\ \end{matrix} \right] \tag{2.5} H=[HZ,ZHZ,ZHZ,ZHZ,Z]= vecZ(vecZ)T2fvecZ(vecZ)T2fvecZ(vecZ)T2fvecZ(vecZ)T2f (2.5)

矩阵求导运算

矩阵求导公式基本类似普通实函数,例如乘法法则、除法法则、链式法则。

但在这里,我推荐一种更好的做法,就是找代表元得到通项公式,再合成为矩阵。具体可以参考下面两篇文章

矩阵推导过程中会用到的其中一个重要的性质就是变量的独立性假设,即假设矩阵或向量的每个变元 x i , x j x_i,x_j xi,xj 是独立的,具体而言

∂ x i ∂ x j = δ i j = { 1 , i = j 0 , e l s e (3.1) \frac{\partial x_i}{\partial x_j}=\delta _{ij}=\begin{cases} 1,& i=j\\ 0,& \mathrm{else}\\ \end{cases}\tag{3.1} xjxi=δij={1,0,i=jelse(3.1)

∂ x k l ∂ x i j = δ i k δ j l = { 1 , i = k ∩ j = l 0 , e l s e (3.2) \frac{\partial x_{kl}}{\partial x_{ij}}=\delta _{ik}\delta _{jl}=\begin{cases} 1,& i=k\cap j=l\\ 0,& \mathrm{else}\\ \end{cases}\tag{3.2} xijxkl=δikδjl={1,0,i=kj=lelse(3.2)

其中 δ i j \delta_{ij} δij 又被称为Kronecker置换符号,有着下标置换的功能。具体而言 ∑ j x i j δ j k = x i k \sum_{j}{x_{ij}\delta_{jk}}=x_{ik} jxijδjk=xik ,直观地看相当于将 x i j x_{ij} xij 的下标 j j j 置换为了 k k k

同时,我们还注意到矩阵乘法 C = A B \boldsymbol{C}=\boldsymbol{AB} C=AB 可以写为 c i j = ∑ k a i k b k j c_{ij}=\sum_k{a_{ik}b_{kj}} cij=kaikbkj 的形式。因为求和范围是对全部指标进行,所以不需要写求和上下标。同理, D = A B C \boldsymbol{D}=\boldsymbol{ABC} D=ABC 可以写为 d i j = ∑ k , l a i k b k l c l j d_{ij}=\sum_{k,l}{a_{ik}b_{kl}c_{lj}} dij=k,laikbklclj 的形式,这样可以让我们的推导更加简洁。

当然还有一种更加简洁的形式,甚至可以让我们连求和号都扔掉,这种方法叫做爱因斯坦求和约定。不过为了照顾作为初学者的读者,本文就不将难度放得这么高了,还是附上带上求和符号的证明。

例题1
试求实标量函数 f ( X ) = a T X X T b f\left( \boldsymbol{X} \right) =\boldsymbol{a}^{\mathrm{T}}\boldsymbol{XX}^{\mathrm{T}}\boldsymbol{b} f(X)=aTXXTb 的Jacobian。

证明
由定义:
a T X X T b = ∑ k , l , m a k x k m x l m b l (3.3) \boldsymbol{a}^{\mathrm{T}}\boldsymbol{XX}^{\mathrm{T}}\boldsymbol{b}=\sum_{k,l,m}{a_kx_{km}x_{lm}b_l}\tag{3.3} aTXXTb=k,l,makxkmxlmbl(3.3)
设其Jacobian第 i i i j j j 列元素为 [ ∂ f ( X ) ∂ X T ] i j \left[ \frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}^{\mathrm{T}}} \right] _{ij} [XTf(X)]ij ,则
[ ∂ f ( X ) ∂ X T ] i j = ∂ f ( X ) ∂ x j i = ∑ p , q , r ∂ a 1 p T x p q x q r T b r 1 ∂ x j i = ∑ p , q , r ∂ a p 1 x p q x r q b r 1 ∂ x j i = ∑ p , q , r a p 1 ∂ x p q ∂ x j i x r q b r 1 + ∑ p , q , r a p 1 x p q ∂ x r q ∂ x j i b r 1 = ∑ p , q , r ( a p 1 δ j p ) ( x r q δ i q ) b r 1 + ∑ p , q , r a p 1 ( x r q δ i q ) ( b r 1 δ j r ) = ∑ r a j 1 x r i b r 1 + ∑ r a p 1 x p i b j 1 = ∑ r x i r T b r 1 a 1 j T + ∑ r x i p T a p 1 b 1 j T (3.4) \begin{aligned} \left[ \frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}^{\mathrm{T}}} \right] _{ij}&=\frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{ji}}=\sum_{p,q,r}{\frac{\partial a_{1p}^{\mathrm{T}}x_{pq}x_{qr}^{\mathrm{T}}b_{r1}}{\partial x_{ji}}}\\ &=\sum_{p,q,r}{\frac{\partial a_{p1}x_{pq}x_{rq}b_{r1}}{\partial x_{ji}}}\\ &=\sum_{p,q,r}{a_{p1}\frac{\partial x_{pq}}{\partial x_{ji}}x_{rq}b_{r1}}+\sum_{p,q,r}{a_{p1}x_{pq}\frac{\partial x_{rq}}{\partial x_{ji}}b_{r1}}\\ &=\sum_{p,q,r}{\left( a_{p1}\delta _{jp} \right) \left( x_{rq}\delta _{iq} \right) b_{r1}}+\sum_{p,q,r}{a_{p1}\left( x_{rq}\delta _{iq} \right) \left( b_{r1}\delta _{jr} \right)}\\ &=\sum_r{a_{j1}x_{ri}b_{r1}}+\sum_r{a_{p1}x_{pi}b_{j1}}\\ &=\sum_r{x_{ir}^{\mathrm{T}}b_{r1}a_{1j}^{\mathrm{T}}}+\sum_r{x_{ip}^{\mathrm{T}}a_{p1}b_{1j}^{\mathrm{T}}}\\ \end{aligned}\tag{3.4} [XTf(X)]ij=xjif(X)=p,q,rxjia1pTxpqxqrTbr1=p,q,rxjiap1xpqxrqbr1=p,q,rap1xjixpqxrqbr1+p,q,rap1xpqxjixrqbr1=p,q,r(ap1δjp)(xrqδiq)br1+p,q,rap1(xrqδiq)(br1δjr)=raj1xribr1+rap1xpibj1=rxirTbr1a1jT+rxipTap1b1jT(3.4)
∂ f ( X ) ∂ X T = X T b a T + X T a b T \frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}^{\mathrm{T}}}=\boldsymbol{X}^{\mathrm{T}}\boldsymbol{ba}^{\mathrm{T}}+\boldsymbol{X}^{\mathrm{T}}\boldsymbol{ab}^{\mathrm{T}} XTf(X)=XTbaT+XTabT

爱因斯坦求和约定示例
∂ f ( X ) ∂ x j i = ∂ a 1 p T x p q x q r T b r 1 ∂ x j i = ∂ a p 1 x p q x r q b r 1 ∂ x j i = a p 1 ∂ x p q ∂ x j i x r q b r 1 + a p 1 x p q ∂ x r q ∂ x j i b r 1 = ( a p 1 δ j p ) ( x r q δ i q ) b r 1 + a p 1 ( x r q δ i q ) ( b r 1 δ j r ) = a j 1 x r i b r 1 + a p 1 x p i b j 1 = x i r T b r 1 a 1 j T + x i p T a p 1 b 1 j T (3.5) \begin{aligned} \frac{\partial f\left( \boldsymbol{X} \right)}{\partial x_{ji}}&=\frac{\partial a_{1p}^{\mathrm{T}}x_{pq}x_{qr}^{\mathrm{T}}b_{r1}}{\partial x_{ji}}\\ &=\frac{\partial a_{p1}x_{pq}x_{rq}b_{r1}}{\partial x_{ji}}\\ &=a_{p1}\frac{\partial x_{pq}}{\partial x_{ji}}x_{rq}b_{r1}+a_{p1}x_{pq}\frac{\partial x_{rq}}{\partial x_{ji}}b_{r1}\\ &=\left( a_{p1}\delta _{jp} \right) \left( x_{rq}\delta _{iq} \right) b_{r1}+a_{p1}\left( x_{rq}\delta _{iq} \right) \left( b_{r1}\delta _{jr} \right)\\ &=a_{j1}x_{ri}b_{r1}+a_{p1}x_{pi}b_{j1}\\ &=x_{ir}^{\mathrm{T}}b_{r1}a_{1j}^{\mathrm{T}}+x_{ip}^{\mathrm{T}}a_{p1}b_{1j}^{\mathrm{T}}\\ \end{aligned}\tag{3.5} xjif(X)=xjia1pTxpqxqrTbr1=xjiap1xpqxrqbr1=ap1xjixpqxrqbr1+ap1xpqxjixrqbr1=(ap1δjp)(xrqδiq)br1+ap1(xrqδiq)(br1δjr)=aj1xribr1+ap1xpibj1=xirTbr1a1jT+xipTap1b1jT(3.5)
其实没啥区别,就是把求和号扔了,其余不变。

例题2
试求实标量函数 f ( X ) = ∣ X ∣ f\left( \boldsymbol{X} \right) =\left| \boldsymbol{X} \right| f(X)=X 的Jacobian。

证明
X ˉ \bar{\boldsymbol{X}} Xˉ X \boldsymbol{X} X 的伴随矩阵,由定义有 X ˉ X = ∣ X ∣ I \bar{\boldsymbol{X}}\boldsymbol{X}=\left| \boldsymbol{X} \right|\boldsymbol{I} XˉX=XI ,故 X ˉ X \bar{\boldsymbol{X}}\boldsymbol{X} XˉX 矩阵的 i i i i i i 列元素就是 ∣ X ∣ \left| \boldsymbol{X} \right| X ,得到 ∣ X ∣ = ∑ k x ˉ i k x k i \left| \boldsymbol{X} \right|=\sum_k{\bar{x}_{ik}x_{ki}} X=kxˉikxki ,从而有 [ ∂ ∣ X ∣ ∂ X T ] i j = ∂ ∣ X ∣ ∂ x j i = ∑ k ∂ x ˉ i k x k i ∂ x j i \left[ \frac{\partial \left| \boldsymbol{X} \right|}{\partial \boldsymbol{X}^{\mathrm{T}}} \right] _{ij}=\frac{\partial \left| \boldsymbol{X} \right|}{\partial x_{ji}}=\sum_k{\frac{\partial \bar{x}_{ik}x_{ki}}{\partial x_{ji}}} [XTX]ij=xjiX=kxjixˉikxki

注意到伴随矩阵的第 i i i j j j 列元素 x ˉ i j \bar{x}_{ij} xˉij 和原矩阵第 j j j i i i 列元素 x j i x_{ji} xji 无关,故对 x k i x_{ki} xki 求导时 x ˉ i k \bar{x}_{ik} xˉik 为常数,则有
[ ∂ ∣ X ∣ ∂ X T ] i j = ∂ ∣ X ∣ ∂ x j i = ∑ k ∂ x ˉ i k x k i ∂ x j i = ∑ k x ˉ i k δ j k = x ˉ i j (3.6) \begin{aligned} \left[ \frac{\partial \left| \boldsymbol{X} \right|}{\partial \boldsymbol{X}^{\mathrm{T}}} \right] _{ij}&=\frac{\partial \left| \boldsymbol{X} \right|}{\partial x_{ji}}=\sum_k{\frac{\partial \bar{x}_{ik}x_{ki}}{\partial x_{ji}}}\\ &=\sum_k{\bar{x}_{ik}\delta _{jk}}\\ &=\bar{x}_{ij}\\ \end{aligned}\tag{3.6} [XTX]ij=xjiX=kxjixˉikxki=kxˉikδjk=xˉij(3.6)
∂ ∣ X ∣ ∂ X T = X ˉ = X − 1 ∣ X ∣ \frac{\partial \left| \boldsymbol{X} \right|}{\partial \boldsymbol{X}^{\mathrm{T}}}=\bar{\boldsymbol{X}}=\boldsymbol{X}^{-1}\left| \boldsymbol{X} \right| XTX=Xˉ=X1X

矩阵微分

矩阵微分的性质

矩阵的微分相当于对每个元素都进行微分,具体而言 d X = [ d X i j ] \mathrm{d}\boldsymbol{X}=\left[ \mathrm{d}X_{ij} \right] dX=[dXij] 。矩阵的微分和高数的微分性质类似,比如有 d ( U V ) = ( d U ) V + U ( d V ) \mathrm{d}\left( \boldsymbol{UV} \right) =\left( \mathrm{d}\boldsymbol{U} \right) \boldsymbol{V}+\boldsymbol{U}\left( \mathrm{d}\boldsymbol{V} \right) d(UV)=(dU)V+U(dV) 成立。

因为矩阵的微分相当于一种按元素原位操作,因此与一元线性操作可交换顺序,例如 d ( X T ) = ( d X ) T \mathrm{d}\left( \boldsymbol{X}^{\mathrm{T}} \right) =\left( \mathrm{d}\boldsymbol{X} \right) ^{\mathrm{T}} d(XT)=(dX)T d ( t r ( X ) ) = t r ( d X ) \mathrm{d}\left( \mathrm{tr}\left( \boldsymbol{X} \right) \right) =\mathrm{tr}\left( \mathrm{d}\boldsymbol{X} \right) d(tr(X))=tr(dX) d ( v e c ( X ) ) = v e c ( d X ) \mathrm{d}\left( \mathrm{vec}\left( \boldsymbol{X} \right) \right) =\mathrm{vec}\left( \mathrm{d}\boldsymbol{X} \right) d(vec(X))=vec(dX)

当然,借助乘积法则,我们也可以推导逆矩阵的微分
⇒ O = d I = d ( X X − 1 ) = ( d X ) X − 1 + X ( d X − 1 ) ⇒ d X − 1 = − X − 1 ( d X ) X − 1 (4.1) \begin{array}{l} \phantom{\Rightarrow }\boldsymbol{O}=\mathrm{d}\boldsymbol{I}=\mathrm{d}\left( \boldsymbol{XX}^{-1} \right) =\left( \mathrm{d}\boldsymbol{X} \right) \boldsymbol{X}^{-1}+\boldsymbol{X}\left( \mathrm{d}\boldsymbol{X}^{-1} \right)\\ \Rightarrow \mathrm{d}\boldsymbol{X}^{-1}=-\boldsymbol{X}^{-1}\left( \mathrm{d}\boldsymbol{X} \right) \boldsymbol{X}^{-1}\\ \end{array}\tag{4.1} O=dI=d(XX1)=(dX)X1+X(dX1)dX1=X1(dX)X1(4.1)
同理,记 X ˉ \bar{\boldsymbol{X}} Xˉ X \boldsymbol{X} X 的伴随矩阵,由 ( 3.6 ) \left(3.6\right) (3.6) 结合Jacobian的全微分定义得 d ∣ X ∣ = t r ( X ˉ d X ) = ∣ X ∣ t r ( X − 1 d X ) \mathrm{d}\left| \boldsymbol{X} \right|=\mathrm{tr}\left( \boldsymbol{\bar{X}}\mathrm{d}\boldsymbol{X} \right) =\left| \boldsymbol{X} \right|\mathrm{tr}\left( \boldsymbol{X}^{-1}\mathrm{d}\boldsymbol{X} \right) dX=tr(XˉdX)=Xtr(X1dX)

利用微分求解标量函数的Jacobian

事实上,注意到 d f ( x ) = A d x = t r ( A d x ) \mathrm{d}f\left( \boldsymbol{x} \right) =\boldsymbol{A}\mathrm{d}\boldsymbol{x}=\mathrm{tr}\left( \boldsymbol{A}\mathrm{d}\boldsymbol{x} \right) df(x)=Adx=tr(Adx) d f ( X ) = t r ( A d X ) \mathrm{d}f\left( \boldsymbol{X} \right) =\mathrm{tr}\left( \boldsymbol{A}\mathrm{d}\boldsymbol{X} \right) df(X)=tr(AdX) ,其中 A \boldsymbol{A} A 为Jacobian、 A T \boldsymbol{A}^\mathrm{T} AT 为梯度。同时借助 t r \mathrm{tr} tr 的相似不变性,我们还可以给出一种利用微分求解Jacobian或梯度的方式:

先以一个经典的二次型函数为例,若 A \boldsymbol{A} A 是一个常方阵,试求 f ( x ) = x T A x f\left( \boldsymbol{x} \right) =\boldsymbol{x}^{\mathrm{T}}\boldsymbol{Ax} f(x)=xTAx 的梯度。
d f ( x ) = d ( t r ( x T A x ) ) = t r ( d x T A x ) + t r ( x T A d x ) = t r ( A x d x T ) T + t r ( x T A d x ) = t r ( x T ( A + A T ) d x ) (4.2) \begin{aligned} \mathrm{d}f\left( \boldsymbol{x} \right) &=\mathrm{d}\left( \mathrm{tr}\left( \boldsymbol{x}^{\mathrm{T}}\boldsymbol{Ax} \right) \right)\\ &=\mathrm{tr}\left( \mathrm{d}\boldsymbol{x}^{\mathrm{T}}\boldsymbol{Ax} \right) +\mathrm{tr}\left( \boldsymbol{x}^{\mathrm{T}}\boldsymbol{A}\mathrm{d}\boldsymbol{x} \right)\\ &=\mathrm{tr}\left( \boldsymbol{Ax}\mathrm{d}\boldsymbol{x}^{\mathrm{T}} \right) ^{\mathrm{T}}+\mathrm{tr}\left( \boldsymbol{x}^{\mathrm{T}}\boldsymbol{A}\mathrm{d}\boldsymbol{x} \right)\\ &=\mathrm{tr}\left( \boldsymbol{x}^{\mathrm{T}}\left( \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}} \right) \mathrm{d}\boldsymbol{x} \right)\\ \end{aligned}\tag{4.2} df(x)=d(tr(xTAx))=tr(dxTAx)+tr(xTAdx)=tr(AxdxT)T+tr(xTAdx)=tr(xT(A+AT)dx)(4.2)
因此,其Jacobian为 x T ( A + A T ) \boldsymbol{x}^{\mathrm{T}}\left( \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}} \right) xT(A+AT) ,梯度为 ( A + A T ) x \left( \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}} \right)\boldsymbol{x} (A+AT)x

这个证明中体现了 t r \mathrm{tr} tr 的重要性,其相似不变性通常会在证明过程中起到重要的作用。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值