當前位置: 華文問答 > 科學

如何理解矩陣對矩陣求導?

2020-04-30科學

如果題主學過泛函分析,可能會更容易理解矩陣對矩陣的求導。

定義: 假設X 和Y 為賦範向量空間,F: X\rightarrow Y 是一個對映,那麽F 在x_0 \in X 可導的意思是說存在一個有界線性算子L \in \mathcal{L}(X, Y) ,使得對於任意的\epsilon > 0 都存在\delta > 0 ,對於滿足x \in X \backslash \{x_0\}, \|x - x_0\| < \delta 的x 都有\frac{\|F(x) - F(x_0) - L(x - x_0)\|}{\|x - x_0\|} < \epsilon .我們稱L 為F 在x_0 點的導數。

取一些特殊情況,比如當X = \mathbb R^n, Y = \mathbb R 的時候L 就被稱作梯度;當X = \mathbb{R}^n, Y = \mathbb{R}^m 的時候L 被稱作亞可比,等等。從這個一般化的定義出發的好處是,我們可以更好的理解矩陣到矩陣對映的"導數",甚至是從一個函數空間到另一個函數空間的「導數"。

以上定義有一個等價的表述,往往計算起來更方便:對於距離x_0 足夠近的點x ,即\lim_{x \rightarrow x_0}\frac{o(\|x-x_0\|)}{\|x-x_0\|} = 0 ,有
F(x) = F(x_0) + L(x - x_0) + o(\|x - x_0\|).
(註:此處L(x-x_0) 應該理解為線性算子L 在x - x_0 這個點的值,而不是L 乘以x-x_0 。不過在有限維空間所有線性算子都可以用矩陣表述,L 在x - x_0 這個點的值便正好可以表述為矩陣與向量的乘積!這個notation正好巧妙的一致。)

例子: 假設F(X) = X^TX 是一個\mathbb{R}^{m\times n} \rightarrow \mathbb{ S}^n 的對映,其中\mathbb{S }^n 為n維對稱陣的空間。那麽F 的導數L 就應該是\mathbb{R}^{m\times n} \rightarrow \mathbb{ S}^n 的一個有界線性算子。L 究竟是什麽樣可以從定義出發計算:

\begin{align} &F(X+\Delta X) - F(X) \\ =& (X+\Delta X)^T(X+\Delta X) - X^TX\\ =& X^T\Delta X + \Delta X^TX + o(\|\Delta X\|) \end{align}

所以我們有L(\Delta X) = X^T\Delta X + \Delta X^TX ,這個就是F 在X 點的導數。L 這個函數(有界線性算子)可以用張量來表述,這裏就不詳細說了。

例子: 最小平方問題f(x) = \frac{1}{2}\|Ax-b\|_2^2 ,f 是一個\mathbb R^n \rightarrow \mathbb R 的對映。

\begin{align} &f(x+\Delta x) - f(x) \\ =& \frac{1}{2}\|A(x+\Delta x) - b\|^2 - \frac{1}{2}\|Ax - b\|^2\\ =& \frac{1}{2}\|Ax - b + A\Delta x\|^2 - \frac{1}{2}\|Ax - b\|^2\\ =& (Ax - b)^TA\Delta x + o(\|\Delta x\|) \end{align}

所以我們有L(\Delta x) = (Ax - b)^TA\Delta x ,這個就是f 在x 點的導數。在這種情況下,L 這個有界線性算子可以用梯度來表述(recall Riesz表示定理):
L(\Delta x) = \langle \nabla f(x), \Delta x \rangle = \langle A^T(Ax - b), \Delta x \rangle = (Ax-b)^TA\Delta x
所以梯度\nabla f(x) = A^T(Ax - b) 。

例子: 單層神經網絡f(W) = \frac{1}{2}\|\sigma(Wx) - y\|^2_2 ,f 是一個\mathbb{R}^{m \times n } \rightarrow \mathbb{ R } 的對映。這裏\sigma: \mathbb{ R}^m \rightarrow \mathbb{ R}^m 是一個elementwise的logistic function。算起來

\begin{align} & f(W+\Delta W) - f(W) \\ =& \frac{1}{2}\|\sigma(Wx + \Delta Wx) - y\|_2^2 - \frac{1}{2}\|\sigma(Wx) - y\|_2^2\\ =& \frac{1}{2}\|\sigma(Wx) + \sigma(Wx)\odot (\mathbf 1_m - \sigma(Wx)) \odot \Delta W x + o(\|\Delta W\|) - y\|_2^2 - \frac{1}{2}\|\sigma(Wx) - y\|_2^2\\ =& (\sigma(Wx) - y)^T(\sigma(Wx)\odot (\mathbf 1_m - \sigma(Wx)) \odot \Delta W x) + o(\|\Delta W\|) \end{align}

其中\odot 為Hadamard乘積(elementwise乘積),\mathbf 1_m 為長度為m的元素均為1的向量。這裏我使用了一維logistic函數的導數公式。所以
L(\Delta W) = (\sigma(Wx) - y)^T(\sigma(Wx)\odot (\mathbf 1_m - \sigma(Wx)) \odot \Delta W x) 。
註:這個例子的倒數第二步到最後一步的計算影射了微積分中的一個重要的思想——鏈式法則(chain rule)。鏈式法則能夠成立的本質是ao(\|x\|)+bo(\|x\|) = o(\|x\|) 和o(\|x\|)o(\|x\|) = o(\|x\|^2) 。

最後,由於\mathbb{R}^{m \times n} 和\mathbb{R}^{mn} 是同構的,所以可以透過vectorization把矩陣對映到\mathbb{R}^{mn} 中再進行計算,見 @SS Wang 的答案。