2.12 实例:主成分分析
主成分分析(principal components analysis,PCA)是一个简单的机器学习算法,可以通过基础的线性代数知识推导。
假设在空间中有m个点,我们希望对这些点进行有损压缩。有损压缩表示我们使用更少的内存,但损失一些精度去存储这些点。我们希望损失的精度尽可能少。
编码这些点的一种方式是用低维表示。对于每个点,会有一个对应的编码向量。如果l比n小,那么我们便使用了更少的内存来存储原来的数据。我们希望找到一个编码函数,根据输入返回编码,f(x)=c;我们也希望找到一个解码函数,给定编码重构输入,x≈g(f(x))。
PCA由我们选择的解码函数而定。具体来讲,为了简化解码器,我们使用矩阵乘法将编码映射回,即g(c)=Dc,其中是定义解码的矩阵。
到目前为止,所描述的问题可能会有多个解。因为如果我们按比例地缩小所有点对应的编码向量ci,那么只需按比例放大D:,i,即可保持结果不变。为了使问题有唯一解,我们限制D中所有列向量都有单位范数。
计算这个解码器的最优编码可能是一个困难的问题。为了使编码问题简单一些,PCA限制D的列向量彼此正交(注意,除非l=n,否则严格意义上D不是一个正交矩阵)。
为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入x得到一个最优编码c∗。一种方法是最小化原始输入向量x和重构向量g(c∗)之间的距离。我们使用范数来衡量它们之间的距离。在PCA算法中,我们使用L2范数
我们可以用平方L2范数替代L2范数,因为两者在相同的值c上取得最小值。这是因为L2范数是非负的,并且平方运算在非负值上是单调递增的。
该最小化函数可以简化成
(式(2.30)中L2范数的定义)
(分配律)
(因为标量的转置等于自己)。
因为第一项不依赖于c,所以我们可以忽略它,得到如下的优化目标:
更进一步,代入g(c)的定义:
(矩阵D的正交性和单位范数约束)
我们可以通过向量微积分来求解这个最优化问题(如果你不清楚怎么做,请参考第4.3节)。
这使得算法很高效:最优编码x只需要一个矩阵-向量乘法操作。为了编码向量,我们使用编码函数
进一步使用矩阵乘法,我们也可以定义PCA重构操作:
接下来,我们需要挑选编码矩阵D。要做到这一点,先来回顾最小化输入和重构之间L2距离的这个想法。因为用相同的矩阵D对所有点进行解码,我们不能再孤立地看待每个点。反之,我们必须最小化所有维数和所有点上的误差矩阵的Frobenius范数:
为了推导用于寻求D∗的算法,我们首先考虑l=1的情况。在这种情况下,D是一个单一向量d。将式(2.67)代入式(2.68),简化D为d,问题简化为
上述公式是直接代入得到的,但不是表述上最美观的方式。在上述公式中,我们将标量放在向量d的右边。将该标量放在左边的写法更为传统。于是我们通常写作
或者,考虑到标量的转置和自身相等,我们也可以写作
读者应该对这些重排写法慢慢熟悉起来。
此时,使用单一矩阵来重述问题,比将问题写成求和形式更有帮助。这有助于我们使用更紧凑的符号。将表示各点的向量堆叠成一个矩阵,记为,其中。原问题可以重新表述为
暂时不考虑约束,我们可以将Frobenius范数简化成下面的形式:
(式(2.49))
(因为与d无关的项不影响arg min)
(因为循环改变迹运算中相乘矩阵的顺序不影响结果,如式(2.52)所示)
(再次使用上述性质)。
此时,我们再来考虑约束条件
(因为约束条件)
这个优化问题可以通过特征分解来求解。具体来讲,最优的d是最大特征值对应的特征向量。
以上推导特定于l=1的情况,仅得到了第一个主成分。更一般地,当我们希望得到主成分的基时,矩阵D由前l个最大的特征值对应的特征向量组成。这个结论可以通过归纳法证明,我们建议将此证明作为练习。
线性代数是理解深度学习所必须掌握的基础数学学科之一。另一门在机器学习中无处不在的重要数学学科是概率论,我们将在下一章探讨。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论