矩阵分析与应用(二)——矩阵微分
文章目录
- 部分符号约定
- 一阶偏导: Jacobian 矩阵与梯度矩阵
- 偏导算子
- 标量函数的Jacobian 矩阵
- 矩阵函数的Jacobian
- 梯度矩阵
- 二阶偏导: Hessian 矩阵
- 实Hessian矩阵
- 全纯函数与共轭坐标
- 复Jacobian和共轭Jacobian
- 全Hessian
- 矩阵求导运算
- 矩阵微分
- 矩阵微分的性质
- 利用微分求解标量函数的Jacobian
部分符号约定
本文介绍矩阵分析的矩阵微分部分。
我们重述一遍本系列文章(一)里的符号约定:
- 一般而言,粗体大写字母(如 A\boldsymbol{A}A )代表矩阵,粗体小写字母(如 b\boldsymbol{b}b )代表列向量,粗体小写字母的转置(如 xT\boldsymbol{x}^\mathrm{T}xT )代表行向量
- 如 xT\boldsymbol{x}^\mathrm{T}xT 代表转置, x∗\boldsymbol{x}^*x∗ 代表共轭, xH\boldsymbol{x}^\mathrm{H}xH 代表共轭转置。 I\boldsymbol{I}I 代表单位矩阵, O\boldsymbol{O}O 代表零矩阵。
同时,我们为了方便起见,引入新的符号约定,其与上面第1条的精神内核是一致的。
- 实值矩阵函数沿用“非粗体代表标量,小写粗体代表列向量,大写粗体代表矩阵”的约定,具体如下
- f(x)f\left( \boldsymbol{x} \right)f(x) 为 Rm→R\mathbb{R} ^m\rightarrow \mathbb{R}Rm→R 的映射
- f(X)f\left( \boldsymbol{X} \right)f(X) 为 Rm×n→R\mathbb{R} ^{m\times n}\rightarrow \mathbb{R}Rm×n→R 的映射
- f(x)\boldsymbol{f}\left( \boldsymbol{x} \right)f(x) 为 Rm→Rp\mathbb{R} ^m\rightarrow \mathbb{R}^{p}Rm→Rp 的映射
- f(X)\boldsymbol{f}\left( \boldsymbol{X} \right)f(X) 为 Rm×n→Rp\mathbb{R} ^{m\times n}\rightarrow \mathbb{R}^{p}Rm×n→Rp 的映射
- F(x)\boldsymbol{F}\left( \boldsymbol{x} \right)F(x) 为 Rm→Rp×q\mathbb{R} ^m\rightarrow \mathbb{R}^{p\times q}Rm→Rp×q 的映射
- F(X)\boldsymbol{F}\left( \boldsymbol{X} \right)F(X) 为 Rm×n→Rp×q\mathbb{R} ^{m\times n}\rightarrow \mathbb{R}^{p\times q}Rm×n→Rp×q 的映射
- 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) ,其导数为 df(x)dx\frac{\mathrm{d}f\left( x \right)}{\mathrm{d}x}dxdf(x) 。导数反应了 fff 和 xxx 的一阶近似关系。那么对于多元函数而言,我们是否也能定义一个“导数”呢?事实上, Jacobian 就相当于多元函数的“一阶导数”,用于衡量一阶近似关系。
在高数重积分的多元函数的换元中,其伸缩因子为雅可比行列式,实际上就是本章要讲的 Jacobian 矩阵的行列式。为了以更简洁且直观的形式书写 Jacobian ,我们首先引入偏导算子。
偏导算子
首先我们引入偏导算子。如果 x\boldsymbol{x}x 是 mmm 行的列向量, X\boldsymbol{X}X 是 m×nm\times nm×n 的矩阵,则
{Dx=∂∂xT=[∂∂x1,⋯,∂∂xm](dim=1×m)DX=∂∂XT=[∂∂x11⋯∂∂xm1⋮⋱⋮∂∂x1n⋯∂∂xmn](dim=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∂=⎣⎡∂x11∂⋮∂x1n∂⋯⋱⋯∂xm1∂⋮∂xmn∂⎦⎤(dim=n×m)(1.1)
注意!求偏导后有个转置,所以原列向量变成了行向量,原 m×nm\times nm×n 的矩阵变成了 n×mn\times mn×m 。
注:为什么要转置呢?我们考虑 f(x1,⋯,xn)f\left( x_1,\cdots ,x_n \right)f(x1,⋯,xn) 全微分 df=[∂f∂x1,⋯,∂f∂xn][dx1⋮dxn]\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=[∂x1∂f,⋯,∂xn∂f]⎣⎡dx1⋮dxn⎦⎤ ,即 df=(∂f∂x)Tdx\mathrm{d}f=\left( \frac{\partial f}{\partial \boldsymbol{x}} \right) ^{\mathrm{T}}\mathrm{d}\boldsymbol{x}df=(∂x∂f)Tdx ,其中 (∂f∂x)T\left( \frac{\partial f}{\partial \boldsymbol{x}} \right) ^{\mathrm{T}}(∂x∂f)T 天然携带一个转置。
标量函数的Jacobian 矩阵
首先,我们先定义标量函数的Jacobian。
定义:若有 df(X)=tr(AdX)\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的定义要套一层 tr\mathrm{tr}tr ?
我的想法:若变元 X\boldsymbol{X}X 被替换为向量,那么外面有没有 tr\mathrm{tr}tr 都无所谓,反正都是标量。但如果作为矩阵,为了让 X\boldsymbol{X}X 保持优美的矩阵形式,不惨遭向量化,就得这么定义。而由于 tr\mathrm{tr}tr 的相似不变性,在证明中也会很好用。
从而不难注意到:标量函数 f(x)f\left( \boldsymbol{x} \right)f(x) 关于 x\boldsymbol{x}x 的Jacobian为
Dxf(x)=∂f(x)∂xT=[∂f(x)∂x1,⋯,∂f(x)∂xm](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)=∂xT∂f(x)=[∂x1∂f(x),⋯,∂xm∂f(x)](1.2)
其中 df(x)=Dxf(x)dx\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 。从“导数=微分商”的视角来看, df(x)=Dxf(x)dx⇒Dxf(x)=∂f(x)∂xT\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)dx⇒Dxf(x)=∂xT∂f(x) ,所以Jacobian又可以看作导数对多元函数的推广。
同理,定义 DXf(X)\mathrm{D}_{\boldsymbol{X}}f\left( \boldsymbol{X} \right)DXf(X) 为 f(X)f\left( \boldsymbol{X} \right)f(X) 的 Jacobian
DXf(X)=∂f(X)∂XT=[∂f(X)∂x11⋯∂f(X)∂xm1⋮⋱⋮∂f(X)∂x1n⋯∂f(X)∂xmn](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)=∂XT∂f(X)=⎣⎡∂x11∂f(X)⋮∂x1n∂f(X)⋯⋱⋯∂xm1∂f(X)⋮∂xmn∂f(X)⎦⎤(1.3)
从而 f(X)f\left( \boldsymbol{X} \right)f(X) 的全微分可以被写为 df(X)=tr(DXf(X)dX)\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处理。此时即为 DvecXf(X)=∂f(X)∂vecX\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)=∂vecX∂f(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) 为 Rm×n→Rp×q\mathbb{R} ^{m\times n}\rightarrow \mathbb{R} ^{p\times q}Rm×n→Rp×q ,则其Jacobian为
DXF(X)=∂vec(F(X))∂(vecX)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)T∂vec(F(X))(1.4)
其中 DXF(X)∈Rpq×mn\mathrm{D}_{\boldsymbol{X}}\boldsymbol{F}\left( \boldsymbol{X} \right) \in \mathbb{R} ^{pq\times mn}DXF(X)∈Rpq×mn ,这样有 vec(dF)=∂vec(F(X))∂(vecX)Tvec(dX)\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)T∂vec(F(X))vec(dX) 。
注:为什么矩阵函数的Jacobian要用这么绕的定义方式呢?留作习题供读者思考。(可参考:张贤达《矩阵分析与应用》(第二版)第145页)
梯度矩阵
在高数中,我们可能更熟悉梯度,本质上梯度和Jacobian描述的是一个东西,只是差了个转置。
定义梯度算子 ∇x=[∂∂x1,⋯,∂∂xm]T=(Dx)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 相当于一个专用的矩阵,专门用于和 dx\mathrm{d}\boldsymbol{x}dx 乘,所以就转置了。而梯度很可能会参与后续操作,我们期望被操作的向量尽可能是以行向量的形式存在的,所以不转置。
同理,关于矩阵的梯度算子也有两种,分别是 ∇vecX=(DvecX)T\nabla _{\mathrm{vec}\boldsymbol{X}}=\left( \mathrm{D}_{\mathrm{vec}\boldsymbol{X}} \right) ^{\mathrm{T}}∇vecX=(DvecX)T 和 ∇X=(DX)T\nabla _{\boldsymbol{X}}=\left( \mathrm{D}_{\boldsymbol{X}} \right) ^{\mathrm{T}}∇X=(DX)T 。
与 Jacobian 类似的,我们也可以给出梯度矩阵,它们均为 Jacobian 的转置,此处不予赘述。
我们称梯度的负方向 −∇xf(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 ,其被定义为 ∂2f(x)∂x∂xT=∂∂xT(∂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)∂x∂xT∂2f(x)=∂xT∂(∂x∂f(x)) ,当然我们也可记作 ∇x2f(x)=Dx(∇xf(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 被定义为 ∂2f(X)∂X∂XT=∂∂XT(∂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)∂X∂XT∂2f(X)=∂XT∂(∂X∂f(X)) ,同理可记作 ∇X2f(X)=DX(∇Xf(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的关系是:若 d2f(x)=(dx)TBdx\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)]=12(B+BT)\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)]=12(B+BT)\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∗zf\left( z \right) =\left| z \right|^2=z^*zf(z)=∣z∣2=z∗z 就不是全纯的。
为了将它们变成全纯的,我们不再使用 r=(x,y)Tr=\left(x,y\right)^{\mathrm{T}}r=(x,y)T 坐标,而是使用共轭坐标 c=(z,z∗)Tc=\left(z,z^*\right)^{\mathrm{T}}c=(z,z∗)T 表示。在处理一个量 zzz 时,将其共轭量 z∗z^*z∗ 当作常数,此时函数就是全纯的了。具体而言,将 f(z)f\left( z \right)f(z) 看成 fˉ(z,z∗)=z∗z\bar{f}\left( z,z^* \right) =z^*zfˉ(z,z∗)=z∗z ,在处理 zzz 时将 z∗z^*z∗ 看作常数。即此时这相当于一个正比例函数,自然是全纯的。
这样我们就可以定义关于 zzz 或 z∗z^*z∗ 的形式偏导了,具体而言
{∂∂z=12(∂∂x−j∂∂y)∂∂z∗=12(∂∂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(∂x∂−j∂y∂)∂z∗∂=21(∂x∂+j∂y∂)(2.1)
此时如果 xxx 和 yyy 独立,那么 zzz 和 z∗z^*z∗ 也应独立,即 ∂z∂z∗=0,∂z∗∂z=0\frac{\partial z}{\partial z^*}=0,\frac{\partial z^*}{\partial z}=0∂z∗∂z=0,∂z∂z∗=0 。
复Jacobian和共轭Jacobian
前面说了,使用共轭坐标时,对一个求偏导,其共轭量为常数。因此
{DZf(Z,Z∗)=∂f(Z,Z∗)∂ZT∣Z∗为常数矩阵DZ∗f(Z,Z∗)=∂f(Z,Z∗)∂ZH∣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∗)=∂ZT∂f(Z,Z∗)∣∣Z∗为常数矩阵DZ∗f(Z,Z∗)=∂ZH∂f(Z,Z∗)∣∣Z为常数矩阵(2.2)
不难得到全微分形式为
df=DvecZfdvecZ+DvecZ∗fdvecZ∗=tr(DZfdZ+DZ∗fdZ∗)(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+DvecZ∗fdvecZ∗=tr(DZfdZ+DZ∗fdZ∗)(2.3)
因此,若有 df=tr(AdZ+BdZ∗)\mathrm{d}f=\mathrm{tr}\left( \boldsymbol{A}\mathrm{d}\boldsymbol{Z}+\boldsymbol{B}\mathrm{d}\boldsymbol{Z}^* \right)df=tr(AdZ+BdZ∗) ,则将 A=DZfdZ\boldsymbol{A}=\mathrm{D}_{\boldsymbol{Z}}f\mathrm{d}\boldsymbol{Z}A=DZfdZ 称为其Jacobian, B=DZ∗fdZ∗\boldsymbol{B}=\mathrm{D}_{\boldsymbol{Z^*}}f\mathrm{d}\boldsymbol{Z}^*B=DZ∗fdZ∗ 称为共轭Jacobian。显然这一结论与实数的形式兼容,可以视为实Jacobian向复数的推广。
全Hessian
再进行一次微分有
d2f=[dvecZdvecZ∗]H[∂2f∂vecZ∗∂(vecZ)T∂2f∂vecZ∗∂(vecZ∗)T∂2f∂vecZ∂(vecZ)T∂2f∂vecZ∂(vecZ∗)T][dvecZdvecZ∗](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)T∂2f∂vecZ∂(vecZ)T∂2f∂vecZ∗∂(vecZ∗)T∂2f∂vecZ∂(vecZ∗)T∂2f⎦⎤[dvecZdvecZ∗](2.4)
其中 H\boldsymbol{H}H 称为 f(Z,Z∗)f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right)f(Z,Z∗) 的全Hessian矩阵, HZ∗,Z\boldsymbol{H}_{\boldsymbol{Z}^*,\boldsymbol{Z}}HZ∗,Z 称为 f(Z,Z∗)f\left( \boldsymbol{Z},\boldsymbol{Z}^* \right)f(Z,Z∗) 的主Hessian矩阵.
H=[HZ∗,ZHZ∗,Z∗HZ,ZHZ,Z∗]=[∂2f∂vecZ∗∂(vecZ)T∂2f∂vecZ∗∂(vecZ∗)T∂2f∂vecZ∂(vecZ)T∂2f∂vecZ∂(vecZ∗)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∗,Z∗HZ,Z∗]=⎣⎡∂vecZ∗∂(vecZ)T∂2f∂vecZ∂(vecZ)T∂2f∂vecZ∗∂(vecZ∗)T∂2f∂vecZ∂(vecZ∗)T∂2f⎦⎤(2.5)
矩阵求导运算
矩阵求导公式基本类似普通实函数,例如乘法法则、除法法则、链式法则。
但在这里,我推荐一种更好的做法,就是找代表元得到通项公式,再合成为矩阵。具体可以参考下面两篇文章
- 大佬的原始文章:让向量、矩阵和张量的求导更简洁些吧
- 我的总结版本及在卷积神经网络的应用:【配套文章】神经网络全连接层、激活函数层、卷积层、池化层的正/反向传播公式推导+代码
矩阵推导过程中会用到的其中一个重要的性质就是变量的独立性假设,即假设矩阵或向量的每个变元 xi,xjx_i,x_jxi,xj 是独立的,具体而言
∂xi∂xj=δij={1,i=j0,else(3.1)\frac{\partial x_i}{\partial x_j}=\delta _{ij}=\begin{cases} 1,& i=j\\ 0,& \mathrm{else}\\ \end{cases}\tag{3.1} ∂xj∂xi=δij={1,0,i=jelse(3.1)
∂xkl∂xij=δikδjl={1,i=k∩j=l0,else(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} ∂xij∂xkl=δikδjl={1,0,i=k∩j=lelse(3.2)
其中 δij\delta_{ij}δij 又被称为Kronecker置换符号,有着下标置换的功能。具体而言 ∑jxijδjk=xik\sum_{j}{x_{ij}\delta_{jk}}=x_{ik}∑jxijδjk=xik ,直观地看相当于将 xijx_{ij}xij 的下标 jjj 置换为了 kkk 。
同时,我们还注意到矩阵乘法 C=AB\boldsymbol{C}=\boldsymbol{AB}C=AB 可以写为 cij=∑kaikbkjc_{ij}=\sum_k{a_{ik}b_{kj}}cij=∑kaikbkj 的形式。因为求和范围是对全部指标进行,所以不需要写求和上下标。同理, D=ABC\boldsymbol{D}=\boldsymbol{ABC}D=ABC 可以写为 dij=∑k,laikbklcljd_{ij}=\sum_{k,l}{a_{ik}b_{kl}c_{lj}}dij=∑k,laikbklclj 的形式,这样可以让我们的推导更加简洁。
当然还有一种更加简洁的形式,甚至可以让我们连求和号都扔掉,这种方法叫做爱因斯坦求和约定。不过为了照顾作为初学者的读者,本文就不将难度放得这么高了,还是附上带上求和符号的证明。
例题1:
试求实标量函数 f(X)=aTXXTbf\left( \boldsymbol{X} \right) =\boldsymbol{a}^{\mathrm{T}}\boldsymbol{XX}^{\mathrm{T}}\boldsymbol{b}f(X)=aTXXTb 的Jacobian。证明:
由定义:
aTXXTb=∑k,l,makxkmxlmbl(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,m∑akxkmxlmbl(3.3)
设其Jacobian第 iii 行 jjj 列元素为 [∂f(X)∂XT]ij\left[ \frac{\partial f\left( \boldsymbol{X} \right)}{\partial \boldsymbol{X}^{\mathrm{T}}} \right] _{ij}[∂XT∂f(X)]ij ,则
[∂f(X)∂XT]ij=∂f(X)∂xji=∑p,q,r∂a1pTxpqxqrTbr1∂xji=∑p,q,r∂ap1xpqxrqbr1∂xji=∑p,q,rap1∂xpq∂xjixrqbr1+∑p,q,rap1xpq∂xrq∂xjibr1=∑p,q,r(ap1δjp)(xrqδiq)br1+∑p,q,rap1(xrqδiq)(br1δjr)=∑raj1xribr1+∑rap1xpibj1=∑rxirTbr1a1jT+∑rxipTap1b1jT(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} [∂XT∂f(X)]ij=∂xji∂f(X)=p,q,r∑∂xji∂a1pTxpqxqrTbr1=p,q,r∑∂xji∂ap1xpqxrqbr1=p,q,r∑ap1∂xji∂xpqxrqbr1+p,q,r∑ap1xpq∂xji∂xrqbr1=p,q,r∑(ap1δjp)(xrqδiq)br1+p,q,r∑ap1(xrqδiq)(br1δjr)=r∑aj1xribr1+r∑ap1xpibj1=r∑xirTbr1a1jT+r∑xipTap1b1jT(3.4)
故 ∂f(X)∂XT=XTbaT+XTabT\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}}∂XT∂f(X)=XTbaT+XTabT 。爱因斯坦求和约定示例:
∂f(X)∂xji=∂a1pTxpqxqrTbr1∂xji=∂ap1xpqxrqbr1∂xji=ap1∂xpq∂xjixrqbr1+ap1xpq∂xrq∂xjibr1=(ap1δjp)(xrqδiq)br1+ap1(xrqδiq)(br1δjr)=aj1xribr1+ap1xpibj1=xirTbr1a1jT+xipTap1b1jT(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} ∂xji∂f(X)=∂xji∂a1pTxpqxqrTbr1=∂xji∂ap1xpqxrqbr1=ap1∂xji∂xpqxrqbr1+ap1xpq∂xji∂xrqbr1=(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=∣X∣I ,故 XˉX\bar{\boldsymbol{X}}\boldsymbol{X}XˉX 矩阵的 iii 行 iii 列元素就是 ∣X∣\left| \boldsymbol{X} \right|∣X∣ ,得到 ∣X∣=∑kxˉikxki\left| \boldsymbol{X} \right|=\sum_k{\bar{x}_{ik}x_{ki}}∣X∣=∑kxˉikxki ,从而有 [∂∣X∣∂XT]ij=∂∣X∣∂xji=∑k∂xˉikxki∂xji\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}}}[∂XT∂∣X∣]ij=∂xji∂∣X∣=∑k∂xji∂xˉikxki 。注意到伴随矩阵的第 iii 行 jjj 列元素 xˉij\bar{x}_{ij}xˉij 和原矩阵第 jjj 行 iii 列元素 xjix_{ji}xji 无关,故对 xkix_{ki}xki 求导时 xˉik\bar{x}_{ik}xˉik 为常数,则有
[∂∣X∣∂XT]ij=∂∣X∣∂xji=∑k∂xˉikxki∂xji=∑kxˉikδjk=xˉij(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} [∂XT∂∣X∣]ij=∂xji∂∣X∣=k∑∂xji∂xˉikxki=k∑xˉikδjk=xˉij(3.6)
故 ∂∣X∣∂XT=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|∂XT∂∣X∣=Xˉ=X−1∣X∣ 。
矩阵微分
矩阵微分的性质
矩阵的微分相当于对每个元素都进行微分,具体而言 dX=[dXij]\mathrm{d}\boldsymbol{X}=\left[ \mathrm{d}X_{ij} \right]dX=[dXij] 。矩阵的微分和高数的微分性质类似,比如有 d(UV)=(dU)V+U(dV)\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(XT)=(dX)T\mathrm{d}\left( \boldsymbol{X}^{\mathrm{T}} \right) =\left( \mathrm{d}\boldsymbol{X} \right) ^{\mathrm{T}}d(XT)=(dX)T 、 d(tr(X))=tr(dX)\mathrm{d}\left( \mathrm{tr}\left( \boldsymbol{X} \right) \right) =\mathrm{tr}\left( \mathrm{d}\boldsymbol{X} \right)d(tr(X))=tr(dX) 、d(vec(X))=vec(dX)\mathrm{d}\left( \mathrm{vec}\left( \boldsymbol{X} \right) \right) =\mathrm{vec}\left( \mathrm{d}\boldsymbol{X} \right)d(vec(X))=vec(dX) 。
当然,借助乘积法则,我们也可以推导逆矩阵的微分
⇒O=dI=d(XX−1)=(dX)X−1+X(dX−1)⇒dX−1=−X−1(dX)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(XX−1)=(dX)X−1+X(dX−1)⇒dX−1=−X−1(dX)X−1(4.1)
同理,记 Xˉ\bar{\boldsymbol{X}}Xˉ 是 X\boldsymbol{X}X 的伴随矩阵,由 (3.6)\left(3.6\right)(3.6) 结合Jacobian的全微分定义得 d∣X∣=tr(XˉdX)=∣X∣tr(X−1dX)\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)d∣X∣=tr(XˉdX)=∣X∣tr(X−1dX) 。
利用微分求解标量函数的Jacobian
事实上,注意到 df(x)=Adx=tr(Adx)\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) 、 df(X)=tr(AdX)\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、 AT\boldsymbol{A}^\mathrm{T}AT 为梯度。同时借助 tr\mathrm{tr}tr 的相似不变性,我们还可以给出一种利用微分求解Jacobian或梯度的方式:
先以一个经典的二次型函数为例,若 A\boldsymbol{A}A 是一个常方阵,试求 f(x)=xTAxf\left( \boldsymbol{x} \right) =\boldsymbol{x}^{\mathrm{T}}\boldsymbol{Ax}f(x)=xTAx 的梯度。
df(x)=d(tr(xTAx))=tr(dxTAx)+tr(xTAdx)=tr(AxdxT)T+tr(xTAdx)=tr(xT(A+AT)dx)(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为 xT(A+AT)\boldsymbol{x}^{\mathrm{T}}\left( \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}} \right)xT(A+AT) ,梯度为 (A+AT)x\left( \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}} \right)\boldsymbol{x}(A+AT)x 。
这个证明中体现了 tr\mathrm{tr}tr 的重要性,其相似不变性通常会在证明过程中起到重要的作用。
矩阵分析与应用(二)——矩阵微分相关推荐
- [计算数学基础]矩阵微分
矩阵微分 函数对于变量的微分在高等数学里面讲的比较多,而矩阵微分在我印象中没有在高等代数中讲解.矩阵微分也是很常用的一个数学工具,我最早是在一门研究生课程"优化设计"中接触到,优化 ...
- 最小二乘法矩阵微分偏导法证明
最小二乘法矩阵微分偏导法证明 向量范数回顾 向量1范数 向量1范数即是向量元素的绝对值.定义见: . 向量2范数 向量2范数即是向量里每个元素的平 ...
- 矩阵论思维导图_矩阵求导与矩阵微分
矩阵求导与矩阵微分 符号定义 使用大写的粗体字母表示矩阵 使用小写的粗体字母表示向量 ,这里默认为列向量 使用小写的正体字母表示标量 需要明白的是,矩阵求导的意义在哪来,我们回想一下函数求 ...
- 深度学习数学基础——矩阵微分篇
https://www.toutiao.com/a6641771475994952206/ 2019-01-02 13:45:27 深度学习是一个令人兴奋的领域,具有巨大的现实世界影响力. 本文是Te ...
- 线性代数之 矩阵求导(4)矩阵微分,迹与求导
线性代数之 矩阵求导(4)迹与矩阵求导 前言 矩阵微分定义 矩阵微分计算法则 常矩阵 线性 乘积 转置 迹 通过矩阵微分进行求导 常用的矩阵微分 后记 前言 本次将记录如何进行矩阵求导(标量对矩阵). ...
- 二元函数对xy同时求导_矩阵求导与矩阵微分
矩阵求导与矩阵微分 符号定义 使用大写的粗体字母表示矩阵 使用小写的粗体字母表示向量 ,这里默认为列向量 使用小写的正体字母表示标量 需要明白的是,矩阵求导的意义在哪来,我们回想一下函数求 ...
- 矩阵论(八):矩阵微分与矩阵求导
矩阵论专栏:专栏(文章按照顺序排序) 做机器学习的几乎避免不了矩阵求导,尤其是神经网络方面的,反向传播算法说白了就是在做矩阵求导,拿到代价函数对模型中每个参数矩阵的导数,才能找到一个下降方向,进而更新 ...
- 说文解字----矩阵分析(一)矩阵中的空间与秩
,近期学习了矩阵分析,在接下来的几篇文章中将进行总结.由于理解能力有限,我将更倾向于对矩阵的直观理解.水平有限,诸多错误恳请大家批评 一.空间和子空间(space & subspace) 首先 ...
- MATLAB学习笔记(二) -- 矩阵和数组
一.矩阵和数组的创建 函数法主要用于一些具有特许规律的矩阵. (1)zeros() -- 全零矩阵生成,ones() -- 全1矩阵 (2)eye() -- 单位矩阵,不支持二维以上的矩阵生成 (3) ...
最新文章
- python官网下载哪个版本-python下载哪个版本好
- [CTSC2017]吉夫特
- 机器学习实战读书笔记(1)
- JVM-10虚拟机性能监控与故障处理工具之【JDK的命令行】
- 职业相关职位及职位能力要求知识点大纲范围
- jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换
- Gradle多项目构建–类似父pom的结构
- 四元素、欧拉角及旋转矩阵之间的转换
- FusionInsight怎么帮「宇宙行」建一个好的「云数据平台」?
- ln命令:软链接建立与删除
- Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
- 直接内存回收中的等待队列
- 深度报文检测 linux,DPI-深度报文检测(进阶)
- Java Excel导出(包含图片) —— Easypoi
- 如何写出高分IB TOK Essay?
- Android Studio插件GsonFormat快速实现JavaBean
- ssh+Google双重认证
- 此图形驱动程序无法找到兼容的图形硬件的解决方案(复制粘贴源于百度http://jingyan.baidu.com/article...
- 电磁场与仿真软件(24)
- 员工管理系统之添加修改删除操作
热门文章
- Android项目的targetSDK=23,在低于Android6.0的部分测试机(类似华为)上运行时出现的系统权限问题...
- 排列奇偶性与排序的关系
- 可以打开c语言的软件图标是个虫子,VC雕虫小技集(四) (转)
- python调用高德api_python 高德api接口
- Android开发者上手宝典(三)
- select * from a,b用法
- excel应用之合并单元格保留内容和替换软回车
- 利用阿里云如何开发一款直播app?
- spring mcv 拦截器
- 苹果电脑运行3dsmax的三种方法,你知道吗?