矩阵向量求导

本文整理自李建平机器学习中的矩阵向量求导系列和长躯鬼侠的矩阵求导术

1. 符号说明

默认符号:

  • x :标量

  • \mathbf{x} : n 维列向量

  • \mathbf{y} : m 维列向量

  • Xm \times n矩阵

  • Yp \times q矩阵

2. 矩阵向量求导布局

自变量\因变量 标量y 向量\mathbf{y} 矩阵\mathbf{Y}
标量x / \frac{\partial \mathbf{y}}{\partial x}
分子布局:m维列向量(默认)
分母布局:m维行向量
\frac{\partial \mathbf{Y}}{\partial x}
分子布局:p × q矩阵(默认)
分母布局:q \times p矩阵
向量\mathbf{x} \frac{\partial y}{\partial \mathbf{x}}
分子布局:n维行向量
分母布局:n 维列向量(默认)
\frac{\partial \mathbf{y}}{\partial \mathbf{x}}
分子布局:m × n 雅克比矩阵(默认)
分母布局:n \times m 梯度矩阵
/
矩阵\mathbf{X} \frac{\partial y}{\partial \mathbf{X}}
分子布局:n \times m 矩阵
分母布局:m × n 矩阵(默认)
/ \frac{\partial \mathbf{Y}}{\partial \mathbf{X}}
分母布局:mn × pq 矩阵

3. 矩阵向量求导大全

自变量\因变量 标量y 向量\mathbf{y} 矩阵\mathbf{Y}
标量x \frac{\partial y}{\partial x}
大学微积分知识
\frac{\partial \mathbf{y}}{\partial x}
定义法求导
\frac{\partial \mathbf{Y}}{\partial x}
定义法求导
向量\mathbf{x} \frac{\partial y}{\partial \mathbf{x}}
1. 定义法求导
2. 基本法则:线性法则、乘法法则、除法法则
3. 矩阵微分:df = tr\left( \left( \frac{\partial f}{\partial \mathbf{x}} \right)^{T} d\mathbf{x} \right )
4. 链式法则:\frac{\partial z}{\partial \mathbf{x}} = \left( \frac{\partial \mathbf{y}}{\partial \mathbf{x}}\right)^{T} \frac{\partial z}{\partial \mathbf{y}}
\frac{\partial \mathbf{y}}{\partial \mathbf{x}}
1. 定义法求导
2. 链式法则:\frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}} \frac{\partial \mathbf{y}}{\partial \mathbf{x}}
——
矩阵\mathbf{X} \frac{\partial y}{\partial \mathbf{X}}
1. 定义法求导
2. 矩阵微分:df = tr\left( \left( \frac{\partial f}{\partial \mathbf{X}} \right)^{T} d\mathbf{X} \right )
3. 矩阵微分性质
4. 迹技巧
5. 链式求导法则:\frac{\partial z}{\partial x_{ij}} = \sum_{k,l} \frac{\partial z}{\partial \mathbf{Y}_{kl}} \frac{\partial \mathbf{Y}_{kl}}{\partial \mathbf{X}_{ij}} = tr \left( \left( \frac{\partial z}{\partial \mathbf{Y}} \right)^{T} \frac{\partial \mathbf{Y}}{\partial \mathbf{X}_{ij}} \right)
—— \frac{\partial \mathbf{Y}}{\partial \mathbf{X}}
1. 定义:\frac{\partial \mathbf{Y}}{\partial \mathbf{X}} = \frac{\partial vec \left(\mathbf{Y} \right)}{\partial vec \left(\mathbf{X} \right)}
2. 微分法:vec(d \mathbf{Y}) = \frac{\partial \mathbf{Y}}{\partial \mathbf{X}}^{T}vec \left(d \mathbf{X} \right)
3. 运算法则

4. 标量对向量求导

已知:
y = f(\mathbf{x})
求:
\frac{\partial y}{\partial \mathbf{x}} = ?

4.1 定义法求导

所谓标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量。


例1:y = \mathbf{a}^{T} \mathbf{x}
\frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial x_{i}} = \frac{\partial \sum_{j=1}^{n}a_{j}x_{j}}{\partial x_{i}} = \frac{\partial a_{i}x_{i}}{\partial x_{i}} = a_{i}
所以,将求导结果组成向量:
\frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial \mathbf{x}} = \mathbf{a}


4.2 标量对向量求导基本法则

1_标量对向量求导基本法则.png

4.3 通过向量微分求导

利用导数和微分之间的关系:
df = \sum_{i=1}^{n}\frac{\partial f}{\partial x_{i}}dx_{i} = \left( \frac{\partial f}{\partial \mathbf{x}} \right)^{T}d\mathbf{x}

