闲话矩阵求导


title: 闲话矩阵求导
原始文件没有办法把latex公式正常显示,所以一个一个弄出来了,保留了原来的公式。原始文章来自《闲话矩阵求导》。


矩阵求导,想必许多领域能见到。统计学,经济学,优化,机器学习等等,在对目标问题建立数学模型之后,问题往往被抽象为关于矩阵的优化问题。于是免不了需要对矩阵进行求导等操作。

简单的向量和矩阵求导,大多数熟悉这些计算的人,应该都能直接写下,然而复杂的矩阵函数求导则没那么简单,著名的matrix cookbook为广大的研究者们提供了一本大字典,里面有着各种简单到复杂矩阵和向量的求导法则,但是如果你的好奇心和我一样重,那么你肯定不会满足于查字典这种方法,特别是在推导公式一气呵成满纸乱飞的时候,查字典岂不是大煞风景?

事实上,所有求导的法则都可以从最基本的求导规则推导出来。不知你有没发现,不同的文献中,同样的式子求导的结果有时候会不一样,仔细观察会发现刚好相差一个转置,于是我们得先说说求导的两个派别(布局)。

1 布局(Layout)

不知道为什么会是这个名字,总之矩阵求导有两种布局,分子布局(numerator layout)和分母布局(denominator layout)。
为了阐明这两种布局的区别,我们先来看最简单的求导规则。
首先是向量yy对标量xx求导,我们假定所有的向量都是列向量,

列向量y.png

$$
\mathbf{y}=\begin{bmatrix}y_{1}\\
y_{2}\\
\vdots\\
y_{m}
\end{bmatrix}
$$

分子布局下,

分子布局.png

$$
\frac{\partial\mathbf{y}}{\partial x}=\begin{bmatrix}\frac{\partial y_{1}}{\partial x}\\
\frac{\partial y_{2}}{\partial x}\\
\vdots\\
\frac{\partial y_{m}}{\partial x}
\end{bmatrix}
$$

而在分母布局下,

分母布局.png

$$
\frac{\partial\mathbf{y}}{\partial x}=\begin{bmatrix}\frac{\partial y_{1}}{\partial x} & \frac{\partial y_{2}}{\partial x} & \cdots & \frac{\partial y_{m}}{\partial x}\end{bmatrix}
$$

以下都是在分母布局下的定义

2 基本的求导规则(定义)

这一部分,我们将看到一些基本的求导规则,这些与其说是规则,倒不如说是定义。因此这一部分是需要好好理解并且记忆(如果你看一遍还记不住的话)的。
标量!$\mathrm{\mathbf{y}}$对向量!$x$求导:

标量对向量求导.png

$$
\frac{\partial y}{\partial\mathbf{x}}=\begin{bmatrix}\frac{\partial y}{\partial x_{1}}\\
\frac{\partial y}{\partial x_{2}}\\
\vdots\\
\frac{\partial y}{\partial x_{m}}
\end{bmatrix}
$$

注意到,标量对向量求导和向量对标量求导刚好反过来。
向量对向量求导,


列向量x.png
$$
\mathbf{x}=\begin{bmatrix}x_{1}\\
x_{2}\\
\vdots\\
x_{n}
\end{bmatrix}
$$
列向量y.png
$$
\mathbf{y}=\begin{bmatrix}y_{1}\\
y_{2}\\
\vdots\\
y_{m}
\end{bmatrix}
$$
列向量y对x求导.png
$$
\frac{\partial\mathbf{y}}{\partial\mathbf{x}}=\begin{bmatrix}\frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{1}}\\
\frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{2}}{\partial x_{2}} & \cdots & \frac{\partial y_{m}}{\partial x_{2}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial y_{1}}{\partial x_{n}} & \frac{\partial y_{2}}{\partial x_{n}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}
\end{bmatrix}
$$

标量对矩阵求导,

标量对矩阵求导.png
$$
\frac{\partial y}{\partial\mathbf{X}}=\begin{bmatrix}\frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}} & \cdots & \frac{\partial y}{\partial x_{1q}}\\
\frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}} & \cdots & \frac{\partial y}{\partial x_{2q}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial y}{\partial x_{p1}} & \frac{\partial y}{\partial x_{p2}} & \cdots & \frac{\partial y}{\partial x_{pq}}
\end{bmatrix}
$$

矩阵对标量求导,

