概述
此笔记学习和整理自刘建平-机器学习中的矩阵向量求导1-4
此篇学习笔记md文档支持Typora检索,可参考
理科生学习笔记制作/markdown+Latex / Typora
md文档下载链接文末
矩阵向量求导
*没有说明的向量都为列向量
一、求导定义与求导布局
1.矩阵向量求导引入
-
标量对标量的求导,如标量y对标量x的求导为 ∂ y ∂ x frac{partial y}{partial x} ∂x∂y
- 一组标量 y i , i = 1 , 2 , . . . , m y_i,i=1,2,...,m yi,i=1,2,...,m来对一个标量x的求导,为 ∂ y i ∂ x , i = 1 , 2 , . . . , m frac{partial y_i}{partial x},i=1,2,...,m ∂x∂yi,i=1,2,...,m
-
向量对标量的求导,就是向量里的每个分量分别对标量的求导
- 维度为m的一个向量y对一个标量x的求导,结果也为一个m维的向量为 ∂ y ∂ x frac{partial y}{partial x} ∂x∂y
-
类似结论也存在与标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导
-
向量矩阵求导本质是多元函数求导,仅仅是把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更简洁
求导的自变量用x表示标量,x表示n维向量,X表示mxn维度的举证,求导的因变量用y表示标量,y表示m维向量,Y表示pxq维度的矩阵
2. 矩阵向量求导定义
自变量因变量 | 标量y | 向量y | 矩阵Y |
---|---|---|---|
标量x | ∂ y ∂ x frac{partial y}{partial x} ∂x∂y | ∂ y ∂ x frac{partial y}{partial x} ∂x∂y | ∂ Y ∂ x frac{partial Y}{partial x} ∂x∂Y |
向量x | ∂ y ∂ x frac{partial y}{partial x} ∂x∂y | ∂ y ∂ x frac{partial y}{partial x} ∂x∂y | ∂ Y ∂ x frac{partial Y}{partial x} ∂x∂Y |
矩阵X | ∂ y ∂ X frac{partial y}{partial X} ∂X∂y | ∂ y ∂ X frac{partial y}{partial X} ∂X∂y | ∂ Y ∂ X frac{partial Y}{partial X} ∂X∂Y |
3. 矩阵向量求导布局
-
目的:为了解决矩阵向量求导的结果不唯一,即在机器学习算法优化过程中,如果行向量或者列向量随便写,那么结果不唯一
-
基本的求导布局:分子布局(numerator layout)和分母布局(denominator layout)
-
分子布局:求导结果的维度以分子为主
e.g 向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x frac{partial y}{partial x} ∂x∂y也是一个m维列向量。
-
分母布局:求导结果的维度以分母为主
e.g 向量 y y y是一个m维的列向量,那么求导结果 ∂ y ∂ x frac{partial y}{partial x} ∂x∂y是一个m维行向量。
-
分子布局和分母布局的结果相差一个转置
e.g 标量y对矩阵X,如果按分母布局,则求导结果的维度和矩阵X的维度mxn是一致的。如果是分子布局,则求导结果的维度为nxm
因此,对于标量对向量或者矩阵求导,向量或者矩阵对标量求导这4种情况,对应的分子布局和分母布局的排列方式已经确定了
-
-
列向量对列向量的求导
e.g m维列向量y对n维列向量x求导
对于这两个向量的求导,一共有m*n个标量对标量的求导。求导结果是排列为一个矩阵。
- 如果是分子布局,则矩阵的第一个维度以分子为准,即结果是一个mxn的矩阵
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ∂ y m ∂ x 2 ⋯ ∂ y m ∂ x n ) frac{partial y}{partial x} = begin{pmatrix} frac{partial y_1}{partial x_1} & frac{partial y_1}{partial x_2} & cdots & frac{partial y_1}{partial x_n} \ frac{partial y_2}{partial x_1} & frac{partial y_2}{partial x_2} & cdots & frac{partial y_2}{partial x_n} \ vdots & vdots & ddots & vdots \ frac{partial y_m}{partial x_1} & frac{partial y_m}{partial x_2} & cdots & frac{partial y_m}{partial x_n} \ end{pmatrix} ∂x∂y=⎝⎜⎜⎜⎜⎛∂x1∂y1∂x1∂y2⋮∂x1∂ym∂x2∂y1∂x2∂y2⋮∂x2∂ym⋯⋯⋱⋯∂xn∂y1∂xn∂y2⋮∂xn∂ym⎠⎟⎟⎟⎟⎞
一般叫做雅克比(Jacobian)矩阵,可用 ∂ y ∂ x T frac{partial y}{partial x^T} ∂xT∂y来定义。
- 如果是分母布局,则求导的结果矩阵的第一维度以分母为准,即结果是一份nxm的矩阵
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n ⋯ ∂ y m ∂ x n ) frac{partial y}{partial x} = begin{pmatrix} 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{pmatrix} ∂x∂y=⎝⎜⎜⎜⎜⎛∂x1∂y1∂x2∂y1⋮∂xn∂y1∂x1∂y2∂x2∂y2⋮∂xn∂y2⋯⋯⋱⋯∂x1∂ym∂x2∂ym⋮∂xn∂ym⎠⎟⎟⎟⎟⎞
一般叫做梯度矩阵,可用 ∂ y T ∂ x frac{partial y^T}{partial x} ∂x∂yT来定义
对于上面5种求导类型,可以各选择一种布局来求导,但是对于某以种类型求导类型,不能同时使用分子布局和分母布局求导
(在机器学习算法原理资料推导中,一般会使用混合布局的思路,即如果是向量或者矩阵对标量求导,则会使用分子布局为准,如果是标量对向量或者是矩阵求导,则以分母布局为准。对于向量对向量的求导,有些分歧)
自变量因变量 标量y 列向量y 矩阵Y 标量x / ∂ y ∂ x frac{partial y}{partial x} ∂x∂y 分子布局:m维列向量(默认);分母布局:m维行向量 ∂ Y ∂ x frac{partial Y}{partial x} ∂x∂Y 分子布局:pxq矩阵(默认);分母布局:qxp矩阵 列向量x ∂ y ∂ x frac{partial y}{partial x} ∂x∂y 分子布局:n维行向量;分母布局:n维列向量(默认) ∂ y ∂ x frac{partial y}{partial x} ∂x∂y 分子布局:mxn雅克比矩阵(默认);分母布局:nxm梯度矩阵 / 矩阵X ∂ y ∂ X frac{partial y}{partial X} ∂X∂y 分子布局:nxm矩阵;分母布局:mxn矩阵(默认) / /
二、矩阵向量求导之定义法
1. 用定义法求解标量对向量求导
-
定义:实际是实值函数对向量的求导。即定义实值函数 f : R n → R f:R^nto R f:Rn→R, 自变量x是n维向量,而输出y是标量。
-
实质:标量(实值函数)对向量里的每个分量分别求导,找到规律,最后把求导的结果排列在一起,按一个向量表示(结果向量)
e.g y = a ⃗ T x ⃗ y=vec{a}^Tvec{x} y=aTx,求解 ∂ a ⃗ T x ⃗ ∂ x ⃗ frac{partial {vec{a}^T vec{x}}}{partial vec{x}} ∂x∂aTx
根据定义,先对 x ⃗ vec{x} x的第i个分量进行求导,这是一个标量对标量的求导,如下:
∂ a ⃗ T x ⃗ ∂ x i = ∂ ∑ j = 1 n a j x j ∂ x i = ∂ a i x i ∂ x i = a i frac{partial vec{a}^Tvec{x}}{partial x_i}=frac{partial sum_{j=1}^{n}a_jx_j}{partial x_i}=frac{partial a_ix_i}{partial x_i}=a_i ∂xi∂aTx=∂xi∂∑j=1najxj=∂xi∂aixi=ai
可见,对向量的第i个分量的求导结果就等于向量 a ⃗ vec{a} a的第i个分量。由于是分母布局,最后所有求导结果的分量组成的是一个n维向量。也就是向量 a ⃗ vec{a} a:
∂ a ⃗ T x ⃗ ∂ x ⃗ = a ⃗ frac{partial{vec{a}^Tvec{x}}}{partial{vec{x}}}=vec{a} ∂x∂aTx=a
同样的思路,可直接得到:
∂ x ⃗ T a ⃗ ∂ x ⃗ = a ⃗ frac{partial{vec{x}^Tvec{a}}}{partial{vec{x}}}=vec{a} ∂x∂xTa=a∂ x ⃗ T x ⃗ ∂ x ⃗ = 2 x ⃗ frac{partial{vec{x}^Tvec{x}}}{partial{vec{x}}}=2vec{x} ∂x∂xTx=2x
e.g y = x ⃗ T A ⃗ x ⃗ y=vec{x}^Tvec{A}vec{x} y=xTAx,求解 ∂ x ⃗ T A ⃗ x ⃗ ∂ x ⃗ frac{partial vec{x}^Tvec{A}vec{x}}{partial vec{x}} ∂x∂xTAx
对 x ⃗ vec{x} x的第k个分量进行求导:
∂ x ⃗ T A ⃗ x ⃗ ∂ x ⃗ k = ∂ ∑ j = 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 frac{partial vec{x}^Tvec{A}vec{x}}{partial vec{x}_k}=frac{partial sum_{j=1}^{n}sum_{j=1}^nx_iA_{ij}x_j}{partial x_k}= sum_{i=1}^nA_{ik}x_i+sum_{j=1}^nA_{kj}x_j ∂xk∂xTAx=∂xk∂∑j=1n∑j=1nxiAijxj=i=1∑nAikxi+j=1∑nAkjxj∂ x T ⃗ A ⃗ x ⃗ ∂ x = A ⃗ T x ⃗ + A ⃗ x ⃗ frac{partial vec{x^T}vec{A}vec{x}}{partial x}=vec{A}^Tvec{x}+vec{A}vec{x} ∂x∂xTAx=ATx+Ax
复杂的实值函数就算求出了任意一个分量的导数,要排列出最终的求导结果仍很麻烦
2. 标量对向量求导的一些基本法则
1)常亮对向量的求导结果为0
2)线性法则:如果
f
,
g
f,g
f,g都是实值函数,
c
1
,
c
2
c_1,c_2
c1,c2为常数,则:
∂
(
c
1
f
(
x
)
+
c
2
g
(
x
)
)
∂
x
=
c
1
∂
f
(
x
)
∂
x
+
c
2
∂
g
(
x
)
∂
x
frac{partial (c_1f(x)+c_2g(x))}{partial x}=c_1frac{partial f(x)}{partial x}+c_2frac{partial g(x)}{partial x}
∂x∂(c1f(x)+c2g(x))=c1∂x∂f(x)+c2∂x∂g(x)
3)乘法法则:如果
f
,
g
f,g
f,g都是实值函数,则:
∂
f
(
x
)
g
(
x
)
∂
x
=
f
(
x
)
∂
g
(
x
)
∂
x
+
∂
g
(
x
)
∂
x
g
(
x
)
frac{partial f(x)g(x)}{partial x}=f(x)frac{partial g(x)}{partial x} + frac{partial g(x)}{partial x}g(x)
∂x∂f(x)g(x)=f(x)∂x∂g(x)+∂x∂g(x)g(x)
*如果不是实值函数,则不能这么使用乘法法则
4)除法法则:如果
f
,
g
f,g
f,g都是实值函数,且
g
(
x
)
≠
0
g(x)neq0
g(x)=0,则:
∂
f
(
x
)
/
g
(
x
)
∂
x
=
1
g
2
(
x
)
(
g
(
x
)
∂
f
(
x
)
∂
x
−
f
(
x
)
∂
g
(
x
)
∂
(
x
)
)
frac{partial f(x)/g(x)}{partial x}=frac{1}{g^2(x)}(g(x)frac{partial f(x)}{partial x}-f(x)frac{partial g(x)}{partial(x)})
∂x∂f(x)/g(x)=g2(x)1(g(x)∂x∂f(x)−f(x)∂(x)∂g(x))
3. 用定义法求解标量对矩阵求导
-
思路同标量对向量的求导类似,只是最后的结果是一个和自变量同型的矩阵
e,g y = a ⃗ T X ⃗ b ⃗ y=vec{a}^Tvec{X}vec{b} y=aTXb,求解 ∂ a ⃗ T X b ⃗ ∂ X frac{partial vec{a}^TXvec{b}}{partial X} ∂X∂aTXb,其中 a ⃗ vec{a} a是m维向量, b ⃗ vec{b} b是n维向量,X是mxn的矩阵
对矩阵X的任意一个位置的 X i j X_{ij} Xij求导,如下:
∂ a ⃗ T X b ⃗ ∂ X i j = ∂ ∑ p = 1 m ∑ q = 1 n a p A p q b q ∂ X i j = ∂ a i A i j b j ∂ X i j = a i b j frac{partial vec{a}^TXvec{b}}{partial X_{ij}}=frac{partial sum_{p=1}^msum_{q=1}^na_pA_{pq}b_q}{partial X_{ij}}=frac{partial a_iA_{ij}b_j}{partial X_{ij}}=a_ib_j ∂Xij∂aTXb=∂Xij∂∑p=1m∑q=1napApqbq=∂Xij∂aiAijbj=aibj
在 ( i . j ) (i.j) (i.j)位置的求导结果是 a ⃗ vec{a} a向量第i个分量和 b ⃗ vec{b} b第j个分量的乘积,将所有的位置的求导结果排列成一个mxn的矩阵,即为 a b T ab^T abT,所以最后的求导结果为:
∂ a ⃗ T X b ⃗ ∂ X = a b T frac{partial vec{a}^TXvec{b}}{partial X}=ab^T ∂X∂aTXb=abT
如果是比较复杂的标量对矩阵求导,比如 y = a ⃗ T e x p ( X b ⃗ ) y=vec{a}^Texp(Xvec{b}) y=aTexp(Xb),对任意标量求导容易,排列起来比较麻烦
4. 用定义法求解向量对向量求导
-
e.g y ⃗ = A x ⃗ vec{y} = Avec{x} y=Ax,其中A为nxm的矩阵。 x ⃗ , y ⃗ vec{x},vec{y} x,y分别为m,n维向量。需要求导 ∂ A x ⃗ ∂ x ⃗ frac{partial Avec{x}}{partial vec{x}} ∂x∂Ax,根据定义,结果应该是一个nxm的矩阵。
先求矩阵的第i行和向量的内积对向量的第j分量求导,用定义法求解如下:
∂ A i x ⃗ ∂ x j = ∂ A i j x j ∂ x j = A i j frac{partial A_ivec{x}}{partial x_j}=frac{partial A_{ij}x_j}{partial x_j}=Aij ∂xj∂Aix=∂xj∂Aijxj=Aij
矩阵A的第i行和向量的内积对向量的第j分量求导的结果就是矩阵A的(i,j)位置的值。排列起来就是一个矩阵,由于是分子布局,所以排列出来的结果是A,而不是 A T A^T AT。
5. 定义矩阵向量求导的局限
对于复杂的求导式子,中间运算会很复杂,求导出的结果排列也会很头疼。
三、矩阵向量求导之微分法
1. 矩阵微分
-
高数中标量的导数和微分: d f = f ′ ( x ) d x df=f'(x)dx df=f′(x)dx,如果是多变量,则微分为:
d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ⃗ ) T d x ⃗ df=sum_{i=1}^{n}frac{partial f}{partial x_i}dx_i=(frac{partial f}{partial{vec x}})^Tdvec{x} df=i=1∑n∂xi∂fdxi=(∂x∂f)Tdx
标量对向量的求导和它的向量微分有一个转置的关系 -
推广到矩阵,对于矩阵微分,定义为:
d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f ∂ X ) T d X ) df=sum_{i=1}^msum_{j=1}^nfrac{partial f}{partial X_{ij}}dX_{ij}=tr((frac{partial f}{partial bf X})^Tdbf X) df=i=1∑mj=1∑n∂Xij∂fdXij=tr((∂X∂f)TdX)
第二步使用了矩阵迹的性质,即迹函数等于主对角线的和(标量)。即
t r ( A T B ) = ∑ i , j A i j B i j tr(bf A^Tbf B)=sum_{i,j}A_{ij}B_{ij} tr(ATB)=i,j∑AijBij
从上面矩阵微分的式子,可以看到矩阵微分和它的导数也有一个转置的关系,不过是在外面套了一个迹函数而已。由于标量的迹函数就是它本身,那么矩阵微分和向量微分可以统一表示,即:
d f = t r ( ( ∂ f ∂ X ) T d X ) df=tr((frac{partial f}{partial bf X})^Tdbf{X}) df=tr((∂X∂f)TdX)d f = t r ( ( ∂ f ∂ x ⃗ ) T d x ⃗ ) df = tr((frac{partial f}{partial vec x})^Tdvec{x}) df=tr((∂x∂f)Tdx)
2. 矩阵微分的性质
在使用矩阵微分求导前,先看看矩阵微分的性质:
1)微分加减法: d ( X + Y ) = d X + d Y , d ( X − Y ) = d X − d Y d(bf X+Y)=dX+dY,d(X-Y)=dX-dY d(X+Y)=dX+dY,d(X−Y)=dX−dY
2)微分乘法: d ( X Y ) = ( d X ) Y + X ( d Y ) d(bf XY)=(dX)Y + X(dY) d(XY)=(dX)Y+X(dY)
3)微分转置: d ( X T ) = ( d X ) T d(bf X^T)=(dX)^T d(XT)=(dX)T
4)微分的迹: d t r ( X ) = t r ( d X ) dtr(bf X)=tr(dX) dtr(X)=tr(dX)
5)微分哈达马乘积: d ( X ⨀ Y ) = X ⨀ d Y + d X ⨀ Y d(bf Xbigodot Y)=Xbigodot dY+dXbigodot Y d(X⨀Y)=X⨀dY+dX⨀Y
6)逐元素求导: d σ ( X ) = σ ′ ( X ) ⨀ d X dsigma(bf X)=sigma'(X)bigodot dX dσ(X)=σ′(X)⨀dX
7)逆矩阵微分: d X − 1 = − X − 1 d X X − 1 dbf X^{-1}=-X^{-1}dXX^{-1} dX−1=−X−1dXX−1
8)行列式微分: d ∣ X ∣ = ∣ X ∣ t r ( X − 1 d X ) d|bf X| = |X|tr(X^{-1}dX) d∣X∣=∣X∣tr(X−1dX)
3. 使用微分法求解矩阵向量求导
第一节中得到了矩阵微分和导数关系,现在使用微分法来求解矩阵向量求导
若标量函数 f f f是矩阵 X bf X X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对 f f f求微分,再使用迹函数技巧给 d f df df套上迹并将其它项交换至 d X dbf X dX左侧,那么对于迹函数里面在 d X dbf X dX左边的部分,我们只需要加一个转置就可以得到导数了。
主要需要用到的迹函数技巧:
1)标量的迹等于自己: t r ( x ) = x tr(x)=x tr(x)=x
2)转置不变: t r ( A T ) = t r ( A ) tr(A^T)=tr(A) tr(AT)=tr(A)
3)交换律: t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA),需要满足 A , B T bf A,B^T A,BT同纬度
4)加减法: t r ( X + Y ) = t r ( X ) + t r ( Y ) , t r ( X − Y ) = t r ( X ) − t r ( Y ) tr(X+Y)=tr(X)+tr(Y),tr(X-Y)=tr(X)-tr(Y) tr(X+Y)=tr(X)+tr(Y),tr(X−Y)=tr(X)−tr(Y)
5)矩阵乘法和迹交换: t r ( ( A ⨀ B ) T C ) = t r ( A T ( B ⨀ C ) ) tr((Abigodot B)^TC)=tr(A^T(Bbigodot C)) tr((A⨀B)TC)=tr(AT(B⨀C)),需要满足A,B,C同维度
e.g y = a ⃗ T X b ⃗ y=vec{a}^T bf Xvec{b} y=aTXb, ∂ y ∂ X frac{partial y}{partial bf X} ∂X∂y
用微分乘法的性质对 f f f求微分,得:
d y = d a ⃗ T X b ⃗ + a ⃗ T d X b ⃗ + a ⃗ T X d b ⃗ = a ⃗ T d X b ⃗ dy=dbf vec a^TXvec b+vec a^TdXvec b +vec a^TXdvec b=vec{a}^TdXvec{b} dy=daTXb+aTdXb+aTXdb=aTdXb
两边套上迹函数,即:
d y = t r ( d y ) = t r ( a ⃗ T d X b ⃗ ) = t r ( b ⃗ a ⃗ T d X ) dy=tr(dy)=tr(bf vec{a}^TdXvec{b})=tr(vec{b}vec{a}^TdX) dy=tr(dy)=tr(aTdXb)=tr(baTdX)
第一步到第二部使用了迹函数性质1,第三部到第四部用到了上面迹函数的性质3
根据矩阵导数和微分的定义,迹函数里面在 d X dbf X dX左边的部分 b ⃗ a ⃗ T bf vec{b}vec{a}^T baT,加上一个转置即为我们要求的导数,即:
∂ f ∂ X = ( b ⃗ a ⃗ T ) T = a b T frac{partial f}{partial bf X}=(vec{b}vec{a}^T)^T=ab^T ∂X∂f=(baT)T=abT
以上就是微分法的基本流程,先求微分再做迹函数变换,最后得到求导结果。比起定义法,我们现在不需要去对矩阵中的单个标量进行求导。
再来看看
y
=
a
⃗
T
e
x
p
(
X
b
⃗
)
,
∂
y
∂
X
y=vec{a}^Texp(bf Xvec{b}),frac{partial y}{partial bf X}
y=aTexp(Xb),∂X∂y
d y = t r ( d y ) = t r ( a ⃗ T d e x p ( X b ⃗ ) ) = t r ( a ⃗ ( e x p ( X b ⃗ ) ⨀ d ( X b ⃗ ) ) ) = t r ( ( a ⃗ ⨀ e x p ( X b ⃗ ) ) T d X ) = t r ( b ⃗ ( a ⨀ e x p ( X b ⃗ ) ) T d X ) dy=tr(dy)=tr(vec{a}^Tdexp(textbf Xvec{b}))=tr(vec{a}(exp(textbf Xvec{b})bigodot d(textbf Xvec{b})))=tr((vec{a}bigodot exp(textbf Xvec{b}))^Tdtextbf X)\=tr(vec{b}(abigodot exp(textbf{X}vec{b}))^Tdtextbf X) dy=tr(dy)=tr(aTdexp(Xb))=tr(a(exp(Xb)⨀d(Xb)))=tr((a⨀exp(Xb))TdX)=tr(b(a⨀exp(Xb))TdX)
其中第三步到第四部使用了上面迹函数的性质5,这样求导结果为:
∂
y
∂
X
=
(
a
⃗
⨀
e
x
p
(
X
b
⃗
)
)
b
⃗
T
frac{partial y}{partial textbf X}=(vec{a}bigodot exp(textbf Xvec{b}))vec b^T
∂X∂y=(a⨀exp(Xb))bT
4. 迹函数对向量矩阵求导
由于微分法使用了迹函数的技巧,那么迹函数对向量矩阵求导这一大类问题,使用微分法是最简单直接的。下面是常见的迹函数的求导过程。
-
e.g ∂ t r ( A B ) ∂ A = B T frac{partial tr(bf AB)}{partial bf A}=bf B^T ∂A∂tr(AB)=BT
-
e.g ∂ t r ( A B ) ∂ B = A T frac{partial tr(bf AB)}{partial bf B}=bf A^T ∂B∂tr(AB)=AT
-
e.g ∂ t r ( W T A W ) ∂ W : frac{partial tr(W^TAW)}{partial W}: ∂W∂tr(WTAW):
证明: d ( t r ( W T A W ) ) = t r ( d W T A W + W T A d W ) = t r ( d W T A W ) + t r ( W T A d W ) = t r ( ( d W ) T A W ) + t r ( W T A d W ) = t r ( W T A T d W ) + t r ( W T A d W ) = t r ( W T ( A + A T ) d W ) d(tr(W^TAW))=tr(dW^TAW+W^TAdW)=tr(dW^TAW)+tr(W^TAdW)\=tr((dW)^TAW)+tr(W^TAdW)=tr(W^TA^TdW)+tr(W^TAdW)=tr(W^T(A+A^T)dW) d(tr(WTAW))=tr(dWTAW+WTAdW)=tr(dWTAW)+tr(WTAdW)=tr((dW)TAW)+tr(WTAdW)=tr(WTATdW)+tr(WTAdW)=tr(WT(A+AT)dW)
因此可以得到:
∂ t r ( W T A W ) ∂ W = ( A + A T ) W frac{partial tr(W^TAW)}{partial W}=(A+A^T)W ∂W∂tr(WTAW)=(A+AT)W
5. 微分法求导小结
-
使用矩阵微分,可以在不对向量或矩阵中的某一元素单独求导再拼接,因此会比较方便,当然熟练使用的前提是对上面矩阵微分的性质,以及迹函数的性质熟练运用
-
微分法主要是用于解决标量对向量、标量对矩阵求导。而向量对向量的求导是不用微分法的
-
向量对矩阵的求导,比如神经网络中输出层为多个节点时,就是一个向量
四、矩阵向量求导链式法则
本篇中标量对向量的求导,标量对矩阵的求导使用分母布局,向量对向量的求导使用分子布局。
1. 向量对向量求导的链式法则
假设多个向量存在依赖关系,比如三个向量
x
⃗
→
y
⃗
→
z
⃗
vec x to vec y to vec z
x→y→z存在依赖关系,则有下面的链式求导法则:
∂
z
⃗
∂
x
⃗
=
∂
z
⃗
∂
y
⃗
∂
y
⃗
∂
x
⃗
frac{partial vec z}{partial vec x}=frac{partial vec z}{partial vec y}frac{partial vec y}{partial vec x}
∂x∂z=∂y∂z∂x∂y
该法则可以推广到更多的向量依赖关系。但是所有依赖关系的变量都是向量,如果有一个
Y
bf Y
Y是矩阵,比如是
x
⃗
→
Y
→
z
⃗
vec x to textbf Y to vec z
x→Y→z,则上式并不成立。
从矩阵维度相容的角度也很容易理解上面的链式法则,假设 x ⃗ , y ⃗ , z ⃗ vec x,vec y,vec z x,y,z分别是m,n,p维向量,则求导结果 ∂ z ⃗ ∂ x ⃗ frac{partial vec z}{partial vec x} ∂x∂z是一个pxm的雅克比矩阵,而右边 ∂ z ⃗ ∂ y ⃗ frac{partial vec z}{partial vec y} ∂y∂z是pxn的雅克比矩阵, ∂ y ⃗ ∂ x ⃗ frac{partial vec y}{partial vec x} ∂x∂y是一个nxm的矩阵,两个雅克比矩阵的乘积维度刚好是pxm,和左边相容。
2. 标量对多个向量的链式求导法则
在机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量,无法使用上一节的链式求导法则,比如两个向量,最后到一标量的依赖关系: x ⃗ → y ⃗ → z vec xto vec y to z x→y→z,此时很容易发现维度不相容。
假设 x ⃗ , y ⃗ vec x, vec y x,y分别是m,n维向量,那么 ∂ z ∂ x ⃗ frac{partial z}{partial vec x} ∂x∂z的求导结果是一个mx1的向量,而 ∂ z ∂ y ⃗ frac{partial z}{partial vec y} ∂y∂z是一个nx1的向量, ∂ y ⃗ ∂ x ⃗ frac{partial vec y}{partial vec x} ∂x∂y是一个nxm的雅克比矩阵,右边的向量和矩阵是没法直接乘的。
但是假如把标量求导的部分都做一个转置,那么维度就可以相容了,也就是:
(
∂
z
∂
x
⃗
)
T
=
(
∂
z
∂
y
⃗
)
T
∂
y
⃗
∂
x
⃗
(frac{partial z}{partial vec x})^T=(frac{partial z}{partial vec y})^Tfrac{partial vec y}{partial vec x}
(∂x∂z)T=(∂y∂z)T∂x∂y
但是毕竟要求导的是
∂
z
∂
x
⃗
frac{partial z}{partial vec x}
∂x∂z,而不是它的转置,因此两边转置我们可以得到标量对多个向量求导的链式法则。
∂
z
∂
x
⃗
=
(
∂
y
⃗
∂
x
⃗
)
T
∂
z
∂
y
⃗
frac{partial z}{partial vec x}=(frac{partial vec y}{partial vec x})^Tfrac{partial z}{partial vec y}
∂x∂z=(∂x∂y)T∂y∂z
如果是标量对更多向量的求导,比如
y
⃗
1
→
y
⃗
2
→
.
.
.
→
y
⃗
n
→
z
vec y_1 to vec y_2to...to vec y_n to z
y1→y2→...→yn→z,则其链式求导表达式可以表示为:
∂
z
∂
y
⃗
1
=
(
∂
y
⃗
n
∂
y
⃗
n
−
1
∂
y
⃗
n
−
1
∂
y
⃗
n
−
2
.
.
.
∂
y
⃗
2
∂
y
⃗
1
)
T
∂
z
∂
y
⃗
n
frac{partial z}{partial vec y_1}=(frac{partial vec y_n}{partial vec y_{n-1}}frac{partial vec y_{n-1}}{partial vec y_{n-2}}...frac{partial vec y_2}{partial vec y_1})^Tfrac{partial z}{partial vec y_n}
∂y1∂z=(∂yn−1∂yn∂yn−2∂yn−1...∂y1∂y2)T∂yn∂z
这里给一个最小二乘法求导的例子。最小二乘法优化的目标是最小化如下损失函数:
l
=
(
X
θ
⃗
−
y
⃗
)
T
(
X
θ
⃗
−
y
⃗
)
l=(textbf X vec theta-vec y)^T(textbf X vec theta-vec y)
l=(Xθ−y)T(Xθ−y)
优化的损失函数
l
l
l是一个标量,而模型参数
θ
theta
θ是一个向量,期望L对
θ
theta
θ求导,并求出导数等于0时候的极值点。假设向量
z
=
X
θ
⃗
−
y
z=textbf Xvec theta-y
z=Xθ−y,则
l
=
z
T
z
l=z^Tz
l=zTz,
θ
→
z
→
l
theta to zto l
θ→z→l存在链式求导的关系,因此:
∂
l
∂
θ
⃗
=
(
∂
z
⃗
∂
θ
⃗
)
T
∂
l
∂
z
⃗
=
X
⃗
T
(
2
z
⃗
)
=
2
X
⃗
T
(
X
⃗
θ
⃗
−
y
⃗
)
frac{partial l}{partial vec theta}=(frac{partial vec z}{partial vec theta})^Tfrac{partial l}{partial vec z}= vec X^T(2vec z)=2vec X^T(vec Xvec theta-vec y)
∂θ∂l=(∂θ∂z)T∂z∂l=XT(2z)=2XT(Xθ−y)
其中最后一步转换使用了如下求导公式:
∂
X
⃗
θ
⃗
−
y
⃗
∂
θ
⃗
=
X
⃗
∂
z
⃗
T
z
⃗
∂
z
⃗
=
2
z
⃗
frac{partial vec Xvec theta-vec y}{partial vec theta}=vec X \ frac{partial vec z^T vec z}{partial vec z}=2vec z
∂θ∂Xθ−y=X∂z∂zTz=2z
3.标量对多个矩阵的链式求导法则
假设有这样的依赖关系:
X
→
Y
→
z
textbf X to textbf Yto z
X→Y→z,那么我们有:
∂
z
∂
X
i
j
=
∑
k
,
l
∂
z
∂
Y
k
l
∂
Y
k
l
∂
X
i
j
=
t
r
(
(
∂
z
∂
Y
)
T
∂
Y
∂
X
i
j
)
frac{partial z}{partial X_{ij}}=sum_{k,l}frac{partial z}{partial Y_{kl}}frac{partial Y_{kl}}{partial X_{ij}}=tr((frac{partial z}{partial textbf Y})^Tfrac{partial textbf Y}{partial X_{ij}})
∂Xij∂z=k,l∑∂Ykl∂z∂Xij∂Ykl=tr((∂Y∂z)T∂Xij∂Y)
这里并没有给出基于矩阵整体的链式求导法则,主要原因是矩阵对矩阵的求导是比较复杂的定义,目前也为未涉及。因此只能给出对矩阵中一个标量的链式求导方法。这个方法并不实用,因为我们并不想每次都基于定义法来求导,最后再去排列求导结果。
虽然没有全局的标量对矩阵 的链式求导法则,但是对于一些线性关系的链式求导,还是有一些有用的结论。
常见问题: A , X , B , Y bf A,X,B,Y A,X,B,Y都是矩阵,z是标量,其中 z = f ( Y ) , Y = A X + B z=f(textbf Y),textbf Y=Atextbf X+B z=f(Y),Y=AX+B,我们要求出 ∂ z ∂ X frac{partial z}{partial textbf X} ∂X∂z,这个问题在机器学习中是很常见的。此时,并不能直接整体使用矩阵的链式求导法则,因为矩阵对矩阵的求导结果不好处理。
因此这里使用定义法试一试,先使用上面的标量链式求导公式:
∂
z
∂
X
i
j
=
∑
k
,
l
∂
z
∂
Y
k
l
∂
Y
k
l
∂
X
i
j
frac{partial z}{partial X_{ij}}=sum_{k,l}frac{partial z}{partial Y_{kl}}frac{partial Y_{kl}}{partial X_{ij}}
∂Xij∂z=k,l∑∂Ykl∂z∂Xij∂Ykl
后半部分的导数:
∂
Y
k
l
∂
X
i
j
=
∂
∑
s
(
A
k
s
X
s
l
)
∂
X
i
j
=
∂
A
k
i
X
i
l
∂
X
i
j
=
A
k
i
δ
l
j
frac{partial Y_{kl}}{partial X_{ij}}=frac{partial sum_s(A_{ks}X_{sl})}{partial X_{ij}}=frac{partial A_{ki}X_{il}}{partial X_{ij}}=A_{ki}delta_{lj}
∂Xij∂Ykl=∂Xij∂∑s(AksXsl)=∂Xij∂AkiXil=Akiδlj
其中
δ
l
j
delta_{lj}
δlj在
l
=
j
l=j
l=j时为1,否则为0。
那么最终的标签链式求导公式转化为:
∂
z
∂
x
i
j
=
∑
k
,
l
∂
z
∂
Y
k
l
A
k
i
δ
l
j
=
∑
k
∂
z
∂
Y
k
j
A
k
j
frac{partial z}{partial x_{ij}}=sum_{k,l}frac{partial z}{partial Y_{kl}}A_{ki}delta_{lj}=sum_{k}frac{partial z}{partial Y_{kj}}A_{kj}
∂xij∂z=k,l∑∂Ykl∂zAkiδlj=k∑∂Ykj∂zAkj
即矩阵
A
T
bf A^T
AT的第i行和
∂
z
∂
Y
frac{partial z}{partial bf Y}
∂Y∂z的第j列的内积。排列成矩阵即为:
∂
z
∂
X
=
A
T
∂
z
∂
Y
frac{partial z}{partial bf X}=textbf A^Tfrac{partial z}{partial bf Y}
∂X∂z=AT∂Y∂z
总结下就是:
z
=
f
(
Y
)
,
Y
=
A
X
+
B
→
∂
z
∂
X
=
A
T
∂
z
∂
Y
z=f(textbf Y),textbf Y=Atextbf X+B to frac{partial z}{partial textbf X}=A^Tfrac{partial z}{partial textbf Y}
z=f(Y),Y=AX+B→∂X∂z=AT∂Y∂z
这结论在
x
bf x
x是一个向量时也成立,即:
z
=
f
(
y
⃗
)
,
y
⃗
=
A
x
⃗
+
b
→
∂
z
∂
x
⃗
=
A
T
∂
z
∂
y
⃗
z=f(vec y),vec y=Avec x+bto frac{partial z}{partial vec x}=A^Tfrac{partial z}{partial vec y}
z=f(y),y=Ax+b→∂x∂z=AT∂y∂z
如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论,证明方法是类似的,这里直接给出结论.
z
=
f
(
Y
)
,
Y
=
X
A
+
B
→
∂
z
∂
X
=
∂
z
∂
Y
A
T
z=f(textbf Y),textbf Y=textbf XA+B to frac{partial z}{partial textbf X}=frac{partial z}{partial textbf Y}A^T
z=f(Y),Y=XA+B→∂X∂z=∂Y∂zAT
z = f ( y ⃗ ) , y ⃗ = x ⃗ a + b → ∂ z ∂ x ⃗ = ∂ z ∂ y ⃗ a T z=f(vec y),vec y=vec xa+bto frac{partial z}{partial vec x}=frac{partial z}{partial vec y}a^T z=f(y),y=xa+b→∂x∂z=∂y∂zaT
使用好上述四个结论,对于机器学习尤其是深度学习里的求导问题可以非常快的解决
4. 矩阵向量求导小结
-
矩阵向量求导在前面讨论了三种方法,定义法、微分法和链式求导法。在同等情况下,优先考虑链式求导方法,尤其是第三节的四个结论。其次选择微分法,在没有好的求导方法时使用定义法是最后的保底方案。
-
链式法面对向量对矩阵的导数是不行的,只能用定义法做
-
这四篇对矩阵向量求导的介绍,对于机器学习中出现的矩阵向量求导问题已足够。剩下的是矩阵对矩阵的求导,还有矩阵对向量,向量对矩阵求导这三种形式,是其他应用的数学问题。
五、矩阵的迹以及迹对矩阵求导
-
概念:矩阵的迹就是矩阵的主对角线上所有元素的和
矩阵A的迹,记作tr(A),即 t r ( A ) = ∑ i = 1 n a i i tr(A)=sum_{i=1}^{n}a_{ii} tr(A)=∑i=1naii
-
定理1: t r ( A B ) = t r ( B A ) , ( A n × m , B m × n 或 A m × n , B n × m ) tr(AB)=tr(BA),(A_{ntimes m},B_{mtimes n}或A_{mtimes n},B_{ntimes m}) tr(AB)=tr(BA),(An×m,Bm×n或Am×n,Bn×m)
证明:
t r ( A B ) = ∑ i = 1 n ( A B ) i i = ∑ i = 1 n ∑ j = 1 n A i j B j i tr(AB)=sum_{i=1}^{n}(AB)_{ii}=sum_{i=1}^{n}sum_{j=1}^nA_{ij}B_{ji} tr(AB)=i=1∑n(AB)ii=i=1∑nj=1∑nAijBjit r ( B A ) = ∑ i = 1 n ( B A ) i i = ∑ i = 1 n ∑ j = 1 n B i j A j i = ∑ i = 1 n ∑ j = 1 n A j i B i j = ∑ j = 1 n ( A B ) j j = t r ( A B ) tr(BA)=sum_{i=1}^{n}(BA)_{ii}=sum_{i=1}^{n}sum_{j=1}^{n}B_{ij}A_{ji}=sum_{i=1}^nsum_{j=1}^nA_{ji}B_{ij}=sum_{j=1}^n(AB)_{jj}=tr(AB) tr(BA)=i=1∑n(BA)ii=i=1∑nj=1∑nBijAji=i=1∑nj=1∑nAjiBij=j=1∑n(AB)jj=tr(AB)
实例证明:
A = ( a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 ) B = ( b 1 b 2 b 3 b 4 b 5 b 6 b 7 b 8 b 9 ) A= begin{pmatrix} a_1 & a_2 & a_3 \ a_4 & a_5 & a_6 \ a_7 & a_8 & a_9 end{pmatrix} quad B = begin{pmatrix} b_1 & b_2 & b_3 \ b_4 & b_5 & b_6 \ b_7 & b_8 & b_9 end{pmatrix} A=⎝⎛a1a4a7a2a5a8a3a6a9⎠⎞B=⎝⎛b1b4b7b2b5b8b3b6b9⎠⎞
方法1:
t r ( A B ) = a 1 b 1 + a 2 b 4 + a 3 b 7 + a 4 b 2 + a 5 b 5 + a 6 b 8 + a 7 b 3 + a 8 b 6 + a 9 b 9 t r ( B A ) = b 1 a 1 + b 2 a 4 + b 3 a 7 + b 4 a 2 + b 5 a 5 + b 6 a 8 + b 7 a 3 + b 8 a 6 + b 9 a 9 = t r ( A B ) tr(AB)=a_1b_1+a_2b_4+a_3b_7+a_4b_2+a_5b_5+a_6b_8+a_7b_3+a_8b_6+a_9b_9 \ tr(BA)=b_1a_1+b_2a_4+b_3a_7+b_4a_2+b_5a_5+b_6a_8+b_7a_3+b_8a_6+b_9a_9=tr(AB) tr(AB)=a1b1+a2b4+a3b7+a4b2+a5b5+a6b8+a7b3+a8b6+a9b9tr(BA)=b1a1+b2a4+b3a7+b4a2+b5a5+b6a8+b7a3+b8a6+b9a9=tr(AB)
可发现
∀ a i b j ∈ t r ( A B ) , 一 定 有 a i b j ∈ t r ( B A ) ∀ a i b j ∈ t r ( B A ) , 一 定 有 a i b j ∈ t r ( A B ) forall a_ib_jin tr(AB),一定有a_ib_j in tr(BA) \ forall a_ib_jin tr(BA),一定有a_ib_j in tr(AB) ∀aibj∈tr(AB),一定有aibj∈tr(BA)∀aibj∈tr(BA),一定有aibj∈tr(AB)
所以 一定有 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA) -
定理2: t r ( A B C ) = t r ( C A B ) = t r ( B C A ) tr(ABC)=tr(CAB)=tr(BCA) tr(ABC)=tr(CAB)=tr(BCA)
证明:由 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA)可知:
t r ( A B C ) = t r ( ( A B ) C ) = t r ( C A B ) t r ( A B C ) = t r ( A ( B C ) ) = t r ( B C A ) tr(ABC)=tr((AB)C)=tr(CAB)\ tr(ABC)=tr(A(BC))=tr(BCA) tr(ABC)=tr((AB)C)=tr(CAB)tr(ABC)=tr(A(BC))=tr(BCA)
定理的实质是:ABC的各种循环形式的矩阵乘函数的迹都相等,如下解释:ABC的循环形式有三种:ABC、BCA、CAB
就是从ABCABC中依次取以A,B,C开头且含有A、B、C的依次是:ABC、BCA、CAB,他们三个的迹相等
-
定理3: t r ( A ) = t r ( A T ) tr(A)=tr(A^T) tr(A)=tr(AT)
证明:矩阵转置不改变矩阵的主对角线上的所有元素
-
定理4: d ( t r ( A B ) ) = d ( t r ( B A ) ) = B T , ( A m × n , B n × m 矩 阵 ) d(tr(AB))=d(tr(BA))=B^T,(A_{mtimes n},B_{ntimes m}矩阵) d(tr(AB))=d(tr(BA))=BT,(Am×n,Bn×m矩阵)
证明:
t r ( A B ) = ∑ i = 1 n a 1 i b i 1 + ∑ i = 1 n a 2 i b i 2 + . . . + ∑ i = 1 n a m i b i m = ∑ j = 1 m ∑ i = 1 n a j i b i j tr(AB)=sum_{i=1}^na_{1i}b_{i1}+sum_{i=1}^na_{2i}b_{i2}+...+sum_{i=1}^na_{mi}b_{im}=sum_{j=1}^msum^n_{i=1}a_{ji}b_{ij} tr(AB)=i=1∑na1ibi1+i=1∑na2ibi2+...+i=1∑namibim=j=1∑mi=1∑najibij
即 t r ( A B ) = ∑ i = 1 m ∑ j = 1 n a i j b j i tr(AB)=sum^m_{i=1}sum^n_{j=1}a_{ij}b_{ji} tr(AB)=∑i=1m∑j=1naijbji则 ∂ t r ( A B ) ∂ A = ∂ 标 量 ∂ 矩 阵 = ∂ ∑ i = 1 m ∑ j = 1 n a i j b j i ∂ a i j = b i j frac{partial tr(AB)}{partial A}=frac{partial 标量}{partial 矩阵}=frac{partial sum^m_{i=1}sum^n_{j=1}a_{ij}b_{ji}}{partial a_{ij}}=b_{ij} ∂A∂tr(AB)=∂矩阵∂标量=∂aij∂∑i=1m∑j=1naijbji=bij
∂ t r ( A B ) ∂ A = ( ∂ t r ( A B ) ∂ a 11 ∂ t r ( A B ) ∂ a 12 ⋯ ∂ t r ( A B ) ∂ a 1 n ∂ t r ( A B ) ∂ a 21 ∂ t r ( A B ) ∂ a 22 ⋯ ∂ t r ( A B ) ∂ a 2 n ⋮ ⋮ ⋱ ⋮ ∂ t r ( A B ) ∂ a m 1 ∂ t r ( A B ) ∂ a m 2 ⋯ ∂ t r ( A B ) ∂ a m n ) = ( b 11 b 21 ⋯ b n 1 b 12 b 22 ⋯ b n 2 ⋮ ⋮ ⋱ ⋮ b 1 m b 2 m ⋯ b n m ) = ( b 11 b 21 ⋯ b n 1 b 12 b 22 ⋯ b n 2 ⋮ ⋮ ⋱ ⋮ b 1 m b 2 m ⋯ b n m ) T = B T frac{partial tr(AB)}{partial A}=begin{pmatrix}frac{partial tr(AB)}{partial a_{11}} & frac{partial tr(AB)}{partial a_{12}} & cdots & frac{partial tr(AB)}{partial a_{1n}} \frac{partial tr(AB)}{partial a_{21}} & frac{partial tr(AB)}{partial a_{22}} & cdots & frac{partial tr(AB)}{partial a_{2n}} \vdots & vdots & ddots & vdots \frac{partial tr(AB)}{partial a_{m1}} & frac{partial tr(AB)}{partial a_{m2}} & cdots & frac{partial tr(AB)}{partial a_{mn}} \end{pmatrix}\=begin{pmatrix}b_{11} & b_{21} & cdots & b_{n1} \b_{12} & b_{22} & cdots & b_{n2} \vdots & vdots & ddots & vdots \b_{1m} & b_{2m} & cdots & b_{nm}end{pmatrix}=begin{pmatrix}b_{11} & b_{21} & cdots & b_{n1} \b_{12} & b_{22} & cdots & b_{n2} \vdots & vdots & ddots & vdots \b_{1m} & b_{2m} & cdots & b_{nm}end{pmatrix}^T=B^T ∂A∂tr(AB)=⎝⎜⎜⎜⎜⎛∂a11∂tr(AB)∂a21∂tr(AB)⋮∂am1∂tr(AB)∂a12∂tr(AB)∂a22∂tr(AB)⋮∂am2∂tr(AB)⋯⋯⋱⋯∂a1n∂tr(AB)∂a2n∂tr(AB)⋮∂amn∂tr(AB)⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎛b11b12⋮b1mb21b22⋮b2m⋯⋯⋱⋯bn1bn2⋮bnm⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛b11b12⋮b1mb21b22⋮b2m⋯⋯⋱⋯bn1bn2⋮bnm⎠⎟⎟⎟⎞T=BT
因为 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA),所以 ∂ A B ∂ A = ∂ t r ( B A ) ∂ A = B T frac{partial AB}{partial A}=frac{partial tr(BA)}{partial A}=B^T ∂A∂AB=∂A∂tr(BA)=BT -
定理5: ∂ A T B ∂ A = ∂ t r ( B A T ) ∂ A = B , ( A m × n , B n × m 方 阵 ) frac{partial A^TB}{partial A}=frac{partial tr(BA^T)}{partial A}=B,(A_{m times n},B_{n times m}方阵) ∂A∂ATB=∂A∂tr(BAT)=B,(Am×n,Bn×m方阵)
-
定理6:如果 a ∈ R a in bf R a∈R,则有 t r ( a ) = a tr(a)=a tr(a)=a
-
定理7: ∂ t r ( X ) ∂ X = I frac{partial tr(X)}{partial X}=I ∂X∂tr(X)=I
矩阵的迹对矩阵自身求导为单位矩阵 I I I
∂ t r ( X ) ∂ X = ∂ 标 量 ∂ 矩 阵 = ( ∑ i = 1 n x i i x 11 ∑ i = 1 n x i i x 12 ⋯ ∑ i = 1 n x i i x 1 n ∑ i = 1 n x i i x 21 ∑ i = 1 n x i i x 22 ⋯ ∑ i = 1 n x i i x 2 n ⋮ ⋮ ⋱ ⋮ ∑ i = 1 n x i i x m 1 ∑ i = 1 n x i i x m 2 ⋯ ∑ i = 1 n x i i x m n ) = I frac{partial tr(X)}{partial X}=frac{partial 标量}{partial 矩阵}= begin{pmatrix} frac{sum^n_{i=1}x_{ii}}{x_{11}} & frac{sum^n_{i=1}x_{ii}}{x_{12}} & cdots & frac{sum^n_{i=1}x_{ii}}{x_{1n}} \ frac{sum^n_{i=1}x_{ii}}{x_{21}} & frac{sum^n_{i=1}x_{ii}}{x_{22}} & cdots & frac{sum^n_{i=1}x_{ii}}{x_{2n}} \ vdots & vdots & ddots & vdots \ frac{sum^n_{i=1}x_{ii}}{x_{m1}} & frac{sum^n_{i=1}x_{ii}}{x_{m2}} & cdots & frac{sum^n_{i=1}x_{ii}}{x_{mn}} \ end{pmatrix} = I ∂X∂tr(X)=∂矩阵∂标量=⎝⎜⎜⎜⎜⎛x11∑i=1nxiix21∑i=1nxii⋮xm1∑i=1nxiix12∑i=1nxiix22∑i=1nxii⋮xm2∑i=1nxii⋯⋯⋱⋯x1n∑i=1nxiix2n∑i=1nxii⋮xmn∑i=1nxii⎠⎟⎟⎟⎟⎞=I -
定理8: d t r ( A T X B T ) = d t r ( B X T A ) = A B dtr(A^TXB^T)=dtr(BX^TA)=AB dtr(ATXBT)=dtr(BXTA)=AB
证明:
$because tr(ATXBT)=tr(ATXBT)T=tr(BXTA)=tr(ABX^T) $
∴ d t r ( A T X B T ) = d t r ( B X T A ) = d t r ( A B X T ) therefore dtr(A^TXB^T)=dtr(BX^TA)=dtr(ABX^T) ∴dtr(ATXBT)=dtr(BXTA)=dtr(ABXT)
∵ d t r ( A B X T ) = A B because dtr(ABX^T)=AB ∵dtr(ABXT)=AB
∴ d t r ( A T X B T ) = d t r ( B X T A ) = A B therefore dtr(A^TXB^T)=dtr(BX^TA)=AB ∴dtr(ATXBT)=dtr(BXTA)=AB
哈达马乘积
对于同为mxn阶的矩阵
A
bf A
A和
B
bf B
B,
A
bf A
A和
B
bf B
B的哈达马乘积定义为:
(
A
⨀
B
)
i
,
j
=
(
A
)
i
,
j
(
B
)
i
,
j
(Abigodot B)_{i,j}=(A)_{i,j}(B)_{i,j}
(A⨀B)i,j=(A)i,j(B)i,j
矩阵求导的基本规则
∂ AB ∂ B = A T frac{partial textbf {AB}}{partial textbf B} = A^T ∂B∂AB=AT
此学习笔记《矩阵向量求导》下载
链接:https://pan.baidu.com/s/15i2l4r50aE6HwmX90mcyaQ 密码:0cd5
最后
以上就是有魅力发带为你收集整理的机器学习|矩阵知识汇总(迹函数,标量、向量和矩阵相互求导,链式法则)|学习笔记矩阵向量求导的全部内容,希望文章能够帮你解决机器学习|矩阵知识汇总(迹函数,标量、向量和矩阵相互求导,链式法则)|学习笔记矩阵向量求导所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复