【机器学习中的矩阵求导】(五)矩阵对矩阵求导
学习总结
(1)这个task所有求导布局都是分母布局。为了适配矩阵对矩阵的求导,这次的向量对向量的求导,也是以分母布局为准(和之前的不一样)。
(2)由于矩阵对矩阵求导的结果包含【克罗内克积,Kronecker积】,因此和之前的其他类型的矩阵求导不同,在机器学习算法优化中,一般不在推导的时候使用矩阵对矩阵的求导,除非只是做定性的分析。如果遇到矩阵对矩阵的求导不好绕过,一般可以使用机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则中第三节最后的几个链式法则公式来避免。
一、矩阵对矩阵求导的定义
假如有p×q矩阵F要对m×n的矩阵X求导,根据第一篇求导布局的定义,矩阵F的pq个元素要对矩阵X的mn个值分别求导,所以求导结果一共有mnpq个,求导的结果如何排列:
1.1 两种求导的定义:
(1)矩阵 F F F 对矩阵 X X X中的每个值 X i j X_{i j} Xij 求导,这样对于矩阵 X X X 每一个位置 ( i , j ) (i, j ) (i,j)求导得到一个矩阵 ∂ F ∂ X i j \frac{\partial F}{\partial X_{i j}} ∂Xij∂F可以理解为矩阵 X X X的每个位置都被替换为一个p×q的矩阵,最后得到一个mp×nq的矩阵。
(2)和1类似,可以看做矩阵 F F F中的每个值 F k l F_{k l} Fkl分别对矩阵 X X X 求导,即矩阵 F F F中每一个位置 ( k , l ) (k, l) (k,l)对矩阵 X X X求导得到一个矩阵 ∂ F k l ∂ X \dfrac{\partial F_{k l}}{\partial X} ∂X∂Fkl,可以理解为矩阵 F F F的每个位置都被替换成一个m×n的矩阵,然后得到一个mp×nq的矩阵。
小结:但这两种定义在实际中很难用,不如用(三)微分法求导。
1.2 主流的矩阵对矩阵求导定义
现在主流的矩阵对矩阵求导定义是对矩阵先做向量化,然后使用向量对向量的求导。
这里的向量化一般使用列向量,即矩阵对矩阵的求导可以表示为: ∂ F ∂ X = ∂ v e c ( F ) ∂ vec ( X ) \frac{\partial F}{\partial X}=\frac{\partial v e c(F)}{\partial \operatorname{vec}(X)} ∂X∂F=∂vec(X)∂vec(F)
对于矩阵F,列向量化, vec ( F ) \operatorname{vec}(F) vec(F)的维度是pq×1的向量, vec ( X ) \operatorname{vec}(X) vec(X)的维度是mn×1的向量。
最终求导的结果,使用分母布局,得到 mn×pq 的矩阵。
二、矩阵对矩阵求导的微分法
向量化的矩阵对矩阵求导,主要是为了使用类似于前面讲过的微分法求导。之前(三)标量对向量矩阵求导的微分法里有:
d f = tr ( ( ∂ f ∂ X ) T d X ) d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^{T} d \mathbf{X}\right) df=tr((∂X∂f)TdX)
矩阵对矩阵求导有: vec ( d F ) = ∂ vec ( F ) T ∂ vec ( X ) vec ( d X ) = ∂ F T ∂ X vec ( d X ) \operatorname{vec}(d F)=\frac{\partial \operatorname{vec}(F)^{T}}{\partial \operatorname{vec}(X)} \operatorname{vec}(d X)=\frac{\partial F^{T}}{\partial X} \operatorname{vec}(d X) vec(dF)=∂vec(X)∂vec(F)Tvec(dX)=∂X∂FTvec(dX)
和之前标量对矩阵的微分法相比,这里的迹函数被矩阵向量化代替了。
2.1 矩阵向量化的主要运算法则
矩阵向量化的主要运算法则:
- 线性性质: vec ( A + B ) = vec ( A ) + vec ( B ) \operatorname{vec}(A+B)=\operatorname{vec}(A)+\operatorname{vec}(B) vec(A+B)=vec(A)+vec(B)
- 矩阵乘法: vec ( A X B ) = ( B T ⨂ A ) vec ( X ) \operatorname{vec}(A X B)=\left(B^{T} \bigotimes A\right) \operatorname{vec}(X) vec(AXB)=(BT⨂A)vec(X),其中 ⨂ \bigotimes ⨂是克罗内克积
- 矩阵转置: vec ( A T ) = K m n vec ( A ) \operatorname{vec}\left(A^{T}\right)=K_{m n} \operatorname{vec}(A) vec(AT)=Kmnvec(A),其中 A A A是m×n的矩阵, K m n K_{m n} Kmn是mn×mn的交换矩阵,用于矩阵列向量化和行向量化之间的转换。
- 逐元素乘法: vec ( A ⊙ X ) = diag ( A ) vec ( X ) \operatorname{vec}(A \odot X)=\operatorname{diag}(A) \operatorname{vec}(X) vec(A⊙X)=diag(A)vec(X),其中 diag ( A ) \operatorname{diag}(A) diag(A)是mn×mn的对角矩阵,对角线上的元素是矩阵A按列向量化后排列出来的。
2.2 克罗内克积的主要运算法则
- ( A ⨂ B ) T = A T ⨂ B T (A \bigotimes B)^{T}=A^{T} \bigotimes B^{T} (A⨂B)T=AT⨂BT
- vec ( a b T ) = b ⨂ a \operatorname{vec}\left(a b^{T}\right)=b \bigotimes a vec(abT)=b⨂a
- ( A ⨂ B ) ( C ⨂ D ) = A C ⨂ B D (A \bigotimes B)(C \bigotimes D)=A C \bigotimes B D (A⨂B)(C⨂D)=AC⨂BD
- K m n = K n m T , K m n K n m = I K_{m n}=K_{n m}^{T}, K_{m n} K_{n m}=I Kmn=KnmT,KmnKnm=I
利用上面的性质,求出 vec ( d F ) \operatorname{vec}\left(dF\right) vec(dF)关于 vec ( d X ) \operatorname{vec}\left(dX\right) vec(dX)的表达式,即表达式左边的转置即为我们要求的 ∂ vec ( F ) ∂ vec ( X ) \dfrac{\partial \operatorname{vec}(F)}{\partial \operatorname{vec}(X)} ∂vec(X)∂vec(F) ,或者说 ∂ F ∂ X \dfrac{\partial F}{\partial X} ∂X∂F。
三、矩阵对矩阵求导栗子
微分法求解矩阵对矩阵求导的栗子。
3.1 例题1
∂ A X B ∂ X \frac{\partial A X B}{\partial X} ∂X∂AXB
- 假设A,X,B都是矩阵,其中X是m×n的矩阵
(1)求 d F dF dF,和(三)微分法类似,有: d F = A d X B d F=A d X B dF=AdXB
(2)两边列向量化(注意在task3的微分法中我们是套上迹函数),通过矩阵向量化的性质2(即矩阵乘法: vec ( A X B ) = ( B T ⨂ A ) vec ( X ) \operatorname{vec}(A X B)=\left(B^{T} \bigotimes A\right) \operatorname{vec}(X) vec(AXB)=(BT⨂A)vec(X),其中 ⨂ \bigotimes ⨂是克罗内克积),得到: vec ( d F ) = vec ( A d X B ) = ( B T ⨂ A ) vec ( d X ) \operatorname{vec}(d F)=\operatorname{vec}(A d X B)=\left(B^{T} \bigotimes A\right) \operatorname{vec}(d X) vec(dF)=vec(AdXB)=(BT⨂A)vec(dX)
(3)得到求导结果: ∂ A X B ∂ X = ( B T ⨂ A ) T = B ⨂ A T \frac{\partial A X B}{\partial X}=\left(B^{T} \bigotimes A\right)^{T}=B \bigotimes A^{T} ∂X∂AXB=(BT⨂A)T=B⨂AT
(4)其中有特例: ∂ A X ∂ X = I n ⨂ A T \frac{\partial A X}{\partial X}=I_{n} \bigotimes A^{T} ∂X∂AX=In⨂AT ∂ X B ∂ X = B ⨂ I m \frac{\partial X B}{\partial X}=B \bigotimes I_{m} ∂X∂XB=B⨂Im
3.2 例题2
∂ A exp ( B X C ) D ∂ X \frac{\partial A \exp (B X C) D}{\partial X} ∂X∂Aexp(BXC)D
(1)求微分: d F = A [ dexp ( B X C ) ] D = A [ exp ( B X C ) ⊙ ( B d X C ) ] D d F=A[\operatorname{dexp}(B X C)] D=A[\exp (B X C) \odot(B d X C)] D dF=A[dexp(BXC)]D=A[exp(BXC)⊙(BdXC)]D
(2)两边列向量化: vec ( d F ) = ( D T ⨂ A ) vec [ exp ( B X C ) ⊙ ( B d X C ) ] = ( D T ⨂ A ) diag ( exp ( B X C ) ) vec ( B d X C ) = ( D T ⨂ A ) diag ( exp ( B X C ) ) ( C T ⨂ B ) vec ( d X )
- 第一个和第三个等式用矩阵向量化性质2(矩阵乘法: vec ( A X B ) = ( B T ⨂ A ) vec ( X ) \operatorname{vec}(A X B)=\left(B^{T} \bigotimes A\right) \operatorname{vec}(X) vec(AXB)=(BT⨂A)vec(X),其中 ⨂ \bigotimes ⨂是克罗内克积)
- 第二个等式用矩阵向量化性质4,即逐元素乘法: vec ( A ⊙ X ) = diag ( A ) vec ( X ) \operatorname{vec}(A \odot X)=\operatorname{diag}(A) \operatorname{vec}(X) vec(A⊙X)=diag(A)vec(X),其中 diag ( A ) \operatorname{diag}(A) diag(A)是mn×mn的对角矩阵,对角线上的元素是矩阵A按列向量化后排列出来的。
最终的结果:
∂ Aexp ( B X C ) D ∂ X = [ ( D T ⨂ A ) diag ( exp ( B X C ) ) ( C T ⨂ B ) ] T = ( C ⨂ B T ) diag ( exp ( B X C ) ) ( D ⨂ A T ) \frac{\partial \operatorname{Aexp}(B X C) D}{\partial X}=\left[\left(D^{T} \bigotimes A\right) \operatorname{diag}(\exp (B X C))\left(C^{T} \bigotimes B\right)\right]^{T} \\ =\left(C \bigotimes B^{T}\right) \operatorname{diag}(\exp (B X C))\left(D \bigotimes A^{T}\right) ∂X∂Aexp(BXC)D=[(DT⨂A)diag(exp(BXC))(CT⨂B)]T=(C⨂BT)diag(exp(BXC))(D⨂AT)
Reference
(1)https://www.cnblogs.com/pinard/p/10930902.html
(2)矩阵求导知识点总结:https://www.cnblogs.com/gyhhaha/p/11782212.html
(3)wiki百科:https://en.wikipedia.org/wiki/Matrix_calculus
(4)矩阵求导与矩阵微分—中科院博士大佬
(5)矩阵求导术(上)
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/121635738
- 点赞
- 收藏
- 关注作者
评论(0)