【矩陣求導】關於點乘 (哈達瑪積)的矩陣求導

B417科研筆記發表於2020-11-01

之前的博文中我們提到過,最好的求取矩陣梯度的方法就是將矩陣寫成微分的形式:

d f \mathrm{d}f df 化成 d f = t r ( G d X ) \mathrm{d}f=\mathrm{tr}(\mathbf{G}\mathrm{d}\mathbf{X}) df=tr(GdX)的形式, 就可以得到 ∇ f = G T \nabla f = \mathbf{G}^T f=GT

在大部分情形中, d f \mathrm{d}f df的結果都是包含了一堆矩陣相乘而 d X \mathrm{d}\mathbf{X} dX在其中的形式, 這時候可以通過 t r ( A B ) = t r ( B A ) \mathrm{tr}(AB) = \mathrm{tr}(BA) tr(AB)=tr(BA) d X \mathrm{d}\mathbf{X} dX移位到最後, 從而得到 d f = t r ( G d X ) \mathrm{d}f=\mathrm{tr}(\mathbf{G}\mathrm{d}\mathbf{X}) df=tr(GdX)的形式。

今天要討論的是一種較為棘手的場景, 即當 f f f中包含哈達瑪積的情況時。 由於哈達瑪積不能像矩陣相乘一樣在跡中任意的移位,那麼該如何求導呢?

利用哈達瑪積的重要性質:

tr ⁡ ( A ( B ∗ C ) ) = tr ⁡ ( ( A ∗ B T ) C ) \operatorname{tr}\left(A(B * C)\right)=\operatorname{tr}\left(\left(A * B^{\mathrm{T}}\right) C\right) tr(A(BC))=tr((ABT)C)
這裡 ∗ * 就代表哈達瑪積(也就是點乘)。 這個性質非常容易證明, 只需要證明左右兩邊的兩個矩陣的對角線元素都是相等的就可以了。 那麼,我們可以使用這一結論對點乘的情形就行求導。

以例子來說明, 首先是簡單的LS問題:
f ( X ) = t r ( ( A − P ∗ B X ) H ( A − P ∗ B X ) ) f(X) = \mathrm{tr}\left((A - P*BX)^H(A-P*BX)\right) f(X)=tr((APBX)H(APBX))
其中 X X X為複數, 因此我們只需將 d ( f ( X ) ) = t r ( G d ( X H ) ) \mathrm{d}(f(X))=\mathrm{tr}(G\mathrm{d}(X^H)) d(f(X))=tr(Gd(XH))的形式化出, G G G就是我們要求取的導數。

因此:
d f ( X ) = d t r ( − ( P H ∗ X H B H ) A + ( P H ∗ X H B H ) ( P ∗ B X ) ) = d t r ( − A ( P H ∗ X H B H ) ) + d ( ( P ∗ B X ) ( P H ∗ X H B H ) ) = d t r ( − ( A ∗ P ∗ ) X H B H ) ) + d ( ( P ∗ B X ) ∗ P ∗ ) X H B H ) ) = d t r ( − B H ( A ∗ P ∗ ) X H ) ) + d ( B H ( P ∗ B X ) ∗ P ∗ ) X H ) ) = t r ( B H ( ( P ∗ B X ) − A ) ∗ P ∗ ) d ( X H ) ) \begin{array}{l} {\rm{d}}f(X) = {\rm{dtr}}( - ({P^H}*{X^H}{B^H})A + ({P^H}*{X^H}{B^H})(P*BX))\\ = {\rm{dtr}}( - A({P^H}*{X^H}{B^H})) + {\rm{d}}((P*BX)({P^H}*{X^H}{B^H}))\\ = {\rm{dtr}}( - (A*{P^*}){X^H}{B^H})) + {\rm{d}}((P*BX)*{P^*}){X^H}{B^H}))\\ = {\rm{dtr}}( - {B^H}(A*{P^*}){X^H})) + {\rm{d}}({B^H}(P*BX)*{P^*}){X^H}))\\ = {\rm{tr}}({B^H}((P*BX) - A)*{P^*}){\rm{d}}({X^H})) \end{array} df(X)=dtr((PHXHBH)A+(PHXHBH)(PBX))=dtr(A(PHXHBH))+d((PBX)(PHXHBH))=dtr((AP)XHBH))+d((PBX)P)XHBH))=dtr(BH(AP)XH))+d(BH(PBX)P)XH))=tr(BH((PBX)A)P)d(XH))

可以得到梯度為 B H ( ( P ∗ B X ) − A ∗ P ∗ ) B^{H}\left(\left(P^{*} B X\right)-A* P^{*}\right) BH((PBX)AP)

技巧: 反覆使用 tr ⁡ ( A ( B ∗ C ) ) = tr ⁡ ( ( A ∗ B T ) C ) \operatorname{tr}\left(A(B * C)\right)=\operatorname{tr}\left(\left(A * B^{\mathrm{T}}\right) C\right) tr(A(BC))=tr((ABT)C)
使得自變數 X X X不參與哈達瑪積的運算。

相關文章