【矩陣求導】關於點乘 (哈達瑪積)的矩陣求導
在之前的博文中我們提到過,最好的求取矩陣梯度的方法就是將矩陣寫成微分的形式:
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(B∗C))=tr((A∗BT)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((A−P∗BX)H(A−P∗BX))
其中
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(−(PH∗XHBH)A+(PH∗XHBH)(P∗BX))=dtr(−A(PH∗XHBH))+d((P∗BX)(PH∗XHBH))=dtr(−(A∗P∗)XHBH))+d((P∗BX)∗P∗)XHBH))=dtr(−BH(A∗P∗)XH))+d(BH(P∗BX)∗P∗)XH))=tr(BH((P∗BX)−A)∗P∗)d(XH))
可以得到梯度為 B H ( ( P ∗ B X ) − A ∗ P ∗ ) B^{H}\left(\left(P^{*} B X\right)-A* P^{*}\right) BH((P∗BX)−A∗P∗)。
技巧: 反覆使用
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(B∗C))=tr((A∗BT)C)
使得自變數
X
X
X不參與哈達瑪積的運算。
相關文章
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- 矩陣求導矩陣求導
- 矩陣求導(二)矩陣求導
- 矩陣求導(一)矩陣求導
- 矩陣求導公式【轉】矩陣求導公式
- 機器學習中的矩陣向量求導(四) 矩陣向量求導鏈式法則機器學習矩陣求導
- 向量和矩陣求導公式總結矩陣求導公式
- 求任意矩陣的伴隨矩陣矩陣
- 矩陣求逆矩陣
- 矩陣求最短路徑矩陣
- 矩陣連乘矩陣
- 旋轉矩陣推導矩陣
- CUDA 版本矩陣乘矩陣
- gauss_jordan法求矩陣的逆矩陣
- 協方差矩陣推導1矩陣
- python中有關矩陣的建立、求逆、轉置Python矩陣
- 矩陣連乘問題矩陣
- hdu 1757 矩陣連乘矩陣
- 三維旋轉矩陣推導矩陣
- 二維旋轉矩陣推導矩陣
- 巨大的矩陣(矩陣加速)矩陣
- 矩陣類及其常規運算(加、減、乘、轉置、求逆、行列式、代數餘子式、伴隨矩陣)矩陣
- PTA 7-9 求矩陣每行元素的和矩陣
- CUDA版本稀疏矩陣向量乘矩陣
- OpenMP 版本稀疏矩陣向量乘矩陣
- 3D旋轉矩陣的推導3D矩陣
- 生成螺旋矩陣(方陣、矩陣)矩陣
- 關聯矩陣矩陣
- 伴隨矩陣和逆矩陣的關係證明矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 鄰接矩陣、度矩陣矩陣
- 3D圖形:矩陣的行列式,矩陣的逆、正交矩陣、齊次矩陣3D矩陣
- numpy.linalg包函式用法集錦(求逆矩陣,求矩陣行列式的值,求特徵值和特徵向量,解方程組)函式矩陣特徵
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 矩陣中最大的二維矩陣矩陣
- [OpenGL](翻譯+補充)投影矩陣的推導矩陣
- 動態規劃&矩陣連乘動態規劃矩陣
- 《神經網路的梯度推導與程式碼驗證》之數學基礎篇:矩陣微分與求導神經網路梯度矩陣求導