问题: 对于ℓ(W)=f(W)=∥ln(XW⊙D)∥F2\ell(W)=f(W)=\|\ln (XW \odot D) \|_{F}^{2}ℓ(W)=f(W)=∥ln(XW⊙D)∥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范数的定义:∥X∥F2=tr(XTX),得到d∥X∥F2=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} d∥X∥F2=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),都表示X和dX的内积,展开来写是∑i,jXi,jdXi,j。
直接当结论记住吧。
再次感谢大佬的耐心答疑!膜拜!
2、解法二
令S=ln(XW⊙D),Ψ=(XW⊙D).−1S=\ln (XW \odot D), \Psi=(XW \odot D).^{-1}S=ln(XW⊙D),Ψ=(XW⊙D).−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}
∂S∂f=2S=2(ln(XW⊙D))
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[(∂S∂f)TdS]=tr[(∂S∂f)Td(ln(XW⊙D))]=tr[(∂S∂f)T(XW⊙D).−1d(XW⊙D)]=tr[(∂S∂f)TΨd(XW⊙D)]=tr[(ΨT∂S∂f)Td(XW⊙D)]=tr[(ΨT∂S∂f⊙D)Td(XW)]=tr[(ΨT∂S∂f⊙D)TXdW]=tr[(XT(ΨT∂S∂f⊙D))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(ΨT∂S∂f⊙D)=2XT[{(XW⊙D).−1}Tln(XW⊙D)⊙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[(∂S∂f)TdS]=tr[(∂S∂f)Td(ln(XW⊙D))]=tr[(∂S∂f)T{(XW⊙D).−1⊙d(XW⊙D)}]=tr[(∂S∂f)T{Ψ⊙d(XW⊙D)}]=tr[(∂S∂f⊙Ψ)Td(XW⊙D)]=tr[(∂S∂f⊙Ψ)Td(D⊙XW)]=tr[(∂S∂f⊙Ψ)T(D⊙d(XW))]=tr[(∂S∂f⊙Ψ⊙D)Td(XW)]=tr[(∂S∂f⊙Ψ⊙D)TXdW]=tr[(XT(∂S∂f⊙Ψ⊙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(∂S∂f⊙Ψ⊙D)=2XT[ln(XW⊙D)⊙(XW⊙D).−1⊙D]
终于和大佬的结果一致了,感谢!