深度学习笔记之主成分分析

Definitions(定义)

主成分分析(principal components analysis, PCA)简称PCA,是一种广泛应用于数据降维(data dimensionality reduction)、有损数据压缩(lossy data compression)、特征提取(feature extraction)以及数据可视化等的一种技术,也被称为Karhunen-Lo`eve变换。

关于PCA的定义主要有两种:

  • PCA是一种将数据投影到低维线性空间(principal subspace,主成子空间)使得投影之后的差异最大的正交投影。
  • PCA是一种最小化平均投影成本(average projection cost),投影点与数据点之间的均方距离最小,即数据损失精度最小。

Example (例子)

我们通过一个有损压缩的例子来介绍PCA。假设我们有$m$个数据点$\left\{ { \boldsymbol{x}^{(1)},\cdots,\boldsymbol{x}^{(m)} }\right\}$,其中数据维度为$\boldsymbol{x}^{(1)}\in \mathbb{R}^n$。因此,存储这些数据,需要$m\times n$个单元。为了节省存储单元,我们考虑有损压缩。有损压缩,意味着我们可以用较少的存储单元储存数据,当然,这会损失些精度。因此我们要尽量的减少精度的损失。

我们将这些数据压缩成低维数据,即每一个$\boldsymbol{x}^{(i)}\in \mathbb{R}^n$都可以找到一个对应的$\boldsymbol{c}\in \mathbb{R}^l, (n\gg l)$。这里,我们用映射$f:\mathbb{R}^n\rightarrow \mathbb{R}^l$来表示,即$f(\boldsymbol{x})=\boldsymbol{c}$。对应的解压缩,我们用函数$\text{g}:\mathbb{R}^l\rightarrow \mathbb{R}^n$来表示,即$\hat{\boldsymbol{x} }=\text{g}(f(\boldsymbol{x}))$。

为了解压缩尽量简单,我们限制解压缩是经过一个线性变换矩阵$\boldsymbol{D}$来完成,则解压缩信号表示为$\text{g}(c)=\boldsymbol{D}\boldsymbol{c}$。这里,我们限制矩阵$\boldsymbol{D}$是列正交矩阵(矩阵中列两两正交)。一般来说,增大$\boldsymbol{D}$的能量,需要降低$\boldsymbol{c}$的能量,因此,我们对$\boldsymbol{D}$进行归一化处理(归一化与未归一化大部分情况的结果是相等的,但也存在一些情况下归一化的情况更好,因此通常我们会对$\boldsymbol{D}$进行归一化处理)。

我们从矩阵乘法的角度来理解$\boldsymbol{x}=\boldsymbol{Dc}$。通常,我们理解矩阵乘法从图的左图出发,但一般不会考虑右图的理解方式。这里,我们从右图的理解方式出发。由于$\boldsymbol{D}$是列正交的,因此$\left\{ { \boldsymbol{d}_i}\right\}_{i\in [l]}$张成了一个$l$空间,而$\left\{ { \boldsymbol{d}_i}\right\}_{i\in [l]}$则是这个$\mathbb{R}^l$空间的一组完备正交基。$\boldsymbol{x}$在基$\boldsymbol{d}_i$上的投影即为$c_i$。我们用$\left\{ { \boldsymbol{d}_i}\right\}_{i\in [l]}$线性表出$\boldsymbol{x}$。
\begin{align}
\boldsymbol{x}=\sum\limits_{i\in[l]} c_i\boldsymbol{d}_i
\end{align}
矩阵相乘示意图
为了使得解压之后的数据损失尽可能少的精度,我们需要通过使得如下损失函数(也称,代价函数 cost function)最小来得到压缩数据的具体表达式
\begin{align}
\mathcal{R}= || \boldsymbol{x}-\boldsymbol{Dc} ||_2
\end{align}
损失函数是关于$\boldsymbol{c}$的线性变换$(\boldsymbol{x}-\boldsymbol{Dc})$的范数,因此是convex的(所有的范数均是convex function)。

通过导数工具,有
\begin{align}
\frac{\partial \mathcal{R} }{\partial \boldsymbol{c} }
&=\frac{\partial }{\partial \boldsymbol{c} } \left(\boldsymbol{x}^T\boldsymbol{x}-2\boldsymbol{x}^T\boldsymbol{Dc}+\boldsymbol{c}^T\boldsymbol{D}^T\boldsymbol{D}\boldsymbol{c}\right)\\
&\overset{(a)}{=}\frac{\partial }{\partial \boldsymbol{c} } \left(\boldsymbol{x}^T\boldsymbol{x}-2\boldsymbol{x}^T\boldsymbol{Dc}+\boldsymbol{c}^T\boldsymbol{c}\right)\\
&=-2\boldsymbol{D}^T\boldsymbol{x}-2\boldsymbol{c}
\end{align}
其中$(a)$成立,由于$\boldsymbol{D}$是列正交矩阵,因此$\boldsymbol{D}^T\boldsymbol{D}=\mathbf{I}_l$。通过令偏导为0,我们找到函数的驻点$:\boldsymbol{c}^{*}=\boldsymbol{D}^T\boldsymbol{x}$。

给定解压矩阵$\boldsymbol{D}$,我们从损失精度最小的角度出发,得到了压缩数据的表达式$\boldsymbol{c}=\boldsymbol{D}^T\boldsymbol{x}$,对应解压缩数据为$r(\boldsymbol{x})=\boldsymbol{D}\boldsymbol{D}^T\boldsymbol{x}$。为此,我们仍需要确定$\boldsymbol{D}$的形式。这里,我们仍然从损失精度最小的角度出发
\begin{align}
\boldsymbol{D}^{*}=\underset{\boldsymbol{D} }{\text{arg} \min} ||\boldsymbol{x}-\boldsymbol{DD}^T\boldsymbol{x}||\quad s.t. \quad \boldsymbol{D}^T\boldsymbol{D}=\mathbf{I}_{l}
\end{align}
显然,我们要从从这个方程中解出$\boldsymbol{D}$来是不可能的。

但是,我们是有$n$个$\boldsymbol{x}^{(i)}$数据的,定义$\boldsymbol{X}\in \mathbb{R}^{m\times n}$,其中$\boldsymbol{X}_{i:}=(\boldsymbol{x}^{(i)})^T$
\begin{align}
\boldsymbol{D}^*
&=\underset{\boldsymbol{D} }{\text{arg} \min }||\boldsymbol{X}^T-\boldsymbol{D}\boldsymbol{D}^T\boldsymbol{X}^T||_F\\
&=\underset{\boldsymbol{D} }{\text{arg} \min} ||\boldsymbol{X}-\boldsymbol{X}\boldsymbol{D}\boldsymbol{D}^T||_F\\
&=\underset{\boldsymbol{D} }{\text{arg} \min} \text{Tr}\left[{(\boldsymbol{X}-\boldsymbol{X}\boldsymbol{D}\boldsymbol{D}^T)^T(\boldsymbol{X}-\boldsymbol{X}\boldsymbol{D}\boldsymbol{D}^T) }\right]\\
&=\underset{\boldsymbol{D} }{\text{arg} \min} \text{Tr}\left({\boldsymbol{X}^T\boldsymbol{X} }\right)-\text{Tr}(\boldsymbol{D}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{D})\\
&=\underset{\boldsymbol{D} }{\text{arg} \max} \text{Tr}(\boldsymbol{D}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{D})
\end{align}

这里$\boldsymbol{D}$是列正交矩阵,即$\boldsymbol{D}^T\boldsymbol{D}=\mathbf{I}_l$。为使$\text{Tr}(\boldsymbol{D}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{D})$最大,因此选择$\boldsymbol{X}^T\boldsymbol{X}$最大的$l$个特征矢量作为$\boldsymbol{D}$的列向量。对应地,
\begin{align}
\boldsymbol{X}^T\boldsymbol{X}\left[{\boldsymbol{\xi}_1,\cdots,\boldsymbol{\xi}_l}\right]=\left[{\boldsymbol{\xi}_1,\cdots,\boldsymbol{\xi}_l}\right]\text{Diag}(\lambda_1,\cdots,\lambda_l)
\end{align}
其中$\boldsymbol{\xi}_i$表示最大的$l$个特征值$\lambda_i\in [l]$对应的特征矢量,$[l]$表示最大的$l$个特征值组成的结合。因此$\max \text{Tr}(\boldsymbol{D}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{D})=\sum_i^l \lambda_i$。

Remarks:
  • 基于上述表述,我们知道矩阵$\boldsymbol{D}$选择数据矩阵$\boldsymbol{X}^T\boldsymbol{X}$的最大$l$个特征值$\lambda_i\in [l]$所对应的特征向量$\boldsymbol{\xi}_i$作为其列,最大程度的保留了矩阵$\boldsymbol{X}^T\boldsymbol{X}$的能量。
  • 这里所得到$\boldsymbol{D}=\left[{\boldsymbol{\xi}_1,\cdots,\boldsymbol{\xi}_l}\right]$并不是驻点,如果$|||\boldsymbol{X}^T-\boldsymbol{D}\boldsymbol{D}^T\boldsymbol{X}^T||_F$对$\boldsymbol{D}$求偏导,并令偏导为零,得到$\boldsymbol{D}=\boldsymbol{0}$,显然这并不是最后的计算结果。