例:y = \mathbf{x}^{T} \mathbf{x}
\begin{eqnarray*} dy &=& d \left( \mathbf{x}^{T} \right)\mathbf{x} + \mathbf{x}^{T} d\mathbf{x} \\ &=& \left(d \mathbf{x}\right)^{T} \mathbf{x} + \mathbf{x}^{T} d\mathbf{x} \\ &=& \mathbf{x}^{T} d\mathbf{x} + \mathbf{x}^{T} d\mathbf{x} \\ &=& 2\mathbf{x}^{T} d\mathbf{x} \end{eqnarray*}
所以,根据导数与微分的联系:
\frac{\partial \mathbf{x}^{T} \mathbf{x}}{\partial \mathbf{x}} = 2 \mathbf{x}

4.4 标量对多个向量的链式求导法则

若标量z 和向量 \mathbf{x ,y}之间的依赖关系为:\mathbf{x} \rightarrow \mathbf{y} \rightarrow z ,则:
\frac{\partial z}{\partial \mathbf{x}} = \left( \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \right)^{T}\frac{\partial z}{\partial \mathbf{y}}
推广到多个向量的情况,\mathbf{y}_{1} \rightarrow \mathbf{y}_{2} \rightarrow \cdots \mathbf{y}_{n} \rightarrow z ,则有:
\frac{\partial z}{\partial \mathbf{y}_{1}} = \left( \frac{\partial \mathbf{y}_{n}}{\partial \mathbf{y}_{n-1}} \frac{\partial \mathbf{y}_{n-1}}{\partial \mathbf{y}_{n-2}} \cdots \frac{\partial \mathbf{y}_{2}}{\partial \mathbf{y}_{1}}\right)^{T}\frac{\partial z}{\partial \mathbf{y}_{n}}

5. 标量对矩阵求导

已知:
y = f(X)
求:
\frac{\partial y} {\partial X} = ?

5.1 定义法求导

与标量对向量求导类似,标量对矩阵里的每个分量分别求导,最后把求导的结果排列在一起,用一个矩阵表示而已。


例:y = \mathbf{a}^{T}X\mathbf{b} ,求 \frac{\partial y}{\partial X}

先对矩阵X的任意一个位置的X_{ij}求导:
\frac{\partial \mathbf{a}^{T}X\mathbf{b}}{\partial X_{ij}} = \frac{\partial \sum_{p=1}^{m}\sum_{q}^{n}a_{p}X_{pq}b_{q}}{\partial X_{ij}} = \frac{\partial a_{i}X_{ij}b_{j}}{\partial X_{ij}} = a_{i}b_{j}
将所有位置求导结果排成m \times n矩阵,得:
\frac{\partial \mathbf{a}^{T}X\mathbf{b}}{\partial X} = \mathbf{ab}^{T}


5.2 通过矩阵微分求导

