一个F范数对矩阵求导例子【2】

问题: 对于 ℓ ( W ) = f ( W ) = ∥ ln ⁡ ( X W ⊙ D ) ∥ F 2 \ell(W)=f(W)=\|\ln (XW \odot D) \|_{F}^{2} (W)=f(W)=ln(XWD)F2, 其导数是多少呢?


1、解法一

大佬直接帮忙给了计算步骤。从结果上看,矩阵的运算维度这些是对的。
在这里插入图片描述
但是第2行怎么来的我没有看懂。于是又请教大佬了,给出了计算的核心是:

用 f r o 范数的定义: ∥ X ∥ F 2 = t r ( X T X ) ,得到 d ∥ X ∥ F 2 = 2 t r ( X T d X ) 。我漏写个系数 2 。 用fro范数的定义:\|X\|_F^2 = tr(X^T X),得到d\|X\|_F^2 = 2tr(X^T dX)。我漏写个系数2。 fro范数的定义:XF2=tr(XTX),得到dXF2=2tr(XTdX)。我漏写个系数2

我试着推算了下,但是没有完全推出来:

d ∥ X ∥ F 2 = d t r ( X T X ) = t r [ d ( X T X ) ] = t r [ d ( X T ) X + X T d X ] = t r [ d ( X T ) X ] + t r [ X T d X ] = t r [ X d ( X T ) ] + t r [ X T d X ] \begin{align} \begin{split} d\|X\|_F^{2} & =d tr(X^T X) \\ & = tr [d(X^T X)] \\ & = tr [d(X^T) X + X^TdX] \\ & = tr [d(X^T) X] + tr[X^TdX] \\ & = tr [Xd(X^T) ] + tr[X^TdX] \\ \end{split} \end{align} dXF2=dtr(XTX)=tr[d(XTX)]=tr[d(XT)X+XTdX]=tr[d(XT)X]+tr[XTdX]=tr[Xd(XT)]+tr[XTdX]
对比大佬的结果是 2 t r ( X T d X ) 2tr(X^T dX) 2tr(XTdX), 则我的推算中应该存在如下等式:
t r [ X d X T ] = t r ( X T d X ) \begin{align} \begin{split} tr [XdX^T ] =tr(X^T dX) \end{split} \end{align} tr[XdXT]=tr(XTdX)

但我没找到直接的相关依据,然后经大佬再次答疑,回复如下:

交换矩阵顺序以及取转置,都不改变 t r 。故有 t r ( X d X T ) = t r ( X T d X ) ,都表示 X 和 d X 的内积,展开来写是 ∑ i , j X i , j d X i , j 。 交换矩阵顺序以及取转置,都不改变tr。故有tr(X dX^T)=tr(X^T dX),都表示X和dX的内积,展开来写是 \sum_{i,j} X_{i,j} dX_{i, j}。 交换矩阵顺序以及取转置,都不改变tr。故有tr(XdXT)=tr(XTdX),都表示XdX的内积,展开来写是i,jXi,jdXi,j

直接当结论记住吧。

再次感谢大佬的耐心答疑!膜拜!

2、解法二

S = ln ⁡ ( X W ⊙ D ) , Ψ = ( X W ⊙ D ) . − 1 S=\ln (XW \odot D), \Psi=(XW \odot D).^{-1} S=ln(XWD),Ψ=(XWD).1
∂ f ∂ S = 2 S = 2 ( ln ⁡ ( X W ⊙ D ) ) \begin{align} \begin{split} \frac{\partial{f}}{\partial{S}}=2S=2(\ln (XW \odot D)) \end{split} \end{align} Sf=2S=2(ln(XWD))

d f = t r [ ( ∂ f ∂ S ) T d S ] = t r [ ( ∂ f ∂ S ) T d ( ln ⁡ ( X W ⊙ D ) ) ] = t r [ ( ∂ f ∂ S ) T ( X W ⊙ D ) . − 1 d ( X W ⊙ D ) ] = t r [ ( ∂ f ∂ S ) T Ψ d ( X W ⊙ D ) ] = t r [ ( Ψ T ∂ f ∂ S ) T d ( X W ⊙ D ) ] = t r [ ( Ψ T ∂ f ∂ S ⊙ D ) T d ( X W ) ] = t r [ ( Ψ T ∂ f ∂ S ⊙ D ) T X d W ] = t r [ ( X T ( Ψ T ∂ f ∂ S ⊙ D ) ) T d W ] \begin{align} \begin{split} df&=tr[(\frac{\partial{f}}{\partial{S}})^TdS] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^Td(\ln (XW \odot D))] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^T (XW \odot D).^{-1}d (XW \odot D) ] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^T \Psi d (XW \odot D) ] \\ &=tr[( \Psi^T \frac{\partial{f}}{\partial{S}})^T d (XW \odot D) ] \\ &=tr[( \Psi^T \frac{\partial{f}}{\partial{S}} \odot D)^T d (XW) ] \\ &=tr[( \Psi^T \frac{\partial{f}}{\partial{S}} \odot D)^T XdW ] \\ &=tr[(X^T (\Psi^T \frac{\partial{f}}{\partial{S}} \odot D))^T dW ] \\ \end{split} \end{align} df=tr[(Sf)TdS]=tr[(Sf)Td(ln(XWD))]=tr[(Sf)T(XWD).1d(XWD)]=tr[(Sf)TΨd(XWD)]=tr[(ΨTSf)Td(XWD)]=tr[(ΨTSfD)Td(XW)]=tr[(ΨTSfD)TXdW]=tr[(XT(ΨTSfD))TdW]
所以

