作者: 引线小白-本文永久链接:httpss://www.limoncc.com/post/ab2342877c86f7c1/
知识共享许可协议: 本博客采用署名-非商业-禁止演绎4.0国际许可证
摘要: 本文意在理清向量和矩阵微分的基础问题。若有错误,请大家指正。
关键词:矩阵微分
,向量微分
,RNN
一、引言
打算写个“RNN的复兴”的系列文章,草稿已经写的差不多。回顾一下发现,如果对向量和矩阵微分不熟悉,将很难理解现代RNN的本质。故在系列开始前单独讲讲矩阵微分,以规避一些可能存在的无聊吵架。
数学上一切都不理解,很大程度上是对符号的不清晰、不清楚、不理解造成的。究其根本是结合数学概念的符号练习太少了。或者说数学符号体操练习的不够。
首先会从向量微分讲起,然后过渡到矩阵微分。再最后证明一推常用矩阵微分公式。
二、向量函数的微分与导数
只有将求导与微分联系起来,才能明白为何如此定义与运算的原因:所谓导数实质是线性变换 $\displaystyle \mathcal{L}\big(\mathbb{R}^m,\mathbb{R}^n\big)$。微分实际是线性变换作用于微元的结果。
1.1、向量微分
若有 $\displaystyle E$是 $\displaystyle \mathbb{R}^m$中的开集,有多元函数 $\displaystyle \bm{f}: E\mapsto \mathbb{R}^n$, $\displaystyle \bm{x}\in E$。如果存在线性变换 $\displaystyle \bm{A}\in \mathcal{L}\big(\mathbb{R}^m,\mathbb{R}^n\big)$使得:
$$\begin{align}
\lim_{\Delta \bm{x}\to \bm{0}}\frac{\left|\bm{f}(\bm{x}+\Delta\bm{x})-\bm{f}(\bm{x})-\bm{A}(\bm{x})\Delta \bm{x}\right|}{\left|\bm{\Delta\bm{x}}\right|}=0
\end{align}$$
成立。也就是说 $\displaystyle \bm{f}(\bm{x}+\Delta\bm{x})-\bm{f}(\bm{x})
=\bm{A}(\bm{x})\Delta \bm{x}+\bm{r}(\Delta \bm{x})$,其中 $\displaystyle \lim_{\Delta \bm{x}\to \bm{0}}\frac{\left|\bm{r}(\Delta \bm{x})\right|}{\left|\bm{\Delta\bm{x}}\right|}=0$,那么我们就说 $\displaystyle \bm{f}$ 在 $\displaystyle \bm{x}$ 处可微,记为 $\displaystyle \dot{\bm{f}}(\bm{x})=\frac{\partial{\bm{f}(\bm{x})}}{\partial{\bm{x}^\T}}=\bm{A}$,称为全导数。如果 $\displaystyle \bm{f}$在每个 $\displaystyle \bm{x}\in E$可微,就说 $\displaystyle \bm{f}$ 在 $\displaystyle E$内可微。
令 $\displaystyle \bm{y}_{n}=\bm{f}\big(\bm{x}_m\big)$更明显地写为:
$$\begin{align}
\mathrm{d}\bm{f}=\frac{\partial\bm{f}}{\partial\bm{x}^\T}\mathrm{d}\bm{x}=\bm{A}\mathrm{d}\bm{x}
\end{align}$$
写的更具体点
$$\begin{align}
\begin{bmatrix} \mathrm{d}y_1\\
\vdots\\
\mathrm{d}y_n
\end{bmatrix}
=\begin{bmatrix}
\displaystyle\frac{\partial y_1}{\partial \bm{x}^\T}\\
\vdots\\
\displaystyle\frac{\partial y_2}{\partial \bm{x}^\T}
\end{bmatrix}
\begin{bmatrix} \mathrm{d}x_1\\
\vdots\\
\mathrm{d}x_m
\end{bmatrix}
=\begin{bmatrix}
\displaystyle\frac{\partial y_1}{\partial x_1}& \cdots &\displaystyle\frac{\partial y_1}{\partial x_m}\\
\vdots&\ddots& \vdots\\
\displaystyle\frac{\partial y_n}{\partial x_1}&\cdots &\displaystyle\frac{\partial y_n}{\partial x_m}
\end{bmatrix}
\begin{bmatrix}
\mathrm{d}x_1\\
\vdots\\
\mathrm{d}x_m
\end{bmatrix}
\end{align}$$
特别的,对于标量定义 $\displaystyle y=f \big(\bm{x}_{m\times 1}\big)$是可微函数,微分 $\displaystyle \mathrm{d}f$定义为:
$$\begin{align}
\mathrm{d}f=\sum_{i=1}^m\frac{\partial f}{\partial x_i}\mathrm{d}x_i=\frac{\partial f}{\partial \bm{x}^\T}\mathrm{d}\bm{x}
\end{align}$$
1.2、向量导数
有了微分之后就很容易定义导数了,现在面临的问题是布局,一般的使用分子布局,即结果和分子在同维度一致。
1.2.1、向量函数对标量导数
1、列向量函数对标量的导数
$$\begin{align}
\left[\frac{\mathrm{d}\bm{f}(x)}{\mathrm{d} x}\right]_{i\times 1}=\frac{\mathrm{d}{f_i}}{\mathrm{d}{x}}
\end{align}$$
2、行向量函数对标量的导数
$$\begin{align}
\left[\frac{\mathrm{d}{\bm{f}^\T(x)}}{\mathrm{d}{x}}\right]_{1\times i}=\frac{\mathrm{d}{f_i}}{\mathrm{d}{x}}
\end{align}$$
1.2.2、数量函数对向量导数
1、数量函数对列向量的导数定义,结果是个列向量。
$$\begin{align}
\big[\nabla f\big]_{i\times 1}=\left[\frac{\partial{f(\bm{x})}}{\partial{\bm{x}}}\right]_{i\times 1}=\frac{\partial{f(\bm{x})}}{\partial{x_i}}
\end{align}$$
2、数量函数对行向量的导数定义,结果是个行向量。
$$\begin{align}
\left[\frac{\partial{f(\bm{x})}}{\partial{\bm{x}^\T}}\right]_{1\times j}=\frac{\partial{f(\bm{x})}}{\partial{x_j}}
\end{align}$$
1.2.3、向量函数对向量导数
1、列向量函数对行向量的导数定义,即雅可比行列式
$$\begin{align}
\bm{J}=\left[\frac{\partial{\bm{f}(\bm{x})}}{\partial{\bm{x}^\T}}\right]_{i\times j}=\frac{\partial{f_i}}{\partial{x_j}}
\end{align}$$
2、行向量函数对列向量的导数定义
$$\begin{align}
\left[\frac{\partial{\bm{f}^\T(\bm{x})}}{\partial{\bm{x}}}\right]_{i\times j}=\frac{\partial{f_j}}{\partial{x_i}}
\end{align}$$
1.3、链式法则
对于$\displaystyle \bm{y}=\bm{f}(\bm{g}(\bm{x}))$, 其中 $\displaystyle \bm{f}:\mathbb{R}^s\mapsto \mathbb{R}^m$, $\displaystyle \bm{g}:\mathbb{R}^n\mapsto \mathbb{R}^s$, 一个简单例子是 $\displaystyle \bm{y}_{m\times 1}=\bm{A}_{m\times s}\bm{B}_{s\times n}\bm{x}_{n\times 1}$,具体点有:$\displaystyle \bm{y}_{2\times 1}=\bm{A}_{2\times 3}\bm{B}_{3\times 5}\bm{x}_{5\times 1}$,或 $\displaystyle y_{1\times 1}=\bm{A}_{1\times 3}\bm{B}_{3\times 5}\bm{x}_{5\times 1}$,不难证明有如下链式法则
$$\begin{align}
\frac{\partial \bm{y}}{\partial \bm{x}^\T}=\frac{\partial \bm{f}}{\partial \bm{g}^\T}\frac{\partial \bm{g}}{\partial \bm{x}^\T}
\quad\text{or}\quad
\frac{\partial \bm{y}^\T}{\partial \bm{x}}=\frac{\partial \bm{g}^\T}{\partial \bm{x}}\frac{\partial \bm{f}^\T}{\partial \bm{g}}
\end{align}$$
特别对于标量有:
$$\begin{align}
\frac{\partial y}{\partial \bm{x}^\T}=\frac{\partial f}{\partial \bm{g}^\T}\frac{\partial \bm{g}}{\partial \bm{x}^\T}
\quad\text{or}\quad
\frac{\partial y}{\partial \bm{x}}=\frac{\partial \bm{g}^\T}{\partial \bm{x}}\frac{\partial f}{\partial \bm{g}}
\end{align}$$
为什么要写两种链式法则,在计算机领域使用默认向量是行向量会方便很多,而在数学上,通常使用列向量。说的跟明白一点:将梯度定义为行向量,链式法则将会保持一致和简单性,即由外向内,从左到右书写,反之亦然。
1.4、反向传播
现在来看看神经网络的自动微分为啥要用反向传播,我们先定义点符号,以方便表示:
1、$\displaystyle \ell:$ 损失函数
2、$\displaystyle \bm{x}\to\bm{z}_1\to\bm{z}_2\to\bm{y}\to\ell$: 一个三层神经网络= 输入层 $\bm{x}$+ 隐藏层 $\bm{z}_1$ +隐藏层 $\bm{z}_2$+ 输出层 $\bm{y}$
后向求导是这样的:
$$\begin{align}
\frac{d\ell}{d\bm{x}^\T}
=\frac{d\ell}{d\bm{y}^\T}
\cdot\frac{d\bm{y}}{d\bm{z}_2^\T}
\cdot\frac{d\bm{z}_2}{d\bm{z}_1^\T}
\cdot\frac{d\bm{z}_1}{d\bm{x}^\T}
\end{align}$$
前向求导是这样的:
$$\begin{align}
\frac{d\ell}{d\bm{x}}
=\frac{d\bm{z}_1^\T}{d\bm{x}}\cdot
\frac{d\bm{z}_2^\T}{d\bm{z}_1}\cdot
\frac{d\bm{y}^\T}{d\bm{z}_2}\cdot
\frac{d\ell}{d\bm{y}}
\end{align}$$
若有维度 $\displaystyle \bm{x}_{10\times 1}\to\bm{z}\small{1}_{6\times 1}\to\bm{z}\small{2}_{8\times 1}\to\bm{y}_{2\times 1}\to\ell_{1\times 1}$
后向求导的成本
$$\begin{align}
&\bigg[\frac{d\ell}{d\bm{x}^\T}\bigg]_{1\times 10}
=\bigg[\frac{d\ell}{d\bm{y}^\T}\bigg]_{1\times 2}
\cdot\bigg[\frac{d\bm{y}}{d\bm{z}_2^\T}\bigg]_{2\times 8}
\cdot\bigg[\frac{d\bm{z}_2}{d\bm{z}_1^\T}\bigg]_{8\times 6}
\cdot\bigg[\frac{d\bm{z}_1}{d\bm{x}^\T}\bigg]_{6\times 10}\\
\to
&\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}^\T}\bigg)=1\times 2 \times 8+1\times 8\times 6+1\times 6\times 10 = 124
\end{align}$$
前向求导的成本
$$\begin{align}
&\bigg[\frac{d\ell}{d\bm{x}}\bigg]_{10\times 1}
=\bigg[\frac{d\bm{z}_1^\T}{d\bm{x}}\bigg]_{10\times 6}
\cdot\bigg[\frac{d\bm{z}_2^\T}{d\bm{z}_1}\bigg]_{6\times 8}
\cdot\bigg[\frac{d\bm{y}^\T}{d\bm{z}_2}\bigg]_{8\times 2}
\cdot\bigg[\frac{d\ell}{d\bm{y}}\bigg]_{2\times 1}\\
\to
&\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}}\bigg)=10\times 6 \times 8+10\times 8\times 2+10\times 2\times 1 = 660
\end{align}$$
实际上有
$$\begin{align}
\forall \dim[\bm{\ell}]\leqslant dim[\bm{x}]\to\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}^\T}\bigg)
\leqslant
\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}}\bigg)\\
\forall \dim[\bm{\ell}]> dim[\bm{x}]\to\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}^\T}\bigg)>\mathop{cal_cost}\bigg(\frac{d\ell}{d\bm{x}}\bigg)
\end{align}$$
1.5、VJP和JVP
在讨论了反向传播的计算后,来总结一下前向模式 (JVP:Jacobian-Vector Product)和反向模式 (VJP:Vector-Jacobian Product),这里主要是为熟悉一下数学符号,没有概念和计算上的难度。首先熟悉一下符号:
话接上节,特别的如果不将 $\displaystyle \ell$视为标量的损失函数,而是一个可以优化的向量目标 $\displaystyle \bm{\ell}$。同时我们特别的定义第 $i$层雅可比矩阵 $\displaystyle \bm{J}_i =\frac{d\bm{z}_i}{d\bm{z}_{i-1}^\T}$。
那么有前向计算公式
$$\begin{align}
\frac{d\bm{\ell}^\T}{d\bm{x}} =\prod_{i=1}^{n} \bm{J}_i ^\T
=\bm{J}_1 ^\T\cdot\bm{J}_2 ^\T\cdots\bm{J}_{n-1} ^\T\cdot\bm{J}_n ^\T
\end{align}$$
后向计算公式
$$\begin{align}
\frac{d\bm{\ell}}{d\bm{x}^\T} =\prod_{i=0}^{n-1} \bm{J}_{n-i}
=\bm{J}_{n}\cdot\bm{J}_{n-1}\cdots\bm{J}_{2}\cdot\bm{J}_{1}
\end{align}$$
对与神经网络而言,损失函数一般是标量,所以最后一层导数是 $\displaystyle \bm{v}_{output}:=\displaystyle \bm{J}_n=\frac{d\ell}{d\bm{y}}$
对于标量损失函数前向计算公式,也就是所谓的JVP:Jacobian-Vector Product
$$\begin{align}
\frac{d\ell}{d\bm{x}} =\prod_{i=1}^{n-1} \bm{J}_i ^\T\cdot\bm{v}_{output}
==\bm{J}_1 ^\T\cdot\bm{J}_2 ^\T\cdots\bm{J}_{n-1} ^\T\cdot\bm{v}_{output}
\end{align}$$
对于标量损失函数后向计算公式,也就是所谓的VJP:Vector-Jacobian Product
$$\begin{align}
\frac{d\ell}{d\bm{x}^\T}
=\bm{v}_{output}^\T\cdot\prod_{i=1}^{n-1} \bm{J}_{n-i}
=\bm{v}_{output}^\T\cdot\bm{J}_{n-1}\cdots\bm{J}_{2}\cdot\bm{J}_{1}
\end{align}$$
三、矩阵函数的微分与导数
按照线性变换思路来定义矩阵微分,我们至少有两个路径。一种是尽可更保留矩阵结构,单独考察矩阵函数元素与矩阵变量之间的线性变换关系。另外一种是舍弃矩阵结构引进向量化算子 $\displaystyle \mathrm{vec}$。下面具体说明这一点。
2.1、矩阵函数与标量微分
若 $\displaystyle f \big(\bm{X}_{n\times m}\big)$是矩阵 $\displaystyle \bm{X}$的函数,若存在矩阵 $\displaystyle \bm{A}_{n\times m}=[a_{ij}]$使得下式成立
$$\begin{align}
\lim_{\Delta \bm{X}\to \bm{0}}\frac{\displaystyle \bigg|f(\bm{X}+\Delta\bm{X})-f(\bm{X})- \sum_{i=1}^n\sum_{j=1}^m a_{ij}\mathrm{d}x_{ij}\bigg|}{\left|\bm{\Delta\bm{X}}\right|}
=0
\end{align}$$
我们惊奇的发现 $\displaystyle \sum_{i=1}^n\sum_{j=1}^m a_{ij}\mathrm{d}x_{ij}$的部分可以用矩阵求迹的方法等价表示。这样我们在线性变换这一概念下,推广得到这个式子:
$$\begin{align}
\lim_{\Delta \bm{X}\to \bm{0}}\frac{\displaystyle \bigg|f(\bm{X}+\Delta\bm{X})-f(\bm{X})- \mathrm{tr}\bigg(\bm{A}^\T\mathrm{d}\bm{X}\bigg)\bigg|}{\left|\bm{\Delta\bm{X}}\right|}
=0
\end{align}$$
那么我们就是说 $\displaystyle f$在 $\displaystyle \bm{X}$处可微。记 $\displaystyle \dot{f}\big(\bm{X}\big)=\frac{\partial f}{\partial \bm{X}}=\bm{A}$,称为全导数。微分记为
$$\begin{align}
\mathrm{d}f=\sum_{i=1}^n\sum_{j=1}^m\frac{\partial f}{\partial x_{ij}}\mathrm{d}x_{ij}=\mathrm{tr}\bigg(\frac{\partial f}{\partial \bm{X}^\T}\mathrm{d}\bm{X}\bigg)
\end{align}$$
这里对于基础薄弱的同学来说,对与迹的引入是非常不习惯的。实际上自己给几个例子计算一下就很容易理解了。例如我们定义函数 $\displaystyle y=\mathrm{tr}[\bm{A}_{3\times 2}^\T \bm{X}_{3\times 2}] = \sum_{i=1}^3\sum_{j=1}^2 a_{ij}x_{ij}$这个函数。
$$\begin{align}
y
&=\mathrm{tr}[\bm{A}_{3\times 2}^\T \bm{X}_{3\times 2}] = \sum_{i=1}^3\sum_{j=1}^2 a_{ij}x_{ij}\\
&=
\begin{bmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}\\
a_{31} & a_{32}\\
\end{bmatrix}^\T
\begin{bmatrix}
x_{11} & x_{12}\\
x_{21} & x_{12}\\
x_{31} & x_{12} \\
\end{bmatrix}\\
&=\begin{bmatrix}
a_{11} & a_{21} & a_{31}\\
a_{12} & a_{22} & a_{32}\\
\end{bmatrix}
\begin{bmatrix}
x_{11} & x_{12}\\
x_{21} & x_{12}\\
x_{31} & x_{12} \\
\end{bmatrix}\\
&=a_{11}x_{11}+a_{21}x_{21}+a_{31}x_{31} + a_{12}x_{12}+a_{22}x_{22}+a_{32}x_{32}
\end{align}$$
那么
$$\begin{align}
\frac{\partial y}{\partial \bm{X}}= \bm{A}
\end{align}$$
2.2、矩阵与矩阵微分
现在我们来考虑这样的矩阵函数 $\displaystyle \bm{Y}_{p\times q}=\bm{F}\big(\bm{X}_{n\times m}\big)$。按照上述定义我们可以集中考虑其中一个元素 $\displaystyle y_{rs}$和 $\displaystyle \bm{X}$的线性变换。也就是
$$\begin{align}
\mathrm{d}y_{rs}=\mathrm{tr}\bigg(\frac{\partial f_{rs}}{\partial \bm{X}^\T}\mathrm{d}\bm{X}\bigg)
\end{align}$$
我们也可以考虑 $\displaystyle \bm{Y}$ 和 $\displaystyle x_{ij}$的线性变换:
$$\begin{align}
\mathrm{d}\bm{Y}=\frac{\partial \bm{F}}{\partial x_{ij}}\mathrm{d}x_{ij}
\end{align}$$
进而我们联想到使用下式来定义矩阵导数:
$$\begin{align}
\frac{\partial \bm{Y}}{\partial \bm{X}}
=\begin{bmatrix}
\displaystyle\frac{\partial f_{11}}{\partial \bm{X}^\T} & \cdots& \displaystyle\frac{\partial f_{1q}}{\partial \bm{X}^\T}\\
\vdots &\ddots &\vdots\\
\displaystyle\frac{\partial f_{p1}}{\partial \bm{X}^\T}&\cdots & \displaystyle\frac{\partial f_{pq}}{\partial \bm{X}^\T}
\end{bmatrix}
\end{align}$$
可惜的是这将导致矩阵微分无法运算,因为 $\displaystyle \mathrm{d}\bm{Y}\neq\frac{\partial \bm{Y}}{\partial \bm{X}}\otimes\mathrm{d}\bm{X} $。维度的扩张导致我们无法继续保留矩阵结构将导数概念扩张到矩阵情形。我们回到向量函数微分导数的情形。考虑将矩阵按列拉成向量:
$$\begin{align}
\mathrm{vec}\big(\bm{A}_{n\times m}\big)=
\begin{bmatrix}
\bm{A}[:1] \\
\vdots\\
\bm{A}[:m] \\
\end{bmatrix}_{nm\times 1}
\end{align}$$
于是我们可以这样定义微分
$$\begin{align}
\mathrm{d} \mathrm{vec}\big(\bm{Y}\big)=\frac{\partial \mathrm{vec}\big(\bm{F}\big)}{\partial \mathrm{vec}^\T\big(\bm{X}\big)}\mathrm{d} \mathrm{vec}\big(\bm{X}\big)
\end{align}$$
2.3、克罗内克算子
下面叙述的内容将不会给出证明,如果对证明感兴趣可以问大模型,注意得到的导数是 $\displaystyle \frac{\partial \mathrm{vec}\big(\bm{F}\big)}{\partial \mathrm{vec}^\T\big(\bm{X}\big)}$是 $\displaystyle pq\times nm$维的,有人要问这和 $\displaystyle \frac{\partial f_{rs}}{\partial \bm{X}}$的区别和联系? 直觉告诉肯定有联系。它们不过是矩阵微分线性变换的不同表达形式。当将注意力集中到 $\displaystyle y_{rs}$的时候,我们似乎看出了显然。不过为了简洁记,要引入几个定义
1、向量基 $\displaystyle \bm{e}_i(n)=[0,\cdots,0,1,0,\cdots,0]^\T$
2、矩阵基 $\displaystyle \bm{E}_{ij}(n,m)=\bm{e}_i(n)\bm{e}^\T_j(m)$
3、Kronecker 算子 $\displaystyle \delta_{ij}=\bm{e}^\T_i \bm{e}_j$。克罗内克算子
$$\begin{align}
\delta_{ij}=
\begin{cases}
1,\,i=j\\
0,\,i\neq j
\end{cases}
\end{align}$$
4、置换矩阵 $\displaystyle \bm{\normalsize\kappa }_{nm}=\sum_{i=1}^n\sum_{j=1}^m \bm{E}_{ij}(n,m)\otimes\bm{E}_{ij}^\T(n,m)$
以下结论是显然的:
1、 $\displaystyle \bm{\normalsize\kappa }_{nm}^\T=\bm{\normalsize\kappa }_{mn}$
2、 $\displaystyle \bm{\normalsize\kappa }_{nm}^\T\bm{\normalsize\kappa }_{nm}=\bm{E}_{nm}$
3、 $\displaystyle \bm{\normalsize\kappa }_{1n}=\bm{\normalsize\kappa }_{n1}=\bm{E}_n $
4、 $\displaystyle \bm{\normalsize\kappa }_{nm}=\big[\mathrm{vec}\big(\bm{E}_{11}^\T\big),\mathrm{vec}\big(\bm{E}_{21}^\T\big),\cdots,\mathrm{vec}\big(\bm{E}_{n1}^\T\big),\cdots,\mathrm{vec}\big(\bm{E}_{1m}^\T\big),\cdots,\mathrm{vec}\big(\bm{E}_{nm}^\T\big)\big]$
5、 $\displaystyle \bm{E}_{nm}=\big[\mathrm{vec}\big(\bm{E}_{11}\big),\mathrm{vec}\big(\bm{E}_{21}\big),\cdots,\mathrm{vec}\big(\bm{E}_{n1}\big),\cdots,\mathrm{vec}\big(\bm{E}_{1m}\big),\cdots,\mathrm{vec}\big(\bm{E}_{nm}\big)\big] $
同时注意到 $\displaystyle \bm{x}\bm{y}^\T=\bm{x}\otimes \bm{y}^\T=\bm{y}^\T\otimes \bm{x}$,同时有 $\displaystyle \bm{E}_n=\sum_{i=1}^n \bm{e}_i(n)\bm{e}_i ^\T(n)$和 Kronecke乘积的交换律性质,我们有:
6、 $\displaystyle \bm{\normalsize\kappa }_{nm}=\sum_{i=1}^n \big[\bm{e}_i(n)\otimes \bm{E}_m\otimes \bm{e}_i ^\T(n)\big]=\sum_{j=1}^m \big[\bm{e}_j(m)\otimes \bm{E}_n\otimes \bm{e}_j^\T(m)\big] $
注意到若 $\displaystyle \bm{A}_{n\times m}=\bm{a}\bm{b}^\T$ 则 $\displaystyle \mathrm{vec}\big(\bm{A}\big)=\mathrm{vec}\big(\bm{a}\bm{b}^\T\big)=\bm{b}\otimes \bm{a}$ 推理易得
7、 $\displaystyle \mathrm{vec}\big(\bm{A}\bm{X}\bm{B}\big)=\big[\bm{B}^\T\otimes \bm{A}\big]\mathrm{vec}\big(\bm{X}\big)$
利用上述结论易证明
8、$\displaystyle \mathrm{ver}\big(\bm{A}^\T\big)=\bm{\normalsize\kappa }_{nm} \mathrm{ver}\big(\bm{A}\big)$
有了这些,最后不加证明来说明两种矩阵导数之间的联系:
【矩阵导数定理】
若有 $\displaystyle \bm{Y}_{p\times q}$, $\displaystyle \bm{X}_{n\times m}$,若有下面导数成立:
$$\begin{align}
&\frac{\partial \bm{Y}}{\partial x_{ij}}=\bm{A}\cdot\bm{E}_{ij}(n,m)\cdot\bm{B}+\bm{C}\cdot\bm{E}_{ij}^\T(n,m)\cdot\bm{D}\\
\iff &\frac{\partial y_{rs}}{\partial \bm{X}}=\bm{A}^\T\cdot\bm{E}_{ij}(p,q)\cdot\bm{B}^\T+\bm{D}\cdot\bm{E}_{ij}^\T(p,q)\cdot\bm{C}
\end{align}$$
则有
$$\begin{align}
\frac{\partial \mathrm{vec}\big(\bm{Y}\big)}{\partial \mathrm{vec}^\T\big(\bm{X}\big)}
=\bm{B}^\T\otimes \bm{A}+\big[\bm{D}^\T\otimes \bm{C}\big] \bm{\normalsize\kappa }_{nm}
\end{align}$$
四、常用公式证明
4.1、不难证明
对于向量微分 $\displaystyle \mathrm{d}\bm{x}=[\mathrm{d}x_{i}]_{n}$, 不难证明向量微分有以下性质:
1、$\displaystyle \mathrm{d}(\bm{x}+\bm{y})=\mathrm{d}\bm{x}+\mathrm{d}\bm{y}$
2、$\displaystyle \mathrm{d}(c\bm{x}) = c\mathrm{d}\bm{x}$
3、 $\displaystyle \mathrm{d}(\bm{x}^\T\bm{y})=\mathrm{d}\bm{x}^\T\cdot\bm{y}+\bm{x}^\T\cdot\mathrm{d}\bm{y}$
对于矩阵微分 $\displaystyle \mathrm{d}\bm{X}=[\mathrm{d}x_{ij}]_{n\times m}$, 不难证明矩阵微分有以下性质:
1、$\displaystyle \mathrm{d}(\bm{X}+\bm{Y})=\mathrm{d}\bm{X}+\mathrm{d}\bm{Y}$
2、$\displaystyle \mathrm{d}(c\bm{X}) = c\mathrm{d}\bm{X}$
3、$\displaystyle [\mathrm{d}\bm{X}]^\T=\mathrm{d}\bm{X}^\T$
4、 $\displaystyle \mathrm{d}(\mathrm{tr}[\bm{X}])=\mathrm{tr}[\mathrm{d}\bm{X
}] $
5、 $\displaystyle \mathrm{d}(\bm{X}\bm{Y})=\mathrm{d}\bm{X}\cdot\bm{Y}+\bm{X}\cdot\mathrm{d}\bm{Y}$
6、 $\displaystyle \mathrm{d}(\bm{X}\otimes\bm{Y})=\mathrm{d}\bm{X}\otimes\bm{Y}+\bm{X}\otimes\mathrm{d}\bm{Y}$
4.1、向量导数
1、若 $\displaystyle f(\bm{x})=\bm{w}^\T\bm{x} $ ,有 $\displaystyle \frac{\partial f}{\partial \bm{x}}=\bm{w} $
2、若 $\displaystyle f(\bm{x})=\bm{x}^\T\bm{A}\bm{x}, \bm{A}=\bm{A}^\T$,有 $\displaystyle \frac{\partial f}{\partial \bm{x}}=2\bm{A}\bm{x} $ ,$\displaystyle \frac{\partial^2 f}{\partial \bm{x}\partial \bm{x}^\T }=2\bm{A}$
证明
$$\begin{align}
\mathrm{d}f
&=\mathrm{d}(\bm{x}^\T\bm{A}\bm{x})=\mathrm{d}(\bm{x}^\T)\bm{A}\bm{x}+\bm{x}^\T\mathrm{d}(\bm{A}\bm{x})\\
&=(\bm{A}\bm{x})^\T \mathrm{d}\bm{x} + \bm{x}^\T\bm{A}\mathrm{d}\bm{x}\\
&=\bm{x}^\T(\bm{A}+\bm{A}^\T)\mathrm{d}\bm{x}\\
&\to \frac{\partial f}{\partial \bm{x}}=(\bm{A}^\T+\bm{A})\bm{x}
\end{align}$$
对于 $\displaystyle \bm{A}=\bm{A}^\T$则可得结论。
3、若 $\displaystyle f(\bm{x})=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}} $ 有 $\displaystyle \frac{\partial f}{\partial \bm{x}}=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}}\bm{w}$, $\displaystyle \frac{\partial f}{\partial \bm{w}}=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}}\bm{x} $
证明:
$$\begin{align}
\mathrm{d}f
&=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}}\mathrm{d}(\bm{w}^\T\bm{x})
=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}}\bm{w}^\T\mathrm{d}(\bm{x})\
&\to \frac{\partial f}{\partial \bm{x}}=\mathrm{e}^{\bm{w}^\mathrm{T}\bm{x}}\bm{w}
\end{align}$$
$\displaystyle \frac{\partial f}{\partial \bm{w}}$是一样的道理。
4、若 $\displaystyle \bm{f}(\bm{x})=\bm{x} $ 有 $\displaystyle \bm{J}=\frac{\partial\bm{f}}{\partial \bm{x}^\T}=\bm{E} $
5、若 $\displaystyle \bm{f}(\bm{x})=\bm{A}\bm{x} $ 有 $\displaystyle \bm{J}=\frac{\partial\bm{f}}{\partial \bm{x}^\T}=\bm{A} $
根据定义不难证明4、5
若 $\displaystyle \bm{f}(\bm{x})=\mathrm{e}^{\bm{A}\bm{x}} $ 有 $\displaystyle \frac{\partial\bm{f}}{\partial \bm{x}^\T}=\mathrm{diag}[\mathrm{e}^{\bm{A}\bm{x}}]\bm{A}$
证明
$$\begin{align}
\mathrm{d}\bm{f}=\mathrm{d}(\mathrm{e}^{\bm{y}})\mathrm{d}(\bm{y})
\end{align}$$
$\displaystyle \bm{f}=\mathrm{e}^\bm{y} $为逐元素运算,因此雅可比矩阵为对角矩阵, 于是有
$$\begin{align}
\mathrm{d}\bm{f}
&=\mathrm{diag}[\mathrm{e}^\bm{y}]\mathrm{d}\bm{y}
=\mathrm{diag}[\mathrm{e}^\bm{A}\bm{x}]\bm{A}\mathrm{d}\bm{x}\
&\to \frac{\partial \bm{f}}{\partial \bm{x}^\T}=\mathrm{diag}[\mathrm{e}^\bm{A}\bm{x}]\bm{A}
\end{align}$$
4.2、矩阵导数
1、若 $\displaystyle f(\bm{A})=\bm{x}^\T\bm{A}\bm{y}$,有 $\displaystyle \frac{\partial f}{\partial \bm{A}}=\bm{x}\bm{y}^\T$
证明
$$\begin{align}
\mathrm{d}f
&=\mathrm{tr}[\bm{x}^\T\bm{A}\bm{y}]
=\mathrm{tr}[\bm{y}\bm{x}^\T\bm{A}]
=\mathrm{tr}[(\bm{x}\bm{y}^\T)^\T\bm{A}]\\
&\to \frac{\partial f}{\partial \bm{A}}= \bm{x}\bm{y}^\T
\end{align}$$
2、若 $\displaystyle f(\bm{A})=\bm{x}^\T\bm{A}^{-1}\bm{y}$,有 $\displaystyle \frac{\partial f}{\partial \bm{A}}=-\bm{A}^{-\T}\bm{x}\bm{y}^\T\bm{A}^{-\T}$
证明
$$\begin{align}
\mathrm{d}f
=\mathrm{tr}[\bm{x}^\T \mathrm{d}(\bm{A}^{-1})\bm{y}]
=\mathrm{tr}[\bm{y}\bm{x}^\T\mathrm{d}(\bm{A}^{-1})]
\end{align}$$
问题集中在了求 $\displaystyle \mathrm{d}(\bm{A}^{-1})$, 可以通过恒等式 $\displaystyle \bm{A}\bm{A}^{-1}=\bm{E}$来求,有
$$\begin{align}
\bm{A}\bm{A}^{-1}=\bm{E}
&\Longleftrightarrow
\mathrm{d}(\bm{A}\bm{A}^{-1})=\bm{0}\\
&\Longleftrightarrow
\mathrm{d}\bm{A}\bm{A}^{-1}+\bm{A}\mathrm{d}(\bm{A}^{-1})=\bm{0}\\
&\Longleftrightarrow
\mathrm{d}(\bm{A}^{-1}) = - \bm{A}^{-1}\mathrm{d}\bm{A}\bm{A}^{-1}
\end{align}$$
带入求
$$\begin{align}
\mathrm{d}f
&=\mathrm{tr}[\bm{x}^\T \mathrm{d}(\bm{A}^{-1})\bm{y}]
=\mathrm{tr}[\bm{y}\bm{x}^\T\mathrm{d}(\bm{A}^{-1})]
=\mathrm{tr}[\bm{y}\bm{x}^\T(- \bm{A}^{-1}\mathrm{d}\bm{A}\bm{A}^{-1})]\\
&=-\mathrm{tr}[\bm{y}\bm{x}^\T\bm{A}^{-1}\mathrm{d}\bm{A}\bm{A}^{-1}]
=-\mathrm{tr}[\bm{A}^{-1}\bm{y}\bm{x}^\T\bm{A}^{-1}\mathrm{d}\bm{A}]\\
&=-\mathrm{tr}[(\bm{A}^{-\T}\bm{x}\bm{y}^\T\bm{A}^{-\T})^\T\mathrm{d}\bm{A}]\\
&\to \frac{\partial f}{\partial \bm{A}}=-\bm{A}^{-\T}\bm{x}\bm{y}^\T\bm{A}^{-\T}
\end{align}$$
3、若 $\displaystyle f(\bm{x})=\ln \big[\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}\big] $ 有 $\displaystyle \frac{\partial f}{\partial \bm{A}}=\frac{\mathrm{e}^{\bm{A}\bm{x}}}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\bm{x}^\T=\mathcal{S}\big(\bm{A}\bm{x}\big)\bm{x}^\T$, 其中 $\mathcal{S}(\cdot)$是softmax函数。
证明
$$\begin{align}
\mathrm{d}f
&= \mathrm{tr}\bigg[\frac{1}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\mathrm{d}(\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}})\bigg]
= \mathrm{tr}\bigg[\frac{1}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\bm{I}^\T\mathrm{d}(\mathrm{e}^{\bm{A}\bm{x}})\bigg]\\
&= \mathrm{tr}\bigg[\frac{1}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\bm{I}^\T \mathrm{diag}[\mathrm{e}^{\bm{A}\bm{x}}]\mathrm{d}(\bm{A})\bm{x}\bigg]\\
&=\mathrm{tr}\bigg[\frac{\mathrm{e}^{\bm{A}\bm{x}}}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\mathrm{d}(\bm{A})\bm{x}\bigg]\\
&=\mathrm{tr}\bigg[\bm{x}\frac{\mathrm{e}^{(\bm{A}\bm{x})^\T}}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\mathrm{d}\bm{A}\bigg]\\
&=\mathrm{tr}\bigg[\bigg(\frac{\mathrm{e}^{\bm{A}\bm{x}}}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\bm{x}^\T\bigg)^\T\mathrm{d}\bm{A}\bigg]\\
&\to \frac{\partial f}{\partial \bm{A}} = \frac{\mathrm{e}^{\bm{A}\bm{x}}}{\bm{I}^\T\mathrm{e}^{\bm{A}\bm{x}}}\bm{x}^\T=\mathcal{S}\big(\bm{A}\bm{x}\big)\bm{x}^\T
\end{align}$$
4、若 $\displaystyle f(\bm{A})=\big||\,\bm{A}\,\big||_F^2$,则 $\displaystyle \frac{\partial f}{\partial \bm{A}}=2\bm{A}$
证明
$\displaystyle \big||\,\bm{A}\,\big||_F^2$表示矩阵 A 的 Frobenius 范数的平方。Frobenius 范数是矩阵所有元素的平方和的平方根,因此其平方就是矩阵所有元素的平方和:
$$\begin{align}
\big||\,\bm{A}\,\big||_F^2 = \sum_{i}\sum_{j}a_{ij}^2
\end{align}$$
$\mathrm{tr}[\bm{A}^\T\bm{A}]$表示矩阵$\bm{A}^\T\bm{A}$ 的迹(即对角元素之和)。这里:
$$\begin{align}
\mathrm{tr}[\bm{A}^\T\bm{A}] = \sum_{i}\sum_{j}a_{ij}^2
\end{align}$$
这样就有
$$\begin{align}
\mathrm{d}f
&= \mathrm{d}\big||\,\bm{A}\,\big||_F^2
=\mathrm{d}\mathrm{tr}[\bm{A}^\T\bm{A}]
=\mathrm{tr}[\mathrm{d}(\bm{A}^\T)\bm{A}+\bm{A}^\T \mathrm{d}\bm{A}]\\
&=\mathrm{tr}[(\mathrm{d}\bm{A})^\T\bm{A})+\mathrm{tr}(\bm{A}^\T \mathrm{d}\bm{A})\\
&=\mathrm{tr}[2\bm{A}^\T\mathrm{d}\bm{A}]\\
&\to \frac{\partial f}{\partial \bm{A}}=2 \bm{A}
\end{align}$$
5、若 $\displaystyle f(\bm{A})=\ln[\det[\bm{A}]]$,则 $\displaystyle \frac{\partial f}{\partial \bm{A}}=\bm{A}^{-\T}$
$$\begin{align}
\mathrm{d}f
&= \lim_{\mathrm{d}\bm{A}\to \bm{0}}\big(\ln[\det[\bm{A}+\mathrm{d}\bm{A}]]-\ln[\det[\bm{A}]]\big)\\
&=\lim_{\mathrm{d}\bm{A}\to \bm{0}}\bigg(\ln\frac{\det[\bm{A}+\mathrm{d}\bm{A}]}{\det[\bm{A}]}\bigg)
\end{align}$$
有 $\displaystyle \bm{A}\bm{A}^{-1}=\bm{E}\to\det[\bm{A}]\det[\bm{A}^{-1}]=\det[\bm{E}]=1\to\frac{1}{\det[\bm{A}]}=\det[\bm{A}^{-1}]$, 代入上式有
$$\begin{align}
\mathrm{d}f
&= \lim_{\mathrm{d}\bm{A}\to \bm{0}}\big(\ln[\det[\bm{A}+\mathrm{d}\bm{A}]]-\ln[\det[\bm{A}]]\big)\\
&=\lim_{\mathrm{d}\bm{A}\to \bm{0}}\bigg(\ln\big(\det[\bm{E}]+\det[\bm{A}^{-1}\mathrm{d}\bm{A}]\big)\bigg)\\
&=\lim_{\mathrm{d}\bm{A}\to \bm{0}}\ln\big(1+\det[\bm{A}^{-1}\mathrm{d}\bm{A}]\big)
\end{align}$$
有如下等价无穷小 $\displaystyle \ln(1+x)\sim x $、 $\displaystyle \det[\bm{A}]\sim \mathrm{tr}[\bm{A}]$,这里证明第二个, 其中 $\lambda_{i}$是方阵 $\bm{A}$的特征值,做泰勒展开有 $\displaystyle \det[\bm{A}] = \prod_{i}\lambda_{i} = \sum_{i}\lambda_{i} + o(\det[\bm{A}])\to \det[\bm{A}]\sim \mathrm{tr}[\bm{A}] $
。
$$\begin{align}
\mathrm{d}f
&= \lim_{\mathrm{d}\bm{A}\to \bm{0}}\ln\big(1+\det[\bm{A}^{-1}\mathrm{d}\bm{A}]\big)\\
&=\det[\bm{A}^{-1}\mathrm{d}\bm{A}]\\
&=\mathrm{tr}[\bm{A}^{-1}\mathrm{d}\bm{A}]\\
&\to \frac{\partial f}{\partial \bm{A}} = \bm{A}^{-\T}
\end{align}$$
6、若 $\displaystyle f(\bm{A})=\det[\bm{A}]$,则 $\displaystyle \frac{\partial f}{\partial \bm{A}}=\det[\bm{A}]\bm{A}^{-\T}$
证明
有等价无穷小:$\displaystyle \det[\bm{A}] = \prod_{i}\lambda_{i} = \sum_{i}\lambda_{i} + o(\det[\bm{A}])\to \det[\bm{A}]\sim \mathrm{tr}[\bm{A}] $则有
$$\begin{align}
\mathrm{d}f
&=\lim_{\mathrm{d}\bm{A}\to\bm{0}}\bigg(\det[\bm{A}+\mathrm{d}\bm{A}]-\det[\bm{A}]\bigg)\\
&=\lim_{\mathrm{d}\bm{A}\to\bm{0}}\bigg(\det[\bm{A}]\det[\bm{E}+\bm{A}^{-1}\mathrm{d}\bm{A}]-\det[\bm{A}]\bigg)\\
&=\det(\bm{A})(1+\mathrm{tr}[\bm{A}^{-1}\mathrm{d}\bm{A}])-\det[\bm{A}]\\
&=\det(\bm{A})\mathrm{tr}[\bm{A}^{-1}\mathrm{d}\bm{A}]\\
&=\mathrm{tr}[(\det[\bm{A}]\bm{A}^{-\T})^\T\mathrm{d}\bm{A}]\\
&\to\frac{\partial f}{\partial \bm{A}} = \det[\bm{A}]\bm{A}^{-\T}
\end{align}$$
下面几个不加证明。
若 $\displaystyle \bm{F}(\bm{A})=\bm{A}^{-1}$,有 $\displaystyle \frac{\partial \bm{F}}{\partial \bm{A}}=-\bm{A}^{-2}$
若 $\displaystyle \bm{y}(\bm{A})=\bm{A}\bm{x}$,有 $\displaystyle \frac{\partial \bm{y}}{\partial \bm{A}}=\frac{\partial \mathrm{vec}\big(\bm{y}\big)}{\partial \mathrm{vec}^\T\big(\bm{A}\big)}=\bm{x}^\T\otimes \bm{E}$
若 $\displaystyle \bm{Y}_{p\times q}=\bm{A}_{p\times n}\bm{X}_{n\times m}\bm{B}_{m\times q}$,有矩阵微分 $\displaystyle \frac{\partial \bm{Y}}{\partial \bm{X}}
=\frac{\partial \mathrm{vec}\big(\bm{Y}\big)}{\partial \mathrm{vec}^\T\big(\bm{X}\big)}=\bm{B}^\T\otimes \bm{A}$
版权声明 | ![]() |
![]() | 由引线小白创作并维护的柠檬CC博客采用署名-非商业-禁止演绎4.0国际许可证。 本文首发于柠檬CC [ https://www.limoncc.com ] , 版权所有、侵权必究。 |
本文永久链接 | httpss://www.limoncc.com/post/ab2342877c86f7c1/ |
如果您需要引用本文,请参考: |
引线小白. (Jul. 20, 2025). 《RNN的复兴01:向量和矩阵微分-大语言模型研究08》[Blog post]. Retrieved from https://www.limoncc.com/post/ab2342877c86f7c1 |
@online{limoncc-ab2342877c86f7c1, title={RNN的复兴01:向量和矩阵微分-大语言模型研究08}, author={引线小白}, year={2025}, month={Jul}, date={20}, url={\url{https://www.limoncc.com/post/ab2342877c86f7c1}}, } |