矩阵对标量求导.png
$$
\frac{\partial\mathbf{y}}{\partial x}=\begin{bmatrix}\frac{\partial y_{11}}{\partial x} & \frac{\partial y_{21}}{\partial x} & \cdots & \frac{\partial y_{m1}}{\partial x}\\
\frac{\partial y_{12}}{\partial x} & \frac{\partial y_{22}}{\partial x} & \cdots & \frac{\partial y_{m2}}{\partial x}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial y_{1n}}{\partial x} & \frac{\partial y_{2n}}{\partial x} & \cdots & \frac{\partial y_{mn}}{\partial x}
\end{bmatrix}
$$

事实上,直观上看,凡是对标量求导,结果的形式都要转置,而标量对向量和矩阵求导则位置保持不动。这样总结方便我们记忆。
总的来说,涉及矩阵和向量的求导不外乎五大类别,

  • 向量对标量
  • 标量对向量
  • 向量对向量
  • 矩阵对标量
  • 标量对矩阵
    这些定义我在上面都已经一一列出。接下来是时候去看一些更加复杂的东西了。

3 维度分析

接下来我们来看一些常见的求导,
首先是!$\frac{\partial\mathbf{Ax}}{\partial\mathbf{x}} $,

注意到


!$(\mathbf{Ax})_{i}=a_{i1}x_{1}+a_{i2}x_{2}+\cdots+a_{in}x_{n}$,于是利用向量对向量求导法则,我们有

$$
\frac{\partial\mathbf{\mathbf{Ax}})}{\partial\mathbf{x}}=\begin{bmatrix}\frac{\partial(\mathbf{Ax})_{1}}{\partial x_{1}} & \frac{\partial(\mathbf{Ax})_{2}}{\partial x_{1}} & \cdots & \frac{\partial(\mathbf{Ax})_{m}}{\partial x_{1}}\\
\frac{\partial(\mathbf{Ax})_{1}}{\partial x_{2}} & \frac{\partial(\mathbf{Ax})_{2}}{\partial x_{2}} & \cdots & \frac{\partial(\mathbf{Ax})_{m}}{\partial x_{2}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial(\mathbf{Ax})_{1}}{\partial x_{n}} & \frac{\partial(\mathbf{Ax})_{2}}{\partial x_{n}} & \cdots & \frac{\partial(\mathbf{Ax})_{m}}{\partial x_{n}}
\end{bmatrix}=\begin{bmatrix}a_{11} & a_{21} & \cdots & a_{m1}\\
a_{12} & a_{22} & \cdots & a_{m2}\\
\vdots & \vdots & \ddots & \vdots\\
a_{1n} & a_{2n} & \cdots & a_{mn}
\end{bmatrix}=\mathbf{A}^{\mathrm{T}}
$$

理论上对于任意的表达式,我们都可以通过定义出发,利用上面这种形式推导得到。
但是对于一些复杂的求导,这个时候恐怕逐项展开分析就不是很靠谱了。
我们先来看求导分类的前三类,对于这三类问题,我们来看一个非常强大的方法,通过分析维度来得到结果。
1、




考虑以上前两个式子与x无关,所以A肯定可以先提出求导式。
考虑!$\frac{\partial\mathbf{Au}}{\partial\mathbf{x}}$,!$\mathbf{A}$!$\mathbf{x}$无关,所以!$\mathbf{A}$肯定可以先提出求导式,至于去哪了暂时不清楚。

假如

假如!$\mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{u}\in\mathbb{R}^{n\times1},\mathbf{x}\in\mathbb{R}^{p\times1}$
我们知道最后结果肯定和!$\frac{\partial\mathbf{u}}{\partial\mathbf{x}}$有关,注意到!$\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\in\mathbb{R}^{p\times n}$,于是!$\mathbf{A}$只能转置以后添在后面,因此

$$
\frac{\partial\mathbf{Au}}{\partial\mathbf{x}}=\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\mathbf{A}^{\mathrm{T}}
$$

a,u是和x相关的标量
同样对于!$\frac{\partial a\mathbf{u}}{\partial\mathbf{x}},a\text{}$!$\mathbf{x}$相关的标量,假定!$\mathbf{u}\in\mathbb{R}^{m\times1},\mathbf{x}\in\mathbb{R}^{n\times1}$根据乘积法则(非精确版本),前一个部分肯定是!$a\frac{\partial\mathbf{u}}{\partial\mathbf{x}}$,后一部分为!$\frac{\partial a}{\partial\mathbf{x}}\in\mathbb{R}^{n\times1}$!$\mathbf{u}$的某种形式的积,分析维度发现只能是!$\frac{\partial a}{\partial\mathbf{x}}\mathbf{u}^{\mathrm{T}}$
于是

$$
\frac{\partial a\mathbf{u}}{\partial\mathbf{x}}=a\frac{\partial\mathbf{u}}{\partial\mathbf{x}}+\frac{\partial a}{\partial\mathbf{x}}\mathbf{u}^{\mathrm{T}}
$$

