矩阵向量求导


现在CSDN使用的是KaTeX(latex的渲染器),不支持align,但可以用aligned达到同样的目的,还有multiple tag:\tag{1}, \tag{2}也不支持!!!

一.定义和所有求导类型

1.1 定义
1.2 分布布局的介绍

矩阵、向量求导结果的分布布局有2种:分子布局和分母布局,两者互为转置

1.2.1 分子布局

求导结果的第一维度与分子同型,第二维度是分母类型的转置。

分子布局的求导类型包括:标量对标量、向量对标量、矩阵对标量、向量对向量求导(一般)

1.2.2 分母布局

与分子布局相反,求导结果的第一维度与分母同型,第二维度是分子类型的转置。

分子布局的求导类型包括:标量对向量、标量对矩阵

1.3 所有的求导类型

共9种,分别是:标量对标量、向量对标量、矩阵对标量

​ 标量对向量、向量对向量、矩阵对向量#

​ 标量对矩阵、向量对矩阵#、矩阵对矩阵#

其中,加#的三种单独讨论

二.对标量的求导

2.1 标量对标量的求导

定义:
R → R R→R RR
同高等数学,包括一元函数的微分、求导;多元函数的全微分、求偏导、求导、链式法则

2.2 向量对标量的求导

2.2.1 总的思路

y ⃗ m × 1 = [ y 1 y 2 ⋮ y n − 1 y n ] , 其 中 , y i = f ( x ) , f 是 一 个 实 值 函 数 : R → R , 求 ∂ y ⃗ ∂ x 求 导 思 路 为 : y ⃗ 中 的 每 个 元 素 分 别 对 x 进 行 求 导 求 导 结 果 采 用 分 子 布 局 , 结 果 为 : ∂ y ⃗ ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n − 1 ∂ x ∂ y n ∂ x ] \vec y_{m\times1} = \begin{bmatrix} y_1\\ y_2\\ \vdots\\ y_{n-1}\\y_{n} \end{bmatrix},\quad 其中,y_i = f(x),\quad f是一个实值函数:R→R,\quad 求 \frac {\partial \vec y}{\partial x}\\ 求导思路为:\vec y中的每个元素分别对x进行求导\\ 求导结果采用分子布局,结果为: \frac {\partial \vec y}{\partial x} = \begin{bmatrix} \frac {\partial y_1}{\partial x}\\ \frac {\partial y_2}{\partial x}\\ \vdots\\ \frac {\partial y_{n-1}}{\partial x}\\ \frac {\partial y_n}{\partial x} \end{bmatrix} y m×1=y1y2yn1yn,yi=f(x),fRR,xy :y xxy =xy1xy2xyn1xyn
可以看出,求导结果仍是一个向量,且由于采用分子布局,所以向量的维度与分子的维度是一致的

2.3 矩阵对标量的求导

2.3.1 总的思路
Y = ( y i j ) m × n , 其 中 , y i = f ( x ) , f 是 一 个 实 值 函 数 : R → R , 求 ∂ Y ∂ x 求 导 思 路 为 : Y 中 的 每 个 元 素 分 别 对 x 进 行 求 导 求 导 结 果 采 用 分 子 布 局 , 结 果 为 : ∂ Y ∂ x = ( ∂ y 11 ∂ x ∂ y 12 ∂ x … ∂ y 1 n ∂ x ∂ y 21 ∂ x ∂ y 22 ∂ x … ∂ y 2 n ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y m 1 ∂ x ∂ y m 2 ∂ x … ∂ y m n ∂ x ) m × n \mathbf Y = (y_{ij})_{m \times n},\quad 其中,y_i = f(x),\quad f是一个实值函数:R→R,\quad 求 \frac {\partial \mathbf Y}{\partial x}\\ 求导思路为:\mathbf Y中的每个元素分别对x进行求导\\ 求导结果采用分子布局,结果为: \frac{\partial \mathbf{Y}}{\partial x} = \left( \begin{array}{ccc} \frac{\partial y_{11}}{\partial x}& \frac{\partial y_{12}}{\partial x}& \ldots & \frac{\partial y_{1n}}{\partial x}\\ \frac{\partial y_{21}}{\partial x}& \frac{\partial y_{22}}{\partial x} & \ldots & \frac{\partial y_{2n}}{\partial x}\\ \vdots& \vdots & \ddots & \vdots \\ \frac{\partial y_{m1}}{\partial x}& \frac{\partial y_{m2}}{\partial x} & \ldots & \frac{\partial y_{mn}}{\partial x} \end{array} \right)_{m \times n} Y=(yij)m×n,yi=f(x),fRR,xY:YxxY=xy11xy21xym1xy12xy22xym2xy1nxy2nxymnm×n

