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

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


1、解法一

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

用fro范数的定义:∥X∥F2=tr(XTX),得到d∥X∥F2=2tr(XTdX)。我漏写个系数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∥F2=dtr(XTX)=tr[d(XTX)]=tr[d(XT)X+XTdX]=tr[d(XT)X]+tr[XTdX]=tr[Xd(XT)]+tr[XTdX] \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]
对比大佬的结果是 2tr(XTdX)2tr(X^T dX)2tr(XTdX), 则我的推算中应该存在如下等式:
tr[XdXT]=tr(XTdX) \begin{align} \begin{split} tr [XdX^T ] =tr(X^T dX) \end{split} \end{align} tr[XdXT]=tr(XTdX)

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

交换矩阵顺序以及取转置,都不改变tr。故有tr(XdXT)=tr(XTdX),都表示X和dX的内积,展开来写是∑i,jXi,jdXi,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⁡(XW⊙D),Ψ=(XW⊙D).−1S=\ln (XW \odot D), \Psi=(XW \odot D).^{-1}S=ln(XWD),Ψ=(XWD).1
∂f∂S=2S=2(ln⁡(XW⊙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))

df=tr[(∂f∂S)TdS]=tr[(∂f∂S)Td(ln⁡(XW⊙D))]=tr[(∂f∂S)T(XW⊙D).−1d(XW⊙D)]=tr[(∂f∂S)TΨd(XW⊙D)]=tr[(ΨT∂f∂S)Td(XW⊙D)]=tr[(ΨT∂f∂S⊙D)Td(XW)]=tr[(ΨT∂f∂S⊙D)TXdW]=tr[(XT(ΨT∂f∂S⊙D))TdW] \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)dW=df(W)dW=XT(ΨT∂f∂S⊙D)=2XT[{(XW⊙D).−1}Tln⁡(XW⊙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)。其他步骤都正确。

重新推算:
df=tr[(∂f∂S)TdS]=tr[(∂f∂S)Td(ln⁡(XW⊙D))]=tr[(∂f∂S)T{(XW⊙D).−1⊙d(XW⊙D)}]=tr[(∂f∂S)T{Ψ⊙d(XW⊙D)}]=tr[(∂f∂S⊙Ψ)Td(XW⊙D)]=tr[(∂f∂S⊙Ψ)Td(D⊙XW)]=tr[(∂f∂S⊙Ψ)T(D⊙d(XW))]=tr[(∂f∂S⊙Ψ⊙D)Td(XW)]=tr[(∂f∂S⊙Ψ⊙D)TXdW]=tr[(XT(∂f∂S⊙Ψ⊙D))TXdW] \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)dW=df(W)dW=XT(∂f∂S⊙Ψ⊙D)=2XT[ln⁡(XW⊙D)⊙(XW⊙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、付费专栏及课程。

余额充值