-矩阵求导-

一、为什么需要矩阵求导

  • 参数的向量化
    向量化会使代码、式子更加简洁;
    使用向量化代替for循环,向量化能够加速你的代码;
  • 求导在优化算法中的广泛应用
    优化算法需要反向传播,需要对参数矩阵进行求导

二、向量函数与矩阵求导初印象

  • 标量函数:输出为标量的函数
    f ( x ) = x 2 , R → R f(x)=x^2,R \rightarrow R f(x)=x2,RR
    .
    f ( x ) = x 1 2 + x 2 2 , R 2 → R f(x)=x_1^2+x_2^2,R^2 \rightarrow R f(x)=x12+x22,R2R
  • 向量函数:输出为向量(矩阵)
    f ( x ) = [ f 1 ( x ) = x f 2 ( x ) = x 2 ] , R → R 2 f(x)= \begin{bmatrix} f_1(x)=x \\ f_2(x)=x^2 \\ \end{bmatrix},R \rightarrow R^2 f(x)=[f1(x)=xf2(x)=x2],RR2
    .
    f ( x ) = [ f 11 ( x ) = x f 12 ( x ) = x 2 f 21 ( x ) = x 3 f 22 ( x ) = x 4 ] , R → R 2 × 2 f(x)= \begin{bmatrix} f_{11}(x)=x&&f_{12}(x)=x^2 \\f_{21}(x)=x^3&&f_{22}(x)=x^4 \\ \end{bmatrix},R \rightarrow R^{2 \times 2} f(x)=[f11(x)=xf21(x)=x3f12(x)=x2f22(x)=x4],RR2×2

输入 x x x可以是标量、向量、矩阵,输出 f ( x ) f(x) f(x)也可以是标量、向量、矩阵。讨论的问题是 d f ( x ) d x = ? \frac{df(x)}{dx}=? dxdf(x)=?

矩阵求导主要讨论的是【输入 x x x是标量、向量】和【输出 f ( x ) f(x) f(x)是标量、向量】组合在一起的 4 4 4种情况。

矩阵求导的本质
d A d B \frac{dA}{dB} dBdA:矩阵 A A A中每个元素对矩阵 B B B中的每个元素求导。

从求导后的个数看矩阵求导本质:

  • A : 1 × 1 、 B : 1 × 1 A:1 \times1、B:1 \times1 A:1×1B:1×1
    d A d B : 1 × 1 \frac{dA}{dB}:1 \times1 dBdA1×1

  • A : 1 × p 、 B : 1 × n A:1 \times p、B:1 \times n A:1×pB:1×n
    d A d B : p × n \frac{dA}{dB}:p \times n dBdAp×n(排列组合一下)

  • A : q × p 、 B : m × n A:q \times p、B:m \times n A:q×pB:m×n
    d A d B : p × q × m × n \frac{dA}{dB}:p \times q\times m \times n dBdAp×q×m×n

三、求导秘术:YX拉伸

秘术口诀 { 1 、标量不变、向量拉伸 2 、前面 ( Y ) 横向拉,后面 ( X ) 纵向拉 秘术口诀\begin{cases}\color{RED}{1、标量不变、向量拉伸} \\\color{RED}{2、前面(Y)横向拉,后面(X)纵向拉} \\ \end{cases} 秘术口诀{1、标量不变、向量拉伸2、前面(Y)横向拉,后面(X)纵向拉

例1:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是标量函数, f ( x ) = f ( x 1 , x 2 , … … , x n ) f(x)=f(x_1,x_2,……,x_n) f(x)=f(x1,x2,……,xn)
  • x x x是列向量

这里的 f ( x ) f(x) f(x)就是口诀里的Y,它是标量不变且不用拉伸; x x x是向量,需要拉伸,根据第二条口诀要纵向拉伸。
所以 f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 … … ∂ f ( x ) ∂ x n ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f(x)}{\partial x_1} \\\\ \frac{\partial f(x)}{\partial x_2} \\ …… \\ \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} dxf(x)= x1f(x)x2f(x)……xnf(x)

实际拉伸就是将多元函数的偏导写在一个列向量里。


例2:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是向量函数, f ( x ) = [ f 1 ( x ) f 2 ( x ) … … f n ( x ) ] f(x)=\begin{bmatrix} f_1(x) \\ \\ f_2(x) \\ \\……\\ \\f_n(x) \end{bmatrix} f(x)= f1(x)f2(x)……fn(x)
  • x x x是标量

这里的 f ( x ) f(x) f(x)就是口诀里的Y,它是向量需要拉伸,横向拉; x x x是标量不变且不用拉伸。
所以 f ( x ) d x = [ ∂ f 1 ( x ) ∂ x ∂ f 2 ( x ) ∂ x … … ∂ f n ( x ) ∂ x ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f_1(x)}{\partial x} & \frac{\partial f_2(x)}{\partial x} & …… & \frac{\partial f_n(x)}{\partial x} \end{bmatrix} dxf(x)=[xf1(x)xf2(x)……xfn(x)]


例3:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是向量函数, f ( x ) = [ f 1 ( x ) f 2 ( x ) … … f n ( x ) ] f(x)=\begin{bmatrix} f_1(x) \\ \\ f_2(x) \\ \\……\\ \\f_n(x) \end{bmatrix} f(x)= f1(x)f2(x)……fn(x)
  • x x x是列向量

