SVD¶
约 6524 个字 1 张图片 预计阅读时间 33 分钟
谱定理¶
对于任意实对称矩阵\(\boldsymbol M \in \mathbb{R}^{n \times n}\)都存在谱分解(也称特征值分解)
其中\(\boldsymbol U,\boldsymbol{\Lambda} \in \mathbb{R}^{n \times n}\),并且\(\boldsymbol{U}\)是正交矩阵\(\boldsymbol{\Lambda} = \operatorname{diag}(\lambda_1, \cdots, \lambda_n)\)是对角矩阵
谱定理的几何特性:实对称矩阵代表的线性变换会将单位圆缩放为椭圆,椭圆的缩放方向为特征向量,在 zhihu 中有二维的可视化结果。这说明实对称矩阵的变换没有旋转(rotation),也没有剪切(shear),只有单纯的缩放,因为任何的旋转和剪切效应都会破坏实对称性质
证明谱定理最简单的方式是数学归纳法。假设对于\(n-1\)维的实对称矩阵能够被对角化,证明\(n\)维的实对称矩阵能够被对角化。对于一维的矩阵,显然成立,第一块积木推倒。现在对于实对称矩阵\(\boldsymbol M \in \mathbb{R}^{n \times n}\),设\(\lambda_1\)是其一个非零特征值(可以证明实对称矩阵至少有一个特征值),对应的特征向量为\(\boldsymbol{u}_1\)。将\(\boldsymbol{u}_1\)扩展成为一组正交基,其余的基向量为\(\boldsymbol{Q} = (\boldsymbol{q}_2, \ldots, \boldsymbol{q}_n)\)
现在将矩阵\((\boldsymbol u_1, \boldsymbol Q)^\top \boldsymbol M (\boldsymbol u_1,\boldsymbol Q)\)表示为分块矩阵:
其中\(\boldsymbol B=\boldsymbol Q^\top \boldsymbol M \boldsymbol Q\),是一个\(n-1\)维的实对称矩阵。根据数学归纳假设,该矩阵可以被对角化,所以将其表示为\(\boldsymbol{B} = \boldsymbol{V} \boldsymbol{\Lambda}_1 \boldsymbol{V}^\top\),其中\(\boldsymbol V\)是\(n-1\)维的正交矩阵,通过将\(\boldsymbol B\)展开,然后把\(\boldsymbol V\)移到左侧可得到
于是乎,我们可以得到
此时我们就证明了 n 维实对称矩阵也是可以被对角化的
SVD 的存在性证明¶
有了谱定理过后能够比较轻松地证明 SVD 存在性。为了更符合机器学习的习惯,我这里用\(\boldsymbol M \in \mathbb{R}^{n \times k}\)来表示,其中可以理解为\(n\)数据的数量,而\(k\)则表示数据的维度,这个 notation 在之后讨论 PCA 的时候也会使用。现在我们先拿出 SVD 的结论:
对于任意矩阵\(\boldsymbol M \in \mathbb{R}^{n \times k}\),都可以找到如下形式的奇异值分解(SVD,Singular Value Decomposition)
其中\(\boldsymbol U \in \mathbb R^{n\times n}, \boldsymbol V\in \mathbb R^{k\times k}\)都是正交矩阵,\(\boldsymbol\Sigma \in \mathbb R^{n\times k}\)是非负对角阵
并且对角线元素从大到小排布:\(\sigma_1\ge \sigma_2 \ge \sigma_3\ge...\ge0\),这些对角线元素就称为奇异值
在证明 SVD 的存在性之前,可以直观推倒:如果矩阵是一个实对称矩阵,那么 SVD 结论就退化成为谱定理,即:谱定理是 SVD 中的特例情况。但事实还要更有趣一点,谱定理和 SVD 可以有更复杂的互动:我们可以简单地构造实对称矩阵\(\boldsymbol M^\top \boldsymbol M\)或者\(\boldsymbol M \boldsymbol M^\top\),这样的矩阵就符合谱定理。而如果我们将 SVD 的结论带入到上面构造的对称矩阵当中
有趣的事情发生了,我们直接得到了\(\boldsymbol{M}\boldsymbol{M}^{\top}\)和\(\boldsymbol{M}^{\top}\boldsymbol{M}\)的谱分解结果!换句话说:SVD 分解中的\(\boldsymbol U, \boldsymbol V, \boldsymbol \Sigma\)其实就是谱分解中对应的特征向量、特征值的平方根
其实以上互动也给我们证明 SVD 的存在性提供了很好的方向:从某一个实对称矩阵的谱分解出发(e.g.\(\boldsymbol{M}^{\top}\boldsymbol{M}\)),获得其特征向量(e.g.\(\boldsymbol V\)),利用 SVD 的形式直接构造出另外一组向量\(\boldsymbol U\),我们只需要证明这一组向量是相互正交的,即可证明 SVD 的存在性
我们设\(\boldsymbol{M}^{\top}\boldsymbol{M}\)的谱分解为\(\boldsymbol{M}^{\top}\boldsymbol{M} =\boldsymbol V \boldsymbol \Lambda\boldsymbol V^\top\),并且不失一般性设\(\boldsymbol M\)的 rank 为\(r\),\(\boldsymbol \Lambda\)的特征值排列为降序排列,并且由于\(\boldsymbol{M}^{\top}\boldsymbol{M}\)是半正定矩阵,其特征值都为非负数
OK,一切准备就绪,开始构造\(\boldsymbol U\)
由于 rank 的限制,只构造了\(r\)个向量。现在我们来证明这 r 个向量是相互正交的
可以看到,基于谱分解的结论,很快就消除了各个部分,得到了正交结论。此时可以直接把\(\boldsymbol U_{[:n,:r]}\)扩充成为完整的正交基即可得到完成的\(\boldsymbol U\)矩阵。但是我们其实还没有直接证明 SVD 的存在,因为不管是我们构造的\(\boldsymbol U_{[:n,:r]}\)还是扩充的\(\boldsymbol U\)都没有直接地以 SVD 的形式给出,\(\boldsymbol M\)始终在等式的右侧并且与其他矩阵相乘。不过我们现在手上的材料足够多,要直接证明 SVD 的形式已经不难了
我们首先从未扩充版本的 SVD 形式开始推,直接带入我们之前的\(\boldsymbol U_{[:n,:r]}\)结论
现在只需要证明\(\boldsymbol{M}\boldsymbol{V}_{[:k,:r]}\boldsymbol{V}_{[:k,:r]}^{\top} = \boldsymbol M\)然后扩充我们的结论为完整的 SVD 即可
上述证明的关键就是在第三个等式,利用了特征值为0的特征向量的性质:\(\boldsymbol M \boldsymbol v_i=0\)
最后将\(\boldsymbol{U}_{[:n,:r]}\boldsymbol{\Sigma}_{[:r,:r]}\boldsymbol{V}_{[:k,:r]}^{\top}=\boldsymbol M\)进行扩充,即可得到完整的 SVD 形式
降维¶
废了不少劲证明了 SVD 的存在性,但是还是没体会到其妙处。现在我们通过机器学习中的降维为例子,来一探 SVD 的妙处。
首先我们可能希望了解:我们为什么需要降维?我们从一个高维的反直觉思维开始:在高维当中单位球体的体积趋近于 0,而单位立方体的体积永远都是1,高维球体体积的计算公式如下:
分母伽马函数的增长速度远超分子,所以随着维度的增加,体积迅速减少。这体现了高维空间的数据稀疏性。稀疏性的本质来源于维度灾难,这里有另一个直观的解释
From DeepSeek
- 一维空间(一条线):
假设我们有一条长度为1米的线段。我们在这条线上均匀地撒上100个点。这些点会非常密集,相邻点之间的距离大约是1厘米。空间感觉很“满”。
- 二维空间(一个正方形):
现在,我们扩展到一个1米 x 1米的正方形平面。为了保持和线上同样的“密度”(即单位面积内的点数),我们需要多少点?我们需要 10,000 个点!因为现在点不仅要覆盖长度,还要覆盖宽度。如果还是只有100个点,它们在这个平面上就会显得非常稀疏、孤零零的。
- 三维空间(一个立方体):
再进一步,到一个1米 x 1米 x 1米的立方体。要保持同样的密度,我们需 1,000,000 个点!如果还是只有100个点,那么这些点就像宇宙中寥寥无几的星星,彼此之间的距离非常遥远。
球壳上的体积变得异常的大,你可以想象将多维球壳向外扩展 10%,将会带来体积的爆炸性增长,这就是因为每一个维度都要向前扩展 10% 形成了维度灾难,此时增加的球壳体积会远远超过球体的体积
维度灾难带来的部分挑战:
- 距离度量失效:高维空间中的各个点的距离都差不多(e.g. 数据都集中在球壳上,距离原点的距离都是一样的),导致了以距离为基础的机器学习方法直接失效(KNN、聚类)
- 采样困难:在高维空间中的采样随着维度增加指数上升
所以降维能够带来计算和度量上的便利,并且我们常常希望找到事物中的核心影响因素,保留最重要的维度,所以降维的好处是不言而喻的。不过我觉得仍要从两面性来看待维度灾难:
- 希望简化计算复杂度时,使用降维能够极其有效地带来收益
- 希望增加模型能力/容量时,利用维度的上升也可带来模型容量的快速提升
最大投影方差¶
最大投影方差的思路是:寻找一个方向,数据点在该方向上的投影方差最大(i.e. 该方向是最能区分数据之间差别的方向)。接下来做一些 Notation:
-
数据样本\(X \in \mathbb R^{n\times k}\),数据样本个数为\(n\),维度为\(k\)
-
中心矩阵\(H \in \mathbb R^{n\times n}\),其作用是将数据进行中心化,等价于
X - torch.mean(X, dim=0, keep_dim=True)\[ H = I_n - \frac{1}{n}1_n1_n^\top \]其中\(1_n\)为一个全 1 的向量\(1_n \in \mathbb R^{n\times1}\)。中心化过后的数据样本即为\(HX = X-\overline X\)。中心矩阵有两个常用的性质\(H^T=H\),\(H^2=H\),其中第二个性质也比较好理解:对中心化过后的数据再做中心化是不变的
-
数据的方差矩阵\(S \in \mathbb R^{k\times k}\)表示
\[ S=(X-\overline X)^\top(X-\overline X)=(HX)^\top(HX)=X^\top H X \]真正的方差就是求对\(S\)求和,然后除以样本个数
接下来可以直接根据思路写出优化目标:投影的方差最小。我们先写出投影的方差矩阵
接着可以写出优化目标,找到最优的方向\(u\)使得方差最大
解这个方法直接用 lagrange 乘子法
最终发现,我们要找到的\(u\)就是矩阵\(S\)的特征向量,\(\lambda\)就是对应的特征值!此时最优的\(L=\lambda\),那么我们就选择特征值最大的特征向量即可。此时我们可以根据特征值的大小,选择最重要的 topk 个特征向量作为投影方向
最小重构代价¶
我认为最小重构代价更为直观一点,更能贴合我们降维的目的:维度降低,但是信息量减少最少。在 zhihu-白板机器学习-降维 中使用了构造一个正交基的方法来证明最小重构代价,最后只需要放弃特征值最小的特征向量即可。这里我整理我自己的思路,最终推导出和最大投影方差相同的结论
我同样聚焦于一个向量:把(已中心化)数据投影到向量上\(u\),计算得到投影过后的新数据坐标,要求新数据与原始数据的 F-范数最小
接下来的证明求助了 DeepSeek,我自己是没证出来的,其中运用了 trace 的性质
From DeepSeek
由于Frobenius范数的平方等于矩阵迹的形式,有:
\[ J(\mathbf{u}) = \operatorname{tr} \left( (\mathbf{X} - \mathbf{X} \mathbf{u} \mathbf{u}^T)^T (\mathbf{X} - \mathbf{X} \mathbf{u} \mathbf{u}^T) \right) \]展开括号内的表达式
\[ (\mathbf{X} - \mathbf{X} \mathbf{u} \mathbf{u}^T)^T (\mathbf{X} - \mathbf{X} \mathbf{u} \mathbf{u}^T) = \mathbf{X}^T \mathbf{X} - \mathbf{X}^T \mathbf{X} \mathbf{u} \mathbf{u}^T - \mathbf{u} \mathbf{u}^T \mathbf{X}^T \mathbf{X} + \mathbf{u} \mathbf{u}^T \mathbf{X}^T \mathbf{X} \mathbf{u} \mathbf{u}^T \]令\(\mathbf{S} = \mathbf{X}^T \mathbf{X}\),带入上式得到
\[ J(\mathbf{u}) = \operatorname{tr} \left( \mathbf{S} - \mathbf{S} \mathbf{u} \mathbf{u}^T - \mathbf{u} \mathbf{u}^T \mathbf{S} + \mathbf{u} \mathbf{u}^T \mathbf{S} \mathbf{u} \mathbf{u}^T \right) \]由 trace 性质可以将其展开 wiki-trace 为四项
-\(\operatorname{tr}(\mathbf{S})\)是常数,与\(\mathbf{u}\)无关。
-\(\operatorname{tr}(\mathbf{S} \mathbf{u} \mathbf{u}^T) = \operatorname{tr}(\mathbf{u}^T \mathbf{S} \mathbf{u}) = \mathbf{u}^T \mathbf{S} \mathbf{u}\)(因为\(\mathbf{u}^T \mathbf{S} \mathbf{u}\)是标量)。参考 wiki-trace 有性质:\(\operatorname tr(AB)=\operatorname tr(BA)\)
-\(\operatorname{tr}(\mathbf{u} \mathbf{u}^T \mathbf{S}) = \operatorname{tr}(\mathbf{u}^T \mathbf{S} \mathbf{u}) = \mathbf{u}^T \mathbf{S} \mathbf{u}\)。
-\(\operatorname{tr}(\mathbf{u} \mathbf{u}^T \mathbf{S} \mathbf{u} \mathbf{u}^T)\):注意\(\mathbf{u}^T \mathbf{S} \mathbf{u}\)是标量,记为\(c\),则\(\mathbf{u} \mathbf{u}^T \mathbf{S} \mathbf{u} \mathbf{u}^T = c \mathbf{u} \mathbf{u}^T\),所以\(\operatorname{tr}(c \mathbf{u} \mathbf{u}^T) = c \operatorname{tr}(\mathbf{u} \mathbf{u}^T) = c \mathbf{u}^T \mathbf{u} = c\)(因为\(\mathbf{u}^T \mathbf{u} = 1\))。因此,这一项也是\(\mathbf{u}^T \mathbf{S} \mathbf{u}\).所以整个优化方程化简为:
\[ J(\mathbf{u}) = \operatorname{tr}(\mathbf{S}) - \mathbf{u}^T \mathbf{S} \mathbf{u} - \mathbf{u}^T \mathbf{S} \mathbf{u} + \mathbf{u}^T \mathbf{S} \mathbf{u} = \operatorname{tr}(\mathbf{S}) - \mathbf{u}^T \mathbf{S} \mathbf{u} \]由于第一项为常数,所以最终的优化目标变为
\[ J(\mathbf{u}) = \operatorname*{argmin}_u- \mathbf{u}^T \mathbf{S} \mathbf{u} \]
把优化目标再一转换,马上就得到了和最大投影方差相同的结论。我们只要选择特征值最大的特征向量,就能够最好地减少重构前后矩阵的误差
SVD 与降维¶
OK,又绕了一大圈,讲了降维。那么 SVD 与降维之间有什么关系?现在提出 intuition:对数据做 SVD 就是在对其进行降维。可以看到 SVD 当中的特征向量矩阵\(\boldsymbol V\),其实就是\(\boldsymbol{M}^{\top}\boldsymbol{M}\)的特征向量矩阵,而如果我们把\(\boldsymbol M \in \mathbb R^{n\times k}\)看做中心化过后的数据\(X \in \mathbb R^{n\times k}\),此时\(\boldsymbol V\)就是 PCA 中一直寻找的主成分!而\(\boldsymbol U \boldsymbol \Sigma\)就是投影过后的坐标,因为\(\boldsymbol M \boldsymbol V =\boldsymbol U \boldsymbol \Sigma\)。另外由于矩阵\(\boldsymbol U\)的正交性,其坐标向量是相互正交的
SVD 与低秩近似¶
虽然通过以上降维的论证,我们知道如何计算主成分,但是低秩近似的证明与降维当中的优化目标并不一样,不过神奇的是二者的答案都指向了 SVD。这更一步加深了 SVD 与低秩相关的 intuition是
定义低秩近似的优化问题:
其中\(A\in\mathbb{R}^{n\times r},B\in\mathbb{R}^{r\times m},M\in\mathbb{R}^{n\times m},r<\min(n,m)\),说白了,这就是要寻找矩阵\(M\)的“最优\(r\)秩近似”。这里直接给出结论,最优解和最小值分别为
其中\(U,\Sigma,V,\sigma\)就是\(M\)的奇异值分解中对应的各个矩阵和奇异值,为了满足 rank 的要求,我们只取前\(r\)个特征值/特征向量即可,即:\(U\in \mathbb R^{n\times r}, \Sigma \in \mathbb R^{r\times r}, V \in \mathbb R^{m\times r}\)。注意:该解为最优解之一,不保证唯一性,可能存在其他矩阵也能达到最小值
这一节本质就是对 Eckart-Young-Mirsky定理 的在F-范数下的证明。在这个过程中也自然地引出了伪逆的定义。证明过程还是比较复杂,这里我只简单记录两个知识点
-
Moore-Penrose 伪逆的定义,低秩近似之路(一):伪逆
伪逆定义的出发点其实是寻找最优解
\[ \underset{B}{argmin}\|AB-I\|_{F}^{2} \]通过矩阵求导的方式最终我们可以推理得到
\[ A^\dagger = \lim_{\epsilon\to0} (A^\top A + \epsilon I_r)^{-1} A^\top \]如果\(A^\top A\)可逆,可以证明伪逆等价于\(A^{-1}\)。不过这个形式有点难看,因为有极限的存在,该极限保证了可逆操作的合法性。实际上我们可以利用谱分解写一个更好看的形式,首先我们有谱分解
\[ A^TA=U\Lambda U^\top \]带入到伪逆公式当中
\[ \begin{aligned} \left(\boldsymbol{A}^{\top} \boldsymbol{A}+\epsilon \boldsymbol{I}_{r}\right)^{-1} \boldsymbol{A}^{\top} & =\left(\boldsymbol{U} \boldsymbol{\Lambda} \boldsymbol{U}^{\top}+\epsilon \boldsymbol{I}_{r}\right)^{-1} \boldsymbol{A}^{\top} \\ & =\left[\boldsymbol{U}\left(\boldsymbol{\Lambda}+\epsilon \boldsymbol{I}_{r}\right) \boldsymbol{U}^{\top}\right]^{-1} \boldsymbol{A}^{\top} \\ & =\boldsymbol{U}\left(\boldsymbol{\Lambda}+\epsilon \boldsymbol{I}_{r}\right)^{-1} \boldsymbol{U}^{\top} \boldsymbol{A}^{\top} \end{aligned} \]可以看到,这里的可逆符号转移仅作用于对角矩阵,不过由于\(UA\)矩阵在 rank > r 过后的向量也全部为零(可由\((UA)^T(UA)=\Lambda\)证明),所以把可逆矩阵中的零分之一的情况完全抵消(零乘以任何数都是零),所以直接把极限给拿掉得到形式
\[ A^\dagger = U\Lambda^{-1} U^\top A^\top \]现在有了 SVD 分解,我们可以把\(UA\)也简化表达。注意上面讨论的所有\(U\)其实是 SVD 分解中的\(V\),而我们下面所写的式子按照\(A=U\Sigma V^\top\)来写伪逆形式:
\[ A^\dagger = V\Sigma^\dagger U^\top \]其中\(\Sigma^\dagger\)就是\(\Sigma\)中的非零元素取倒数然后转置
-
单位正交矩阵不改变矩阵范数
这很好理解:旋转不改变长度。也可以通过 trace 性质轻松证明
同时在 SVD分解(一):自编码器与人工智能 提到了一种观点:SVD 与自编码器的定价性。优化一个没有激活函数的3层 MLP,等价于 SVD 的求解
而进行 SVD 分解可以得到,此时的最优性是有保证的
如果我们利用反向传播去优化矩阵\(C_{n\times r}\)和\(D_{r\times n}\)最终的估计误差一定会收敛于 SVD 分解结果的估计误差,在此可以“近似”地认为:\(M_{m\times n}C_{n\times r}=U_{m\times r} \Sigma_{r\times r}\),以及\(D_{r\times n}= V_{n\times r}^T\)
Review Eigen & Eigen Value
从以上的分析中,我们其实并没有刻意地去寻找特征向量,而特征值和特征向量的形式,非常自然地从我们的推导之中出现了。这意味着特征值和特征向量在最优化中是具有显著的意义的。而“特征”一词的意义,在其中显得更加明显:如果我们选择这些特征值大的特征向量,对矩阵进行重构,那么重构前后矩阵的信息获得了最优的保留,也就是说:我们保留了矩阵的“特征”
Question¶
-
为什么实对称矩阵一定可以被对角化?这其中有没有什么深层次的原因?
询问了 Kimi & DeepSeek,二者都给出了两个过程:
-
证明实对称矩阵可对角化的三个步骤
-
引出更一般的谱定理(Spectral Theorem)
谱定理大致指出:自伴算子(或矩阵)可以在某个标准正交基下被对角化。所以,实对称矩阵可对角化是谱定理的一个直接推论。谱定理是泛函分析、量子力学等领域的基石,它将算子(或矩阵)的“结构”完全由其“谱”(即特征值的集合)来描述。
这确实很神奇🧐
-
-
在学习 SVD 的过程中还在科学空间中看到了激活函数以及 EM 算法的相关解读,包含了 silu 为什么会 work,EM 算法与梯度下降算法之间的联系
-
矩阵分块与矩阵求导的基础
矩阵求导术-上 我应该在研究生时期就看过这一篇,不过当时完全没看明白。当我接触了过一些 trace 相关的技巧后,再来看感觉轻松很多,很多思想都非常值得学习,而且配合了不少例子,绝对是一篇不可多得的高质量博客。这里仅讨论标量对矩阵的求导,不讨论向量/矩阵对矩阵的求导。矩阵对矩阵的求导遵循另外的求导法则
向量对矩阵求导从形式上来说非常简单,就是对每一个元素逐个求导,最后形成矩阵
\[ \frac{\partial f}{\partial X}=\left[\frac{\partial f}{\partial X_{ij}}\right] \]然而,这个定义在计算中并不好用,实用上的原因是对函数较复杂的情形难以逐元素求导;哲理上的原因是逐元素求导破坏了整体性。所以我们希望在求导时不拆开矩阵,而是直接通过矩阵运算,从整体出发推导出结果。首先我们复习一下一元微分和多元微分
\[ df = f'(x)dx\\ df = \sum_{i=1}^{n} \frac{\partial f}{\partial x_i} dx_i = \frac{\partial f}{\partial x}^T d\boldsymbol{x} \]多元微分中,我们可以把其看待成为导数与微分之间的内积。现在我们来看矩阵微分
\[ df = \sum_{i=1}^{m} \sum_{j=1}^{n} \frac{\partial f}{\partial X_{ij}} dX_{ij} = \operatorname{tr} \left( \frac{\partial f}{\partial X}^T dX \right) \]我们把矩阵微分也用矩阵乘法 + trace 的形式表达出来了。其中使用了一个非常重要的 trace trick:\(\sum_{i,j} A_{ij}B_{ij}=\operatorname {tr}(A^TB)\),可以看到 trace 在矩阵求导的过程中是非常常见的形式,所以会频繁使用到一些 trace trick,所以掌握常用的 trace trick 是非常有必要的(好在这些 trick 都不是很复杂,也很好理解)
在进行矩阵求导之前,回顾我们是如何对一元函数求导的:我们首先建立了初等函数的求导结果、推导出求导的四则运算、建立复合函数的求导法则(i.e. 链式求导法则),通过利用链式求导法则和四则运算法则将函数求导进行逐渐的拆分,直到只对初等函数进行求导,最终将结果整合起来,获得最终的导数表达。所以,现在我们建立了矩阵求导的矩阵形式,我们还需要建立矩阵微分的运算法则来拆解复杂的矩阵函数
-
基础运算
- 加减法:\(d(X\pm Y)=dX\pm dY\)
- 矩阵乘法:\(d(XY)=(dX)Y+XdY\)
- 转置:\(d(X^{T})=(dX)^{T}\)
- 迹:\(d\operatorname{tr}(X)=\operatorname{tr}(dX)\)
-
逆
-\(dX^{-1}=-X^{-1}dXX^{-1}\)。此式可在\(XX^{-1}=I\)两侧求微分来证明。 -
行列式
-\(d|X|=\operatorname{tr}(X^{\#}dX)\),其中\(X^{\#}\)表示\(X\)的伴随矩阵,在X可逆时又可以写作\(d|X|=|X|\operatorname{tr}(X^{-1}dX)\)。此式可用 Laplace 展开来证明,详见张贤达《矩阵分析与应用》第279页。 -
逐元素乘法
-\(d(X\odot Y)=dX\odot Y+X\odot dY\),\(\odot\)表示尺寸相同的矩阵逐元素相乘。 -
逐元素函数
-\(d\sigma(X)=\sigma^{\prime}(X)\odot dX\),\(\sigma(X)=[\sigma(X_{ij})]\)是逐元素标量函数运算,\(\sigma^{\prime}(X)=[\sigma^{\prime}(X_{ij})]\)是逐元素求导数
-
复合函数
无法直接套用一元的复合函数公式,因为我们没有矩阵对矩阵求导的定义。所以唯一的方法是将符合函数中的微分形式进行带入
\[ df=\operatorname{tr}(\frac{\partial f}{\partial Y}^TdY)=\operatorname{tr}(\frac{\partial f}{\partial Y}^Tdg(X)) \]
法则看上去很多,但是基本都符合我们之前的一元情况,除了逆和行列式。也如之前所说,要完成矩阵求导,我们还需要一些 trace trick
-
矩阵乘法的 trace 展开:\(\operatorname{tr}(A^\top B)=\operatorname{tr}(B^\top A)=\Sigma_{i,j}A_{ij}B_{ij}\)
-
标量套上迹:\(a = \operatorname{tr}(a)\)
-
trace 转置性质:\(\operatorname{tr}(A^{T}) = \operatorname{tr}(A)\)
-
trace 线性性质:\(\operatorname{tr}(A \pm B) = \operatorname{tr}(A) \pm \operatorname{tr}(B)\)
-
trace 中矩阵乘法可交换:\(\operatorname{tr}(AB) = \operatorname{tr}(BA)\),需要保证\(AB, BA\)是可行的矩阵乘法。该性质还可拓展为 trace 循环
\[ \operatorname{tr}(ABC)=\operatorname{tr}(BCA)=\operatorname{tr}(CAB) \] -
trace 中矩阵乘法/逐元素乘法可交换:\(\operatorname{tr}(A^{T}(B \odot C)) = \operatorname{tr}((A \odot B)^{T} C)\)两侧都等于\(\sum_{i,j} A_{ij} B_{ij} C_{ij}\)
左侧:\(\operatorname{tr}(A^T(B \odot C)) = \sum_{i,j} A_{ij} (B \odot C)_{ij} = \sum_{i,j} A_{ij} B_{ij} C_{ij}\)
右侧:\(\operatorname{tr}((A \odot B)^T C) = \sum_{i,j} (A \odot B)_{ij} C_{ij} = \sum_{i,j} A_{ij} B_{ij} C_{ij}\)
由于 trace 的引入,我们可以对矩阵的乘法顺序方便地进行交换,从而将\(dX\)放到最右侧,所以我们通常用的技巧是:把标量导数套上 trace,通过 trace trick 和微分符号与 trace 可互换的性质,调整\(dX\)到所需位置,最后对比\(\operatorname{tr}(\frac{\partial f}{\partial X}^TdX)\)和\(\operatorname{tr}(g(X)dX)\),我们即可确定\(g(X)=\frac{\partial f}{\partial X}\)
我们以最常见的两个例子来说明
-
Example 1:\(f=a^TXb\),其中\(a\in \mathbb R^{m\times1}, b\in \mathbb R^{n\times 1}, X\in \mathbb R^{m\times n}\)
思路:先利用标量套上 trace 不变的性质,变为 trace 形式,然后利用 trace 矩阵乘法可交换性质把\(dX\)换到最右侧
\[ df=\operatorname{tr}(a^{T}dXb)=\operatorname{tr}(ba^{T}dX)=\operatorname{tr}((ab^{T})^{T}dX) \]按照上述思路与\(\operatorname{tr}(\frac{\partial f}{\partial X}^TdX)\)形式对比,我们可以立刻得到导数为
\[ \frac{\partial f}{\partial X}=ab^{T} \] -
Example 2:\(f = \operatorname{tr}(W^T X^TX W)\),其中\(X \in \mathbb R^{m\times k}, W \in \mathbb R^{k\times n}\),这其实就是求解 F-范数平方的导数\(f=||XW||_F^2\),其中我们关注的是\(W\)的导数
思路:既然已经套上 trace 了,直接利用四则运算中的矩阵乘法微分进行拆分,然后逐个求解。为了简便我们用\(M=X^TX\)来表示一个对称矩阵
\[ df = \operatorname{tr}((dW)^T M W) + \operatorname{tr}(W^T M dW) = \operatorname{tr}(W^T M^T dW) + \operatorname{tr}(W^T M dW) \]上述第二个等号利用了 trace 的转置性质,现在结果已经明了
\[ \frac{\partial f}{\partial W}=(M^T+M)W=2MW=2X^TXW \]
-