我们发现,虽然乘积法则的精准形式无法应用于矩阵求导中,然而这种非精确的乘积法则可以准确的告诉我们哪些项一定会出现在结果中,然后通过分析维度,我们就可以写出结果。
再看!$\frac{\partial\mathbf{x}^{\mathrm{T}}\mathbf{Ax}}{\partial\mathbf{x}}$,其中!$\mathbf{A}$!$\mathbf{x}$无关,
为了分析这个问题,我们考虑一个更一般的问题,

$$
\frac{\partial\mathbf{x}^{\mathrm{T}}\mathbf{Ay}}{\partial\mathbf{x}},\mathbf{x}\in\mathbb{R}^{m\times1},\mathbf{y}\in\mathbb{R}^{n\times1}
$$

我们利用非精确的乘积法则,可以将这个分成两部分


$$
\frac{\partial\text{(}\mathbf{x}^{\mathrm{T}}\mathbf{A)y}}{\partial\mathbf{x}}
$$

于是结果和两部分相关,一个是

$$
\frac{\partial\mathbf{y}}{\partial\mathbf{x}}\in\mathbb{R}^{m\times n}
$$

,另一个是

$$
\frac{\partial\mathbf{x}^{\mathrm{T}}\mathbf{A}}{\partial\mathbf{x}}=\mathbf{A}\in\mathbb{R}^{m\times n}
$$

,同样通过分析维度,我们可以得到

$$
\frac{\partial\text{(}\mathbf{x}^{\mathrm{T}}\mathbf{A)y}}{\partial\mathbf{x}}=\frac{\partial\mathbf{y}}{\partial\mathbf{x}}\mathbf{A}^{\mathrm{T}}\mathbf{x}+\mathbf{Ay}
$$

因此

$$
\frac{\partial\mathbf{x}^{\mathrm{T}}\mathbf{Ax}}{\partial\mathbf{x}}=(\mathbf{A}^{\mathrm{T}}+\mathbf{A})\mathbf{x}
$$

最后看一个式子



所以,


$$
\frac{\partial\mathbf{a}^{\mbox{T}}\mathbf{xx}^{\mbox{T}}\mathbf{b}}{\partial\mathbf{x}},\mathbf{a,b,x}\in\mathbb{R}^{m\times1}

\frac{\partial\mathbf{a}^{\mbox{T}}\mathbf{xx}^{\mbox{T}}\mathbf{b}}{\partial\mathbf{x}}=\frac{\partial(\mathbf{a}^{\mbox{T}}\mathbf{x)(x}^{\mbox{T}}\mathbf{b)}}{\partial\mathbf{x}}

$$

注意到

$$
\frac{\partial(\mathbf{a}^{\mbox{T}}\mathbf{x)}}{\partial\mathbf{x}}=\mathbf{a},\frac{\partial(\mathbf{x}^{\mbox{T}}\mathbf{b)}}{\partial\mathbf{x}}=\mathbf{b}
$$

所以(注意到!$\mathbf{x}^{\mbox{T}}\mathbf{b}\in\mathbb{R}$),

$$
\frac{\partial\mathbf{a}^{\mbox{T}}\mathbf{xx}^{\mbox{T}}\mathbf{b}}{\partial\mathbf{x}}=\frac{\partial(\mathbf{a}^{\mbox{T}}\mathbf{x)(x}^{\mbox{T}}\mathbf{b)}}{\partial\mathbf{x}}=\mathbf{a}\mathbf{x}^{\mbox{T}}\mathbf{b}+\mathbf{ba}^{\mbox{T}}\mathbf{x}=(\mathbf{ab}^{\mathrm{T}}+\mathbf{ba}^{\mathrm{T}})\mathbf{x}
$$

4 标量对矩阵求导(微分形式)

接下来看五种类型中剩下的两类,在实际的问题中,主要是矩阵的迹对矩阵的求导问题。 正如我们在前面看到的,在矩阵的求导中,不存在精确的乘积法则,我们只是通过非精确的乘积法则分析出单项式中含有的项,再通过维度分析得到结果。 但是,有一种情形下,乘积法则是精确成立的,我们现在就来看这一种情形——迹的微分。因为在微分形式下,

  • 乘积法则成立
  • 迹和微分可交换
    好了,现在你应该已经忘记分子布局了吧,不过不要紧,所有之前的结果转置一下,就得到了分子布局下的结果。
    接下来请注意,当我们谈论微分的时候,只有在分子布局下才是有意义的。
    (Warning:微分只有分子布局,没有分母布局)
    首先我们指出
只有在分子布局下

等价于:

分子布局
分母布局

为了方便记忆,防止混淆,我们干脆将一下3个式子等同起来