d ℓ ( W ) d W = d f ( W ) d W = X T ( Ψ T ∂ f ∂ S ⊙ D ) = 2 X T [ { ( X W ⊙ D ) . − 1 } T ln ⁡ ( X W ⊙ D ) ⊙ D ] \begin{align} \begin{split} \frac{d \ell(\mathbf{W})}{d \mathbf{W}}& = \frac{d f(\mathbf{W})}{d \mathbf{W}} \\ &=X^T (\Psi^T \frac{\partial{f}}{\partial{S}} \odot D) \\ &=2X^T [\{(XW \odot D).^{-1}\}^T \ln (XW \odot D) \odot D] \end{split} \end{align} dWd(W)=dWdf(W)=XT(ΨTSfD)=2XT[{(XWD).1}Tln(XWD)D]

和大佬的结果对比,不仅在形式上差别很大,而且矩阵的维度层面根本没法运算。

大佬回复如下:

推导有一处错误:逐元素函数微分那一项,中间是逐元素乘法,
而不是矩阵乘法,即d ln(XW⊙D) = (XW⊙D).^{-1} ⊙ d(XW⊙D)。其他步骤都正确。

重新推算:
d f = t r [ ( ∂ f ∂ S ) T d S ] = t r [ ( ∂ f ∂ S ) T d ( ln ⁡ ( X W ⊙ D ) ) ] = t r [ ( ∂ f ∂ S ) T { ( X W ⊙ D ) . − 1 ⊙ d ( X W ⊙ D ) } ] = t r [ ( ∂ f ∂ S ) T { Ψ ⊙ d ( X W ⊙ D ) } ] = t r [ ( ∂ f ∂ S ⊙ Ψ ) T d ( X W ⊙ D ) ] = t r [ ( ∂ f ∂ S ⊙ Ψ ) T d ( D ⊙ X W ) ] = t r [ ( ∂ f ∂ S ⊙ Ψ ) T ( D ⊙ d ( X W ) ) ] = t r [ ( ∂ f ∂ S ⊙ Ψ ⊙ D ) T d ( X W ) ] = t r [ ( ∂ f ∂ S ⊙ Ψ ⊙ D ) T X d W ] = t r [ ( X T ( ∂ f ∂ S ⊙ Ψ ⊙ D ) ) T X d W ] \begin{align} \begin{split} df&=tr[(\frac{\partial{f}}{\partial{S}})^TdS] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^Td(\ln (XW \odot D))] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^T \{(XW \odot D).^{-1} \odot d (XW \odot D)\} ] \\ &=tr[(\frac{\partial{f}}{\partial{S}})^T \{ \Psi \odot d (XW \odot D)\} ] \\ &=tr[(\frac{\partial{f}}{\partial{S}} \odot \Psi)^T d (XW \odot D) ] \\ &=tr[(\frac{\partial{f}}{\partial{S}} \odot \Psi)^T d (D \odot XW ) ] \\ &=tr[(\frac{\partial{f}}{\partial{S}} \odot \Psi)^T (D \odot d (XW) ) ] \\ &=tr[(\frac{\partial{f}}{\partial{S}} \odot \Psi \odot D)^T d (XW) ] \\ &=tr[(\frac{\partial{f}}{\partial{S}} \odot \Psi \odot D)^T Xd W ] \\ &=tr[(X^T(\frac{\partial{f}}{\partial{S}} \odot \Psi \odot D))^T Xd W ] \\ \end{split} \end{align} df=tr[(Sf)TdS]=tr[(Sf)Td(ln(XWD))]=tr[(Sf)T{(XWD).1d(XWD)}]=tr[(Sf)T{Ψd(XWD)}]=tr[(SfΨ)Td(XWD)]=tr[(SfΨ)Td(DXW)]=tr[(SfΨ)T(Dd(XW))]=tr[(SfΨD)Td(XW)]=tr[(SfΨD)TXdW]=tr[(XT(SfΨD))TXdW]

所以
d ℓ ( W ) d W = d f ( W ) d W = X T ( ∂ f ∂ S ⊙ Ψ ⊙ D ) = 2 X T [ ln ⁡ ( X W ⊙ D ) ⊙ ( X W ⊙ D ) . − 1 ⊙ D ] \begin{align} \begin{split} \frac{d \ell(\mathbf{W})}{d \mathbf{W}}& = \frac{d f(\mathbf{W})}{d \mathbf{W}} \\ &=X^T(\frac{\partial{f}}{\partial{S}} \odot \Psi \odot D) \\ &=2X^T[\ln (XW \odot D) \odot (XW \odot D).^{-1} \odot D] \\ \end{split} \end{align} dWd(W)=dWdf(W)=XT(SfΨD)=2XT[ln(XWD)(XWD).1D]

终于和大佬的结果一致了,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值