当前位置: 华文问答 > 科学

如何理解矩阵对矩阵求导?

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 的答案。