image.png
$$
\mathrm{d}\mathbf{Y}=\mathrm{tr}(\mathbf{A}\mathrm{d}\mathbf{X})
$$

等价于

$$
\frac{\partial\mathbf{Y}}{\partial\mathbf{X}}=\mathbf{A}
$$

注意这是分子布局下的,对应分母布局下应该为

$$
\frac{\partial\mathbf{Y}}{\partial\mathbf{X}}=\mathbf{A}^{\mbox{T}}
$$

为了方便记忆,防止混淆,我们干脆将

$$
\mathrm{d}\mathbf{Y}=\mathrm{tr}(\mathbf{A}\mathrm{d}\mathbf{X})
$$

$$
\frac{\partial\mathbf{Y}}{\partial\mathbf{X}}=\mathbf{A}^{\mbox{T}}
$$

直接等同起来。
于是所有的迹形式对矩阵的求导都先转化为微分形式,比如

$$
\mathrm{d}\mathrm{tr}(\mathbf{AX})=\mathrm{tr}(\mathrm{d}(\mathbf{AX}))=\mathrm{tr}(\mathbf{A}\mathrm{d}\mathbf{X})
$$

其实很简单,我们再看几个例子来加深理解:
先回忆一些非常有用的迹的性质:

  • 矩阵的迹和转置的迹相同(转置性质)
  • 矩阵乘积的迹和矩阵乘积轮换对称后的迹相同(循环排列)
    考虑

所以,

$$
\begin{aligned}
\mbox{d tr(}\mathbf{X}^{\mbox{T}}\mathbf{AX}) & = & \mbox{tr}(\mbox{d}(\mathbf{X}^{\mbox{T}}\mathbf{AX}))\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X}+\mbox{d}(\mathbf{X}^{\mbox{T}}\mathbf{A})\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X}+\mbox{d}(\mathbf{X}^{\mbox{T}}\mathbf{A})\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X}+\mbox{d}(\mathbf{A}^{\mbox{T}}\mathbf{X}){}^{\mbox{T}}\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X})+\mbox{tr}(\mbox{d}(\mathbf{A}^{\mbox{T}}\mathbf{X}){}^{\mbox{T}}\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X})+\mbox{tr}(\mbox{d}(\mathbf{A}^{\mbox{T}}\mathbf{X}){}^{\mbox{T}}\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X})+\mbox{tr}(\mathbf{X}^{\mbox{T}}\mbox{d}(\mathbf{A}^{\mbox{T}}\mathbf{X}))\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X})+\mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}^{\mbox{T}}\mbox{d}\mathbf{X})\\
 & = & \mbox{tr}(\mathbf{X}^{\mbox{T}}\mathbf{A}\mbox{d}\mathbf{X}+\mathbf{X}^{\mbox{T}}\mathbf{A}^{\mbox{T}}\mbox{d}\mathbf{X})\\
 & = & \mbox{tr}((\mathbf{X}^{\mbox{T}}\mathbf{A}+\mathbf{X}^{\mbox{T}}\mathbf{A}^{\mbox{T}})\mbox{d}\mathbf{X})\end{aligned}
$$

所以

$$
\frac{\partial\mathrm{tr}(\mathbf{X}^{\mathrm{T}}\mathbf{AX})}{\partial\mathbf{X}}=\text{(}\mathbf{X}^{\mbox{T}}\mathbf{A}+\mathbf{X}^{\mbox{T}}\mathbf{A}^{\mbox{T}})^{\mbox{T}}=(\mathbf{A}+\mathbf{A}^{\mbox{T}})\mathbf{X}
$$

这是一份简短的矩阵求导介绍,它的目的是告诉你如何更好的快速推导这些公式,避免查阅手册的麻烦。当然如果你觉得你完全是一个工程师,查阅手册感觉很方便,那么继续按照你的方式生活吧。如果你觉得很有用,那么请继续:Have fun with math!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • old Table of Contents 1. 布局(Layout) 2. 基本的求导规则(定义) 3. 维度分...
    场景为王阅读 5,824评论 2 1
  • 引 向量求导在当前线性系统的优化问题中经常用到,比如最小二乘:$$\hat{\mathbf{x}{\rm LS}}...
    hiloki阅读 945评论 0 1
  • 只要有衣有食当知足。信心能除忧虑。爱她,就为她祷告,上帝能改变一切!喜乐的事情!一:教练对我说,练车,不要钱。考不...
    凌贤武阅读 197评论 0 0
  • 天很暗。 晓南颓唐地躺在沙发上,她维持这个姿势已经一天了,眼睛一刻不离地盯着手机,好像世界只有这东西似的,其他都与...
    老二Y阅读 216评论 0 0