一、矩阵对矩阵求导的定义
假如有p×q矩阵F要对m×n的矩阵X求导,根据第一篇求导布局的定义,矩阵F的pq个元素要对矩阵X的mn个值分别求导,所以求导结果一共有mnpq个,求导的结果如何排列:
1.1 两种求导的定义:
二、矩阵对矩阵求导的微分法
向量化的矩阵对矩阵求导,主要是为了使用类似于前面讲过的微分法求导。之前(三)标量对向量矩阵求导的微分法里有:
搜索
【机器学习中的矩阵求导】(五)矩阵对矩阵求导
28 篇文章12 订阅
学习总结
(1)这个task所有求导布局都是分母布局。为了适配矩阵对矩阵的求导,这次的向量对向量的求导,也是以分母布局为准(和之前的不一样)。
(2)由于矩阵对矩阵求导的结果包含【克罗内克积,Kronecker积】,因此和之前的其他类型的矩阵求导不同,在机器学习算法优化中,一般不在推导的时候使用矩阵对矩阵的求导,除非只是做定性的分析。如果遇到矩阵对矩阵的求导不好绕过,一般可以使用机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则中第三节最后的几个链式法则公式来避免。
文章目录
一、矩阵对矩阵求导的定义
假如有p×q矩阵F要对m×n的矩阵X求导,根据第一篇求导布局的定义,矩阵F的pq个元素要对矩阵X的mn个值分别求导,所以求导结果一共有mnpq个,求导的结果如何排列:
1.1 两种求导的定义:
(1)矩阵 F FF 对矩阵 X XX中的每个值 X i j X_{i j}Xij 求导,这样对于矩阵 X XX 每一个位置 ( i , j ) (i, j )(i,j)求导得到一个矩阵∂ F ∂ X i j \frac{\partial F}{\partial X_{i j}}∂Xij∂F可以理解为矩阵X XX的每个位置都被替换为一个p×q的矩阵,最后得到一个mp×nq的矩阵。
(2)和1类似,可以看做矩阵F FF中的每个值F k l F_{k l}Fkl分别对矩阵 X XX 求导,即矩阵 F FF中每一个位置( k , l ) (k, l)(k,l)对矩阵X XX求导得到一个矩阵∂ F k l ∂ X \dfrac{\partial F_{k l}}{\partial X}∂X∂Fkl,可以理解为矩阵F FF的每个位置都被替换成一个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 AA是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 avec(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}=IKmn=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