求导的结果矩阵与Y的维度是一致的,均为m*n

三.标量对向量、矩阵的求导

3.1.标量对向量的求导

3.1.1 总的思路

最简单的原理介绍
x ⃗ n × 1 = [ x 1 x 2 ⋮ x n − 1 x n ] , 标 量 y = f ( x ⃗ ) , f 是 一 个 实 值 函 数 : R n → R , 求 ∂ y ∂ x ⃗ 求 导 结 果 采 用 分 母 布 局 , 结 果 为 : ∂ y ∂ x ⃗ = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋮ ∂ y ∂ x n − 1 ∂ y ∂ x n ] \vec x_{n\times1} = \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_{n}\end{bmatrix},\quad 标量y = f(\vec x),\quad f是一个实值函数:R^n→R,\quad 求 \frac {\partial y}{\partial \vec x}\\ 求导结果采用分母布局,结果为:\frac {\partial y}{\partial \vec x} = \begin{bmatrix} \frac {\partial y}{\partial x_1}\\ \frac {\partial y}{\partial x_2}\\ \vdots\\ \frac {\partial y}{\partial x_{n-1}}\\ \frac {\partial y}{\partial x_{n}} \end{bmatrix} x n×1=x1x2xn1xn,y=f(x ),fRnR,x yx y=x1yx2yxn1yxny

使用时,求解方法为定义法或者微分法(推荐)

  1. 基于微分法的求导公式:

d y = t r ( ( ∂ y ∂ x ⃗ ) T d x ⃗ ) , 从 中 可 求 出 ∂ y ∂ x ⃗ dy= tr((\frac{\partial y}{\partial \vec{x}})^Td\vec{x}),\quad 从中可求出\frac {\partial y}{\partial \vec x} dy=tr((x y)Tdx ),x y

  1. 定义法的原理:

​ 先分解,求单独一项
∂ y ∂ x i \frac {\partial y}{\partial x_i} xiy
​ 再根据分母布局,推广至
∂ y ∂ x ⃗ \frac {\partial y}{\partial \vec x} x y

3.1.2 常见题型(结论)及其证明

1
x ⃗ n × 1 、 a ⃗ n × 1 , y = a ⃗ T x ⃗ , ∂ y ∂ x ⃗ = a ⃗ \vec x_{n \times 1}、\vec a_{n \times 1}\quad, y = \vec a^T \vec x, \quad \frac {\partial y}{\partial \vec x} = \vec a x n×1a n×1,y=a Tx x y=a
2
y = x ⃗ T a ⃗ , ∂ y ∂ x ⃗ = a ⃗ T y = \vec x^T \vec a , \quad \frac {\partial y}{\partial \vec x} = \vec a^T y=x Ta x y=a T
3
y = ∂ x ⃗ T x ⃗ ∂ x ⃗ , ∂ y ∂ x ⃗ = 2 x ⃗ y = \frac{\partial \vec{x}^T\vec{x}}{\partial \vec{x}},\quad \frac {\partial y}{\partial \vec x} =2\vec{x} y=x x Tx ,x y=2x
4 虽然有矩阵成分,但是仍是标量对向量求导
x ⃗ n × 1 、 A n × n = ( a i j ) n × n 标 量 y = x ⃗ T A x ⃗ , 求 ∂ y ∂ x ⃗ \vec x_{n \times 1}、\mathbf{A}_{n \times n} = (a_{ij})_{n \times n} \quad 标量y = \vec{x}^T\mathbf{A}\vec{x},\quad 求\frac {\partial y}{\partial \vec x} x n×1An×n=(aij)n×ny=x TAx ,x y
第一种方法:定义法求解

