问题: 对于 ℓ ( W ) = f ( W ) = ∥ ln ( X W ⊙ D ) ∥ F 2 \ell(W)=f(W)=\|\ln (XW \odot D) \|_{F}^{2} ℓ(W)=f(W)=∥ln(XW⊙D)∥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范数的定义:∥X∥F2=tr(XTX),得到d∥X∥F2=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}
d∥X∥F2=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),都表示X和dX的内积,展开来写是∑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(XW⊙D),Ψ=(XW⊙D).−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}
∂S∂f=2S=2(ln(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
[
(
Ψ
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[(∂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 ) 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(ΨT∂S∂f⊙D)=2XT[{(XW⊙D).−1}Tln(XW⊙D)⊙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[(∂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
)
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(∂S∂f⊙Ψ⊙D)=2XT[ln(XW⊙D)⊙(XW⊙D).−1⊙D]
终于和大佬的结果一致了,感谢!