f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 … ∂ f ( x ) ∂ x n ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f(x)}{\partial x_1} \\\\ \frac{\partial f(x)}{\partial x_2} \\ … \\ \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} dxf(x)= x1f(x)x2f(x)xnf(x) = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 1 … ∂ f n ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ∂ f 2 ( x ) ∂ x 2 … ∂ f n ( x ) ∂ x 2 … … … … ∂ f 1 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x n … ∂ f n ( x ) ∂ x n ] \begin{bmatrix} \frac{\partial f_1(x)}{\partial x_1}&&\frac{\partial f_2(x)}{\partial x_1} &&…\frac{\partial f_n(x)}{\partial x_1}\\\\ \frac{\partial f_1(x)}{\partial x_2} && \frac{\partial f_2(x)}{\partial x_2}&&… \frac{\partial f_n(x)}{\partial x_2} \\ …&&…&&…… \\ \\ \frac{\partial f_11(x)}{\partial x_n}&&\frac{\partial f_2(x)}{\partial x_n}&&…\frac{\partial f_n(x)}{\partial x_n} \end{bmatrix} x1f1(x)x2f1(x)xnf11(x)x1f2(x)x2f2(x)xnf2(x)x1fn(x)x2fn(x)……xnfn(x)

四、常见矩阵求导公式举例

  1. f ( x ) = A T ⋅ X f(x)=A^T\cdot X f(x)=ATX A = [ a 1 a 2 … a n ] A=\begin{bmatrix} a_1 \\ a_2 \\…\\a_n \end{bmatrix} A= a1a2an , X = [ x 1 x 2 … x n ] X=\begin{bmatrix} x_1 \\ x_2 \\…\\x_n \end{bmatrix} X= x1x2xn
    .
    f ( x ) f(x) f(x)是标量, X X X是向量,所以:
    在这里插入图片描述
    f ( x ) = A T ⋅ X = X T ⋅ A = ∑ i = 1 n a i x i \color {red} {f(x)=A^T\cdot X=X^T\cdot A=\sum\limits_{i=1}^n a_ix_i} f(x)=ATX=XTA=i=1naixi
    d   A T ⋅ X d X = d   X T ⋅ A d X = A \color {red} {\frac{d\ A^T\cdot X}{dX}=\frac{d\ X^T\cdot A}{dX}=A} dXd ATX=dXd XTA=A

2. f ( X ) = X T ⋅ A ⋅ X f(X)=X^T\cdot A\cdot X f(X)=XTAX , X = [ x 1 x 2 … x n ] X=\begin{bmatrix} x_1 \\ x_2 \\…\\x_n \end{bmatrix} X= x1x2xn , A = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … a n 1 a n 1 … a n n ] A=\begin{bmatrix} a_{11} & a_{12} & …a_{1n}\\ a_{21} & a_{22} & …a_{2n}\\…&…&…\\a_{n1}& a_{n1}&…a_{nn} \end{bmatrix} A= a11a21an1a12a22an1a1na2nann .
.
f ( X ) = ∑ i = 1 n ∑ j = 1 n a i j x i x j f(X)=\sum\limits_{i=1}^n \sum\limits_{j=1}^n a_{ij}x_ix_j f(X)=i=1nj=1naijxixj是标量,X是向量。
在这里插入图片描述

d X T ⋅ A ⋅ X d X = ( A + A T ) ⋅ X \color {red} {\frac{d X^T\cdot A\cdot X}{dX}=(A+A^T) \cdot X} dXdXTAX=(A+AT)X

五、求导细节补充

分母布局和分子布局

  • 分母布局:YX拉伸术
    口诀一致,其实就是Y横向拉伸,X纵向拉伸
  • 分子布局:XY拉伸术
    口诀一致,其实就是X横向拉伸,Y纵向拉伸

这两个拉伸求导后元素排列不同,通常 (分母布局)T=(分子布局),互为转置关系。

如下图的 f ( X ) = X T X f(X)=X^TX f(X)=XTX的例子:
在这里插入图片描述

补充公式:(分母布局)

U = [ u 1 ( x ) u 2 ( x ) … u n ( x ) ] n × 1 U=\begin{bmatrix} u_1(x) \\ u_2(x) \\…\\u_n(x) \end{bmatrix}_{n\times1} U= u1(x)u2(x)un(x) n×1, V = [ v 1 ( x ) v 2 ( x ) … v n ( x ) ] n × 1 V=\begin{bmatrix} v_1(x) \\ v_2(x) \\…\\v_n(x) \end{bmatrix}_{n\times1} V= v1(x)v2(x)vn(x) n×1, X = [ x 1 ( x ) x 2 ( x ) … x n ( x ) ] n × 1 X=\begin{bmatrix} x_1(x) \\ x_2(x) \\…\\x_n(x) \end{bmatrix}_{n\times1} X= x1(x)x2(x)xn(x) n×1

  1. 矩阵求导的乘法公式:
    d   V T U d X = ∂ U ∂ X V + ∂ V ∂ X U \color {red} {\frac{d\ V^T U}{d X}=\frac{∂U}{∂X}V+\frac{∂V}{∂X}U} dXd VTU=XUV+XVU
  2. 矩阵的加法公式:
    d   V + U d X = d U d X + d V d X \color {red} {\frac{d\ V +U}{d X}=\frac{dU}{dX}+\frac{dV}{dX}} dXd V+U=dXdU+dXdV

电子书查阅
可以通过这个电子书查公式
目录导航: D e r i v a t i v e s − > D e r i v a t i v e s   o f   M a t r i c e s , V e c t o r s   a n d   S c a l a r   F o r m s Derivatives->Derivatives\ of\ Matrices, Vectors\ and\ Scalar\ Forms Derivatives>Derivatives of Matrices,Vectors and Scalar Forms
公式中 a a a表示标量,a表示列向量, A A A表示矩阵

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值