​ 分解:
y ∂ x k = ∂ x ⃗ T A x ⃗ ∂ x k = ∂ ∑ i = 1 n ∑ j = 1 n x i a i j x j ∂ x k = ∑ i = 1 n a i k x i + ∑ j = 1 n a k j x j = [ a 1 k a 2 k ⋯ a n k ] [ x 1 x 2 ⋮ x n − 1 x n ] + [ a k 1 a k 2 ⋯ a k n ] [ x 1 x 2 ⋮ x n − 1 x n ] \frac {y}{\partial x_k} = \frac{\partial \vec{x}^T\mathbf{A}\vec{x}}{\partial x_k} = \frac{\partial \sum\limits_{i=1}^n\sum\limits_{j=1}^n x_i a_{ij} x_j}{\partial x_k} = \sum\limits_{i=1}^n a_{ik}x_i + \sum\limits_{j=1}^n a_{kj}x_j \\ \quad\quad\quad\quad\quad\quad\quad =\begin{bmatrix} a_{1k} & a_{2k} & \cdots & a_{nk} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_n \end{bmatrix} + \begin{bmatrix} a_{k1} & a_{k2} & \cdots & a_{kn} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{n-1}\\ x_n \end{bmatrix} xky=xkx TAx =xki=1nj=1nxiaijxj=i=1naikxi+j=1nakjxj=[a1ka2kank]x1x2xn1xn+[ak1ak2akn]x1x2xn1xn
​ 归纳:
求 导 结 果 的 第 一 部 分 是 矩 阵 A 的 第 k 列 转 置 后 ( 即 A T 的 第 k 行 ) 和 x ⃗ 相 乘 , 第 二 部 分 是 矩 阵 A 的 第 k 行 和 x ⃗ 相 乘 求导结果的第一部分是矩阵A的第k列转置后(即A^T的第k行)和\vec x相乘,第二部分是矩阵A的第k行和\vec x相乘 Ak(ATkx Akx
​ 推广:

​ 根据向量的第k个元素可以表示为前面矩阵的第k行*后面的向量,则:
∂ x ⃗ T A x ⃗ ∂ x ⃗ = A T x ⃗ + A x ⃗ A T x ⃗ ≠ x ⃗ T A T \frac{\partial \vec{x}^T\mathbf{A}\vec{x}}{\partial \vec{x}} = \mathbf{A}^T\vec{x} + \mathbf{A}\vec{x}\\ \mathbf{A}^T\vec{x} ≠ \vec x^T \mathbf A^T x x TAx =ATx +Ax ATx =x TAT

第二种方法:微分法求解

​ 先对等式两边进行微分:
d y = d ( x ⃗ T ) A x ⃗ + x ⃗ T ( d A ) x ⃗ + x ⃗ T A d ( x ⃗ ) = d ( x ⃗ T ) A x ⃗ + x ⃗ T A d ( x ⃗ ) dy = d(\vec x^T) \mathbf A \vec x + \vec x^T(d\mathbf A)\vec x + \vec x^T \mathbf A d(\vec x) = d(\vec x^T) \mathbf A \vec x + \vec x^T \mathbf A d(\vec x) dy=d(x T)Ax +x T(dA)x +x TAd(x )=d(x T)Ax +x TAd(x )
​ 再对等式两边取迹:
d y = t r ( d y ) = t r ( d ( x ⃗ T ) A x ⃗ + x ⃗ T A d ( x ⃗ ) ) = t r ( d ( x ⃗ T ) A x ⃗ ) + t r ( x ⃗ T A d ( x ⃗ ) ) ( 1 ) = t r ( ( d x ⃗ ) T A x ⃗ ) + t r ( x ⃗ T A d ( x ⃗ ) ) ( 2 ) = t r ( x ⃗ T A T d x ⃗ ) + t r ( x ⃗ T A d ( x ⃗ ) ) ( 3 ) = t r ( x ⃗ T ( A T + A ) d ( x ⃗ ) ) \begin{aligned} dy = tr(dy) &= tr(d(\vec x^T) \mathbf A \vec x + \vec x^T \mathbf A d(\vec x)) \\ &= tr(d(\vec x^T) \mathbf A \vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (1)\\ &= tr((d\vec x)^T \mathbf A \vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (2)\\ &= tr(\vec x^T \mathbf A^T d\vec x) + tr(\vec x^T \mathbf A d(\vec x)) \qquad (3)\\ &= tr(\vec x^T(\mathbf A^T + \mathbf A) d(\vec x)) \end{aligned} dy=tr(dy)=tr(d(x T)Ax +x TAd(x ))=tr(d(x T)Ax )+tr(x TAd(x ))(1)=tr((dx )TAx )+tr(x TAd(x ))(2)=tr(x TATdx )+tr(x TAd(x ))(3)=tr(x T(AT+A)d(x ))
​ (1) 是根据矩阵(向量)的迹的加减法:
t r ( A ± B ) = t r ( A ) ± t r ( B ) tr(A±B) = tr(A) ± tr(B) tr(A±B)=tr(A)±tr(B)
​ (2) 是根据转置矩阵(向量)的微分公式:
d ( X T ) = d ( X ) T d(\mathbf X^T) = d(\mathbf X)^T d(XT)=d(X)T
​ (3) 是根据转置矩阵(向量)的迹的性质:
t r ( A ) = t r ( A T ) tr(\mathbf A) = tr(\mathbf A^T) tr(A)=tr(AT)
​ 根据标量对向量的求导公式可以得出
∂ y ∂ x ⃗ = ( x ⃗ T ( A T + A ) ) T = ( A + A T ) x ⃗ = A x ⃗ + A T x ⃗ \frac{\partial y}{\partial \vec x} = (\vec x^T(\mathbf A^T + \mathbf A))^T = (\mathbf A + \mathbf A^T) \vec x = \mathbf A \vec x + \mathbf A^T \vec x x y=(x T(AT+A))T=(A+AT)x =Ax +ATx
结果与定义法是一致的。

3.2 标量对矩阵的求导

3.2.1 总的思路

总的求解方法有三种:

1.定义法

​ 举例:
a ⃗ m × 1 , X m × n = ( x i j ) m × n , b ⃗ n × 1 . y = a ⃗ T X b ⃗ , 求 ∂ y ∂ X \vec a_{m \times 1}, \quad \mathbf X_{m \times n} = (x_{ij})_{m \times n}, \quad \vec b_{n \times 1}.\quad y = \vec a^T \mathbf X \vec b,\quad 求\frac {\partial y}{\partial \mathbf X} a m×1,Xm×n=(xij)m×n,b n×1.y=a TXb ,Xy
​ 首先进行分解:
∂ y ∂ x i j = ∂ a ⃗ T X b ⃗ ∂ x i j = ∂ ( ∑ k = 1 m ∑ l = 1 n a k x k l b l ) ∂ x i j = ∂ a i x i j b j ∂ x i j = a i b j ( 当 k = i , l = j 时 ) \frac{\partial y}{\partial x_{ij}} = \frac{\partial \vec a^T \mathbf X \vec b}{\partial x_{ij}} = \frac{\partial (\sum\limits_{k=1}^m \sum\limits_{l=1}^n a_k x_{kl} b_l)}{\partial x_{ij}} = \frac {\partial a_i x_{ij} b_j}{\partial x_{ij}} = a_i b_j \quad(当k=i,l=j时) xijy=xija TXb =xij(k=1ml=1nakxklbl)=xijaixijbj=aibj(k=il=j)
​ 可以看出,y对X的求导结果的第(i,j)元是向量a的i行,向量b的j列

​ 进行归纳和推广:
∂ y ∂ X = ( ∂ y ∂ x i j ) m × n = a ⃗ b ⃗ T ( 或 者 b ⃗ a ⃗ T ) \frac{\partial y}{\partial \mathbf X} = (\frac{\partial y}{\partial x_{ij}})_{m\times n}= \vec a \vec b^T \quad (或者 \vec b \vec a^T) Xy=(xijy)m×n=a b Tb a T
​ 定义法的局限性:当处理比较复杂的标量时,进行定义分解是比较困难的,且速度慢

2.微分法

微分法的求解基于矩阵(向量)的微分以及标量对矩阵(也可以对向量)的求导公式。

​ 矩阵(向量)的微分:
d ( X Y Z ) = ( d X ) Y Z + X ( d Y ) Z + X Y ( d Z ) d(XYZ) =(dX)YZ + X(dY)Z + XY(dZ) d(XYZ)=(dX)YZ+X(dY)Z+XY(dZ)
​ 一定要注意微分矩阵的顺序,且X、Y或者Z是向量时,公式同上。

​ 标量对矩阵的微分公式
d y = t r ( ( ∂ y ∂ X ) T d X ) , 从 中 可 求 出 ∂ y ∂ X dy= tr((\frac{\partial y}{\partial \mathbf{X}})^Td\mathbf{X}),\quad 从中可求出\frac {\partial y}{\partial \mathbf X} dy=tr((Xy)TdX),Xy
3.链式法则

3.2.2 常见题型(结论)及其证明

a ⃗ m × 1 , X m × n = ( x i j ) m × n , b ⃗ n × 1 . y = a ⃗ T X b ⃗ , 求 ∂ y ∂ X \vec a_{m \times 1}, \quad \mathbf X_{m \times n} = (x_{ij})_{m \times n}, \quad \vec b_{n \times 1}.\quad y = \vec a^T \mathbf X \vec b,\quad 求\frac {\partial y}{\partial \mathbf X} a m×1,Xm×n=(xij)m×n,b n×1.y=a TXb ,Xy
第一种方法:定义法

​ 首先进行分解:
∂ y ∂ x i j = ∂ a ⃗ T X b ⃗ ∂ x i j = ∂ ( ∑ k = 1 m ∑ l = 1 n a k x k l b l ) ∂ x i j = ∂ a i x i j b j ∂ x i j = a i b j ( 当 k = i , l = j 时 ) \frac{\partial y}{\partial x_{ij}} = \frac{\partial \vec a^T \mathbf X \vec b}{\partial x_{ij}} = \frac{\partial (\sum\limits_{k=1}^m \sum\limits_{l=1}^n a_k x_{kl} b_l)}{\partial x_{ij}} = \frac {\partial a_i x_{ij} b_j}{\partial x_{ij}} = a_i b_j \quad(当k=i,l=j时) xijy=xija TXb =xij(k=1ml=1nakxklbl)=xijaixijbj=aibj(k=il=j)
​ 可以看出,y对X的求导结果的第(i,j)元是向量a的i行,向量b的j列

​ 进行归纳和推广:
∂ y ∂ X = ( ∂ y ∂ x i j ) m × n = a ⃗ b ⃗ T ( 或 者 b ⃗ a ⃗ T ) \frac{\partial y}{\partial \mathbf X} = (\frac{\partial y}{\partial x_{ij}})_{m\times n}=\vec a \vec b^T \quad (或者 \vec b \vec a^T) Xy=(xijy)m×n=a b Tb a T
第二种方法:微分法

​ 先求微分:
d y = ( d a ⃗ T ) X b ⃗ + a ⃗ T ( d X ) b ⃗ + a ⃗ T X ( d b ⃗ ) = a ⃗ T ( d X ) b ⃗ 由 于 是 对 矩 阵 X 求 偏 导 , 所 以 向 量 a 、 b 都 相 当 于 常 量 , 微 分 为 0 dy = (d\vec{a}^T)\mathbf{X}\vec{b} + \vec{a}^T(d\mathbf{X})\vec{b} + \vec{a}^T\mathbf{X}(d\vec{b}) = \vec{a}^T(d\mathbf{X})\vec{b} \\ 由于是对矩阵X求偏导,所以向量a、b都相当于常量,微分为0 dy=(da T)Xb +a T(dX)b +a TX(db )=a T(dX)b Xab0

​ 再对等式两边取迹(都是标量,可以直接加迹):
d y = t r ( d y ) = t r ( a ⃗ T ( d X ) b ⃗ ) = t r ( b ⃗ a ⃗ T d X ) dy =tr(dy) = tr(\vec{a}^T(d\mathbf{X})\vec{b}) = tr(\vec{b}\vec{a}^T d\mathbf{X}) dy=tr(dy)=tr(a T(dX)b )=tr(b a TdX)
​ 这里利用了矩阵(向量)的迹交换性质:
t r ( A B ) = t r ( B A ) , 需 要 满 足 A , B T 同 维 度 A 、 B 也 可 以 是 向 量 , 并 且 可 以 把 A 看 做 是 多 个 矩 阵 乘 积 的 结 果 , 则 该 公 式 就 可 应 用 于 多 个 矩 阵 乘 法 的 迹 交 换 tr(AB) = tr(BA), \quad 需要满足A,BT同维度\\A、B也可以是向量,并且可以把A看做是多个矩阵乘积的结果,则该公式就可应用于多个矩阵乘法的迹交换 tr(AB)=tr(BA),A,BTABA
​ 再根据标量对矩阵的微分公式,解出
∂ y ∂ X = ( b ⃗ a ⃗ T ) T = a ⃗ b ⃗ T , b ⃗ a ⃗ T ≠ a ⃗ b ⃗ T \frac {\partial y}{\partial \mathbf X} = (\vec{b}\vec{a}^T)^T = \vec{a}\vec{b}^T,\quad \vec{b}\vec{a}^T ≠ \vec{a}\vec{b}^T Xy=(b a T)T=a b T,b a T=a b T
2.
y = a ⃗ T e x p ( X b ⃗ ) , f = e x p ( ) 是 一 个 逐 元 素 函 数 : R n → R n 则 ∂ y ∂ X = ( a ⊙ e x p ( X b ⃗ ) ) b ⃗ T y = \vec a^T exp(\mathbf X \vec b), \quad f=exp()是一个逐元素函数:R^n→R^n\\ 则\frac {\partial y}{\partial \mathbf X} = (a \odot exp(\mathbf X \vec b))\vec b^T y=a Texp(Xb ),f=exp():RnRnXy=(aexp(Xb ))b T
其中:
⊙ 是 逐 元 素 乘 法 ( 哈 达 马 积 ) 的 符 号 , 定 义 为 : ( A ⊙ B ) i , j = ( A ) i , j ( B ) i , j 要 求 两 矩 阵 ( 向 量 ) 同 型 \odot 是逐元素乘法(哈达马积)的符号,定义为:\\ (A \odot B)_{i,j} = (A)_{i,j}(B)_{i,j}\quad 要求两矩阵(向量)同型 (AB)i,j=(A)i,j(B)i,j

四.迹函数对矩阵求导

类似于微分法:

例题:

y = t r ( B T X T C X B ) , 求 解 ∂ y ∂ X y = tr(\mathbf{B^T X^T C X B}),\quad 求解\frac {\partial y}{\partial \mathbf X} y=tr(BTXTCXB),Xy
​ 先对迹求微分:
根 据 迹 的 微 分 的 性 质 : d t r ( X ) = t r ( d X ) 根据迹的微分的性质: dtr(\mathbf X) = tr(d\mathbf X) dtr(X)=tr(dX)

d y = d t r ( B T X T C X B ) = t r ( d ( B T X T C X B ) ) = t r ( B T ( d X T ) C X B + B T X T C ( d X ) B ) = t r ( B T ( d X ) T C X B ) + t r ( B T X T C ( d X ) B ) = t r ( B T X T C T ( d X ) B ) + t r ( B T X T C ( d X ) B ) ( 1 ) = t r ( B B T X T C T ( d X ) ) + t r ( B B T X T C ( d X ) ) ( 2 ) = t r ( B B T X T ( C T + C ) ( d X ) ) \begin{aligned} dy = dtr(\mathbf{B^T X^T C X B}) &= tr(d(\mathbf{B^T X^T C X B}))\\ &=tr(\mathbf B^T(d\mathbf X^T) \mathbf{C X B} + \mathbf{B^T X^T C}(d\mathbf X) \mathbf B)\\ &=tr(\mathbf B^T(d\mathbf X)^T \mathbf {C X B}) + tr(\mathbf{B^T X^T C}(d\mathbf X) \mathbf B)\\ &=tr(\mathbf {B^T X^T C^T}(d\mathbf X) \mathbf B) + tr(\mathbf{B^T X^T C}(d\mathbf X) \mathbf B) \qquad (1) \\ &=tr(\mathbf{B} \mathbf {B^T X^T C^T}(d\mathbf X)) + tr(\mathbf B \mathbf {B^T X^T C}(d\mathbf X)) \qquad (2)\\ &=tr(\mathbf{B B^T X^T} (\mathbf{C^T + C}) (d\mathbf X)) \end{aligned} dy=dtr(BTXTCXB)=tr(d(BTXTCXB))=tr(BT(dXT)CXB+BTXTC(dX)B)=tr(BT(dX)TCXB)+tr(BTXTC(dX)B)=tr(BTXTCT(dX)B)+tr(BTXTC(dX)B)(1)=tr(BBTXTCT(dX))+tr(BBTXTC(dX))(2)=tr(BBTXT(CT+C)(dX))

​ 其中 (1) 是根据转置矩阵(向量)的迹的性质
t r ( A ) = t r ( A T ) tr(\mathbf A) = tr(\mathbf A^T) tr(A)=tr(AT)
​ (2) 是根据矩阵乘法的迹交换性质
t r ( A B ) = t r ( B A ) , 要 求 A 与 B 的 转 置 是 同 型 的 另 外 可 将 一 个 矩 阵 ( 向 量 ) 看 做 是 多 个 矩 阵 相 乘 , 则 扩 展 到 多 个 矩 阵 ( 向 量 ) 形 式 tr(AB) = tr(BA), \quad 要求A与B的转置是同型的\\ 另外可将一个矩阵(向量)看做是多个矩阵相乘,则扩展到多个矩阵(向量)形式 tr(AB)=tr(BA),AB

​ 所以,根据标量对矩阵的微分公式,解出
∂ y ∂ X = ( B B T X T ( C T + C ) ) T = ( C + C T ) X B B T \frac {\partial y}{\partial \mathbf X} = (\mathbf{B B^T X^T} (\mathbf{C^T + C}))^T = (\mathbf{C + C^T}) \mathbf{X B B^T} Xy=(BBTXT(CT+C))T=(C+CT)XBBT
2.
y = t r ( W T A W ) , ∂ y ∂ W = ( A + A T ) W y = tr(\mathbf{W^T A W}), \quad \frac{\partial y}{\partial \mathbf W} = (\mathbf{A + A^T}) \mathbf W y=tr(WTAW),Wy=(A+AT)W
3.
y = t r ( A B ) , ∂ y ∂ A = B T y = tr(\mathbf{A B}), \quad \frac{\partial y}{\partial \mathbf A} = \mathbf {B^T} y=tr(AB),Ay=BT
4.
y = t r ( A B ) , ∂ y ∂ B = A T y = tr(\mathbf{A B}), \quad \frac{\partial y}{\partial \mathbf B} = \mathbf {A^T} y=tr(AB),By=AT

五.矩阵对矩阵的求导

5.1 定义

X m n 、 Y p q , 则 ∂ Y ∂ X 应 该 有 m n ∗ p q 个 值 , 如 何 排 列 ? \mathbf X_{mn}、 \mathbf Y_{pq},则 \frac{\partial \mathbf Y}{\partial \mathbf X}应该有mn*pq个值,如何排列? XmnYpqXYmnpq

主流定义:

​ 先对Y求微分,再对微分结果(矩阵)做(列)向量化,再使用向量对向量求导

求导法则:
v e c ( d Y ) = ( ∂ Y ∂ X ) T v e c ( d X ) = ( ∂ v e c ( Y ) ∂ v e c ( X ) ) T v e c ( d X ) vec(d\mathbf Y) = (\frac{\partial \mathbf Y}{\partial \mathbf X})^Tvec(d\mathbf X) = (\frac{\partial vec(\mathbf Y)}{\partial vec(\mathbf X)})^T vec(d\mathbf X) vec(dY)=(XY)Tvec(dX)=(vec(X)vec(Y))Tvec(dX)

5.2 例子

Y = A X B , 求 ∂ Y ∂ X \mathbf Y = \mathbf{AXB}, 求 \frac{\partial \mathbf Y}{\partial \mathbf X} Y=AXBXY
先求微分:
d Y = A ( d X ) B d\mathbf Y = \mathbf A(d\mathbf X)\mathbf B dY=A(dX)B
再对微分等式两边向量化:
v e c ( d Y ) = v e c ( A ( d X ) B ) = ( B T ⊗ A ) v e c ( d X ) \begin{aligned} vec(d\mathbf Y) &= vec(\mathbf A(d\mathbf X)\mathbf B) \\ &= (\mathbf B^T ⊗ \mathbf A) vec(d\mathbf X) \end{aligned} vec(dY)=vec(A(dX)B)=(BTA)vec(dX)
​ 等式是根据矩阵向量化的运算法则(矩阵乘法):
v e c ( A X B ) = ( B T ⊗ A ) v e c ( X ) vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X) vec(AXB)=(BTA)vec(X)

套用求导法则:
∂ Y ∂ X = ( B T ⊗ A ) T = ( B ⊗ A T ) \begin{aligned} \frac{\partial \mathbf Y}{\partial \mathbf X} &= (\mathbf B^T ⊗ \mathbf A)^T \\ &= (\mathbf B ⊗ \mathbf A^T) \end{aligned} XY=(BTA)T=(BAT)
​ 等式是根据克罗内可积的运算法则:
( A ⊗ B ) T = A T ⊗ B T (\mathbf A ⊗ \mathbf B)^T = \mathbf A^T ⊗ \mathbf B^T (AB)T=ATBT
2.
Y = A e x p ( B X C ) D , 求 ∂ Y ∂ X \mathbf Y = \mathbf A exp(\mathbf{BXC}) \mathbf D, 求\frac{\partial \mathbf Y}{\partial \mathbf X} Y=Aexp(BXC)DXY
先求微分:
d Y = A [ e x p ( B X C ) ⊙ d ( B d ( X ) C ) ] D d\mathbf Y = \mathbf A [exp(\mathbf{BXC}) \odot d(\mathbf B d(\mathbf X) \mathbf C)] \mathbf D dY=A[exp(BXC)d(Bd(X)C)]D
再对微分等式两边向量化:
v e c ( d Y ) = v e c ( A ⋅ [ e x p ( B X C ) ⊙ ( B d ( X ) C ) ] ⋅ D ) = ( D T ⊗ A ) ⋅ v e c [ e x p ( B X C ) ⊙ ( B d ( X ) C ) ] ( 1 ) = ( D T ⊗ A ) ⋅ d i a g [ e x p ( B X C ) ] ⋅ v e c ( B d ( X ) C ) ( 2 ) = ( D T ⊗ A ) ⋅ d i a g [ e x p ( B X C ) ] ⋅ [ ( C T ⊗ B ) ⋅ v e c ( d X ) ] ( 3 ) = ( D T ⊗ A ) ⋅ d i a g [ e x p ( B X C ) ] ⋅ ( C T ⊗ B ) ⋅ v e c ( d X ) \begin{aligned} vec(d\mathbf Y) &= vec( \mathbf A · [exp(\mathbf{BXC}) \odot (\mathbf B d(\mathbf X) \mathbf C)] · \mathbf D ) \\ &= (\mathbf D^T ⊗ \mathbf A) · vec[exp(\mathbf{BXC}) \odot (\mathbf B d(\mathbf X) \mathbf C)] \qquad\qquad\quad(1)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · vec(\mathbf B d(\mathbf X) \mathbf C) \qquad\qquad(2)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · [(\mathbf C^T ⊗ \mathbf B) · vec(d\mathbf X)] \quad(3)\\ &= (\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · (\mathbf C^T ⊗ \mathbf B) · vec(d\mathbf X) \end{aligned} vec(dY)=vec(A[exp(BXC)(Bd(X)C)]D)=(DTA)vec[exp(BXC)(Bd(X)C)](1)=(DTA)diag[exp(BXC)]vec(Bd(X)C)(2)=(DTA)diag[exp(BXC)][(CTB)vec(dX)](3)=(DTA)diag[exp(BXC)](CTB)vec(dX)
其中:
⋅ 是 矩 阵 乘 法 , ⊙ 是 哈 达 马 乘 积 , ⊗ 是 克 罗 内 克 乘 积 式 子 1 根 据 矩 阵 向 量 化 的 运 算 法 则 ( 矩 阵 乘 法 ) : v e c ( A X B ) = ( B T ⊗ A ) v e c ( X ) 式 子 2 根 据 矩 阵 向 量 化 的 运 算 法 则 ( 逐 元 素 乘 法 ) : v e c ( A ⊙ X ) = d i a g ( X ) ⋅ v e c ( X ) 式 子 3 根 据 矩 阵 向 量 化 的 运 算 法 则 ( 矩 阵 乘 法 ) : v e c ( A X B ) = ( B T ⊗ A ) v e c ( X ) · 是矩阵乘法, \odot 是哈达马乘积, ⊗是克罗内克乘积 \\ 式子1根据 矩阵向量化的运算法则(矩阵乘法): vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X) \\ 式子2根据 矩阵向量化的运算法则(逐元素乘法): vec(\mathbf A \odot \mathbf X) = diag(\mathbf X) · vec(\mathbf X) \\ 式子3根据 矩阵向量化的运算法则(矩阵乘法): vec(\mathbf{AXB}) = (\mathbf B^T ⊗ \mathbf A) vec(\mathbf X) 1vec(AXB)=(BTA)vec(X)2vec(AX)=diag(X)vec(X)3vec(AXB)=(BTA)vec(X)
所以:
∂ Y ∂ X = [ ( D T ⊗ A ) ⋅ d i a g [ e x p ( B X C ) ] ⋅ ( C T ⊗ B ) ] T = ( C T ⊗ B ) T ⋅ d i a g [ e x p ( B X C ) ] ⋅ ( D T ⊗ A ) T = ( C ⊗ B T ) ⋅ d i a g [ e x p ( B X C ) ] ⋅ ( D ⊗ A T ) \begin{aligned} \frac{\partial \mathbf Y}{\partial \mathbf X} &= [(\mathbf D^T ⊗ \mathbf A) · diag[exp(\mathbf{BXC})] · (\mathbf C^T ⊗ \mathbf B)]^T\\ &= (\mathbf C^T ⊗ \mathbf B)^T · diag[exp(\mathbf{BXC})] · (\mathbf D^T ⊗ \mathbf A)^T\\ &= (\mathbf C ⊗ \mathbf B^T) · diag[exp(\mathbf{BXC})] · (\mathbf D ⊗ \mathbf A^T)\\ \end{aligned} XY=[(DTA)diag[exp(BXC)](CTB)]T=(CTB)Tdiag[exp(BXC)](DTA)T=(CBT)diag[exp(BXC)](DAT)
其中:
其 中 d i a g ( A ) m n × m n 是 用 A m n 的 元 素 ( 按 列 优 先 ) 排 成 的 对 角 阵 ( d i a g [ e x p ( B X C ) ] ) T = d i a g [ e x p ( B X C ) ] , 即 对 角 阵 的 转 置 仍 是 自 己 本 身 其中diag(\mathbf A)_{mn×mn}是用\mathbf A_{mn}的元素(按列优先)排成的对角阵\\ (diag[exp(\mathbf{BXC})])^T = diag[exp(\mathbf{BXC})],即对角阵的转置仍是自己本身 diag(A)mn×mnAmn(diag[exp(BXC)])T=diag[exp(BXC)]
3.
Y = X m n B , ∂ Y ∂ X = B ⊗ I m \mathbf Y = \mathbf{X_{mn}B}, \frac{\partial \mathbf Y}{\partial \mathbf X} = \mathbf B ⊗ \mathbf I_{m} Y=XmnBXY=BIm
其中:
利 用 了 公 式 : v e c ( X A ) = ( A T ⊗ I m ) ⋅ v e c ( X ) 利用了公式:vec(\mathbf{XA}) = (\mathbf A^T ⊗ \mathbf I_{m}) · vec(\mathbf X)\\ vec(XA)=(ATIm)vec(X)
4.
Y = A X m n , ∂ Y ∂ X = I n ⊗ A T \mathbf Y = \mathbf{AX_{mn}}, \frac{\partial \mathbf Y}{\partial \mathbf X} = \mathbf I_{n} ⊗ \mathbf A^T Y=AXmnXY=InAT
其中:
利 用 了 公 式 : v e c ( A X ) = ( A T ⊗ I n ) ⋅ v e c ( X ) 利用了公式:vec(\mathbf{AX}) = (\mathbf A^T ⊗ \mathbf I_{n}) · vec(\mathbf X) vec(AX)=(ATIn)vec(X)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值