一元微积分中的导数(标量对标量的导数)与微分之间的关系:
df=f^{\prime}(x)dx
多元微积分中的梯度(标量对向量的导数)与微分之间的关系:
df=\sum_{i=1}^{n}\frac{\partial f}{\partial x_{i}}dx_{i} = \frac{\partial f}{\partial \mathbf{x}}^{T}d\mathbf{x}
矩阵导数与微分之间的关系:
\color{#c63c26}{df=\sum_{i=1}^{m} \sum_{j=1}^{n} \frac{\partial f}{\partial X_{ij}}dX_{ij} = \text{tr}\left(\frac{\partial f}{\partial X}^{T}dX \right)}
利用导数与微分,以及迹技巧,可以求得标量函数f 对于矩阵 X 的导数:

  • 对标量函数 f 求微分,需用到矩阵微分运算法则;
  • 使用迹技巧,对 df 套上迹,再将其它项移至dX 左侧;
  • 对照导数与微分之间的联系,可求得\frac{\partial f}{\partial X}

注:标量对矩阵的求导不能随意沿用标量的链式求导法则。

5.3 矩阵微分运算法则

矩阵加减法 法则 示例
矩阵加减法 d(X \pm Y) = dX \pm dY
矩阵乘法 d(XY) = (dX)Y + X(dY)
矩阵转置 d(X^{T}) = (dX)^{T}
矩阵的迹 d\text{tr}(X) = \text{tr}(dX)
矩阵的逆 \color{#c63c26}{dX^{-1} = -X^{-1}dXX^{-1}}
行列式 d| X | = \text{tr}(X^{\#}dX) X^{\#}X的伴随矩阵
逐元素相乘 d(X \odot Y) = dX \odot Y + X \odot dY
逐元素函数 d \sigma(X) = \sigma^{\prime}(X) \odot dX d\text{sin}(X) = \text{cos}(X) \odot dX

5.4 迹技巧(trace trick)

运算 法则 备注
标量套上迹 a=\text{tr}(a)
转置 \text{tr}(A^{T}) = \text{tr}(A)
线性 \text{tr}(A \pm B) = \text{tr}(A) \pm \text{B}
矩阵乘法交换 \text{tr}(AB) = \text{tr}(BA) AB^{T}维度相同,两侧都等于\sum_{ij}A_{ij}B_{ji}
矩阵乘法/逐元乘法交换 \text{tr}(A^{T}(B \odot C)) = \text{tr}((A \odot B)^{T}C) A,B,C尺寸相同,两侧都等于\sum_{ij}A_{ij}B_{ij}C_{ij}

5.5 标量对多个矩阵的链式求导法则

假设有这样的依赖关系:X \rightarrow Y \rightarrow z ,很难给出矩阵基于矩阵整体的链式求导法则,可以给出关于X 中某一标量的链式求导:
\frac{\partial z}{\partial X_{ij}} = \sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial X_{ij}} = tr \left( \left( \frac{\partial z}{\partial \mathbf{Y}} \right)^{T} \frac{\partial \mathbf{Y}}{\partial \mathbf{X}_{ij}} \right)

5.6 计算示例

例1:f=\mathbf{a}^{T}X\mathbf{b} ,求\frac{\partial f}{\partial X} 。其中\mathbf{a}m \times 1 列向量,Xm \times n 矩阵,\mathbf{b}n \times 1 列向量。

Step1: 使用矩阵乘法法则求微分:
df = d\mathbf{a}^{T}X\mathbf{b} + \mathbf{a}^{T}dX\mathbf{b} + \mathbf{a}^{T}Xd\mathbf{b} = \mathbf{a}^{T}dX\mathbf{b}
这里因为\mathbf{a}, \mathbf{b}是常量,所以d\mathbf{a}=0,d\mathbf{b}=0

Step2: 套上迹,并做矩阵乘法交换:
df = \text{tr}(\mathbf{a}^{T}dX\mathbf{b}) = \text{tr}(\mathbf{b}\mathbf{a}^{T}dX) = \text{tr}\left((\mathbf{a}\mathbf{b}^{T})^{T}dX \right)

Step3:对照导数与微分之间的联系:
\frac{\partial f}{\partial X} = \mathbf{a}\mathbf{b}^{T}


例2:f=\mathbf{a}^{T} \text{exp}(X \mathbf{b}),求\frac{\partial f}{\partial X}

Step1: 使用矩阵乘法法则求微分:
df = \mathbf{a}^{T} \left(\text{exp}(X \mathbf{b}) \odot (dX \mathbf{b}) \right)
Step2: 套上迹,并做矩阵乘法交换:
\begin{eqnarray*} df &=& \text{tr} \left( \mathbf{a}^{T} \left(\text{exp}(X \mathbf{b}) \odot (dX \mathbf{b}) \right) \right) \\ &=& \text{tr} \left( \left( \mathbf{a} \odot \text{exp}(X \mathbf{b}) \right)^{T} dX \mathbf{b} \right) \\ &=& \text{tr} \left( \mathbf{b} \left( \mathbf{a} \odot \text{exp}(X \mathbf{b}) \right)^{T} dX \right) \\ &=& \text{tr} \left( \left( \left( \mathbf{a} \odot \text{exp}(X \mathbf{b}) \right)\mathbf{b}^{T} \right)^{T} dX \right) \end{eqnarray*}
Step3:对照导数与微分之间的联系:
\frac{\partial f}{\partial X} = \left( \mathbf{a} \odot \text{exp}(X \mathbf{b}) \right)\mathbf{b}^{T}


例3【线性回归】l=\left\| X \mathbf{w - y} \right\|^{2},求\mathbf{w} 的最小二乘估计。其中\mathbf{y}m \times 1 列向量,Xm \times n矩阵,\mathbf{w}n \times 1 列向量,l是标量。

Step1: 将向量模平方改成向量与内积形式:
l = \left( X \mathbf{w - y} \right)^{T}\left( X \mathbf{w - y} \right)
Step1: 使用矩阵乘法法则求微分:
\begin{eqnarray*} dl &=& \left( X d\mathbf{w} \right)^{T} \left( X \mathbf{w - y} \right) + \left( X \mathbf{w - y} \right)^{T} \left( X d\mathbf{w} \right) \\ &=& 2\left( X \mathbf{w - y} \right)^{T} \left( X d\mathbf{w} \right) \\ \\ &\because & X d\mathbf{w}\space X \mathbf{w - y} \space \text{are coloum vector} \\ &\therefore & \left( X d\mathbf{w} \right)^{T} \left( X \mathbf{w - y} \right) = \left( X \mathbf{w - y} \right)^{T} \left( X d\mathbf{w} \right) \end{eqnarray*}
Step2: 套上迹,并做矩阵乘法交换:
dl = \text{tr} \left( \left(2X^{T} \left(X \mathbf{w - y} \right)\right)^{T}d\mathbf{w} \right)
Step3:对照导数与微分之间的联系:
\frac{\partial l}{\partial \mathbf{w}} = 2X^{T} \left(X \mathbf{w - y} \right)
Step3:求\mathbf{w}的最小二乘估计
\frac{\partial l}{\partial \mathbf{w}} = 2X^{T} \left(X \mathbf{w - y} \right) = 0\\ \mathbf{w} = (X^{T}X)^{-1}X^{T}\mathbf{y}

6. 向量对向量求导

向量对向量的求导比较麻烦,m 为列向量\mathbf{y}n 维列向量\mathbf{x} 求导,那么一共有mn 个标量对标量的求导。

分子布局(numerator layout):

求导结果矩阵的第一个维度以分子为准,结果是一个m \times n矩阵,一般叫作雅克比矩阵

分母布局(denominator layout):

求导结果矩阵的第一个维度以分母为准,结果是一个n \times m矩阵,一般叫作梯度矩阵

对于机器学习算法原理中的推导,究竟是采用什么布局一般是隐含的,需自己推导。本文以分子布局的雅克比矩阵为主。

6.1 定义法求导

例: \mathbf{ y } = A \mathbf{ x },其中An \times m 的矩阵,\mathbf{x,y} 分别是m,n 维例向量。

Step1: 先求\mathbf{y} 的第i 个分量对\mathbf{x} 的第j 个分量的导数:
\frac{\partial A_{i} \mathbf{x}}{\partial \mathbf{x}_{j}} = \frac{\partial A_{ij} x_{j}}{\partial \mathbf{x}_{j}} = A_{ij}
Step2: 将每个标量求导结果排列成矩阵,这里用分子布局:
\frac{\partial A \mathbf{x}}{\partial \mathbf{x}_{j}} = A

6.2 向量对向量求导的链式法则

若向量之间有这样的依赖关系:\mathbf{x} \rightarrow \mathbf{y} \rightarrow \mathbf{z} ,则有下面的链式求导法则:
\frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}} \frac{\partial \mathbf{y}}{\partial \mathbf{x}}

7. 矩阵对矩阵求导

7.1 矩阵对矩阵求导定义

\frac{\partial F}{\partial X}F:p\times qX:m \times n 矩阵F中的pq 个元素要分别对矩阵 X 中的mn 个元素求导,那么求导结果一共会有mnpq 个元素。求导结果的排列有很多种。这里只介绍目前主流的做法。

目前主流的矩阵对矩阵求导定义是对矩阵先做向量化,然后再使用向量对向量的求导。而这里的向量化一般是使用列向量化。也就是说,现在我们的矩阵对矩阵求导可以表示为:
\frac{\partial F}{\partial X} = \frac{\partial vec \left(F \right)}{\partial vec \left(X \right)}
vec(F) 的维度是pq \times 1 列向量,vec(X)的维度是mn \times 1 列向量。结果使用分母布局,得到一个 \color{#c63c26}{mn \times pq}的矩阵。

7.2 微分求导法

利用导数与微分的联系:
vec(dF) = \frac{\partial F}{\partial X}^{T} vec(dX)
求解步骤:

  1. 使用矩阵微分运算法则对矩阵F 求微分;
  2. 做向量化并使用迹技巧将其它项交换至vec(dX)的左侧;
  3. 根据导数与微分关系,得到矩阵对矩阵的微分结果。

7.3 矩阵向量化的运算法则

性质 法则
线性性质 vec(A+B) = vec(A) + vec(B)
矩阵乘法 vec(AXB) = \left( B^{T} \otimes A \right)vec(X)
矩阵转置 vec(A^{T}) = K_{mn}vce(A)
逐元素乘法 vec(A \odot X) = diag(A) vec(X)

注:

  1. \otimes :克罗内克(Kronecker)积,A(m \times n)B(p \times q) 的克罗内克积是 A \otimes B = [A_{ij}B](mp \times nq) ;

  2. K_{mn}:交换矩阵。若vec(A)mn \times1 的列向量,则K_{mn}(mn \times mn),将按列优先的向量化变为按行优先的向量化;

  3. diag(A)(mn \times mn) 是用A 的元素(列优先)排成的对角阵。

7.4 克罗内克积运算法则

  1. \left( A \otimes B \right)^{T} = A^{T} \otimes B^{T}
  2. vec(\mathbf{ab}^{T}) = \mathbf{b} \otimes \mathbf{a}
  3. \left( A \otimes B \right) \left( C \otimes D \right) = AC \otimes BD
  4. K_{mn} = K_{nm}^{T}, \quad K_{mn}K_{nm} = I

7.5 计算实例

参见矩阵求导术(下)

参考

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