PCA Whitening ZCA Whitening

本篇文章主要内容来自于Andrew的书,链接为http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

PCA

PCA也就是主成分分析,是用来降维的一种手段,它可以显著地提高算法的运行速度。
当你在处理图像的时候,输入通常是冗余的,这是因为图像中相邻的像素点往往是关联的,PCA可以用来将图像的原始输入近似为一个更低维度的输入,并且保证误差较小。

对于降维的一个直观理解如下图所示:
PCA Whitening ZCA Whitening
原始图像中数据是二维的,但是明显看出数据是近似于某种线性结构的。PCA可以将数据投影到一个一维子空间上。
PCA Whitening ZCA Whitening
定义矩阵:

Σ=1mi=1m(x(i))(x(i))T.

如果x的均值为0,则Σ就是x的协方差矩阵。
记Σ的特征向量为u1和u2,u1对应的特征值较大
http://cs229.stanford.edu/notes/cs229-notes10.pdf 有具体推导

对于各个维度上均值为0方差相等的输入x,首先计算Σ,之后将其特征向量存储在矩阵U中,需要注意的是U是正交阵。
我们可以将原始向量x进行旋转,得到

xrot=UTx=[uT1xuT2x]

PCA Whitening ZCA Whitening
如果我们想要将x降到k个维度,那么我们就选取Xrot的前k个元素。
我们同样可以利用矩阵U将降维后的数据进行还原。
PCA Whitening ZCA Whitening

那么,我们如何确定应该保留多少个元素呢?如果k太大,那么降维的程度很小,如果k太小,那么可能损失了大量的细节。这里给了一个指标

kj=1λjnj=1λj.

用来表示保留的variance程度。
对于图像来说,通常保留99%,有时也会保留90-98%.


图像上的PCA

如果在其他应用上采用PCA,那么你可能需要对每个特征分别处理,将各个特征的均值处理为0,方差为单位值,但是在图像上通常不这么做。

对于自然图像而言,对每一个像素单独估计均值和方差意义不大,这是因为图像上一部分的统计特性通常和其他部分类似(stationarity)。

为了使PCA较好地工作,我们需要两方面:

  1. 特征均值近似为0
  2. 不同的特征方差与其他特征类似

对于图像而言,即使我们不做方差归一化,第二条也可以满足。因此,我们通常不会做方差归一化处理(音频频谱,文本(BOW)也不做)
实际上,PCA返回的特征向量不随数据的缩放而变化。
我们所需要做的事情是均值归一化,
PCA Whitening ZCA Whitening
PCA Whitening ZCA Whitening
需要注意的是,对每个图像, 我们需要单独做以上两步。
如果你要处理其他的图片(非自然图片,如手写字,背景为白中里面有个单独的物体等),可能要采用其他的normalization


Whitening

白化的目的是:

  1. 特征相互之间的关联很小
  2. 特征有相同的方差

我们之前通过计算PCA Whitening ZCA Whitening使得特征间关系很小
PCA Whitening ZCA Whitening
计算得到的协方差矩阵为
PCA Whitening ZCA Whitening
对角两个值其实就是特征值。
为了使特征的方差为单位值,我们可以对特征进行缩放,得到白化后的值
PCA Whitening ZCA Whitening

PCA Whitening ZCA Whitening
这是,协方差矩阵为单位矩阵I。
如果你想要数据白化且维度比原始维度要小,那么你可以只保留PCA Whitening ZCA Whitening的前k个元素。当我们把PCA whitening和正则化结合时,PCA Whitening ZCA Whitening的后几个元素接近为0,可以去掉。


ZCA Whitening

实际上,这种使数据协方差矩阵为I的处理方法并不唯一,如果R是正交阵,也就是PCA Whitening ZCA Whitening,那么PCA Whitening ZCA Whitening协方差矩阵也为I,
在ZCA白化中,我们选择R=U,定义
PCA Whitening ZCA Whitening

PCA Whitening ZCA Whitening

对于所有可能的R,这种旋转使得XzCAwhite尽可能接近原始输入数据x
当使用ZCA白化时,我们通常保留数据的全部n个维度,不去降维。

在实际使用PCA或者ZCA时,有一些特征值λ接近0,而我们在normalization时需要除以PCA Whitening ZCA Whitening,会使得数据不稳定。因此,我们通常会做一点regularization,也就是取一个很小的常数ε,通常为PCA Whitening ZCA Whitening

xPCAwhite,i=xrot,iλi+ϵ.

对于图像来说,添加ε可以轻微的对输入进行平滑,还可以减少一些像素的走样,可以提高学习的效果。
ZCA将数据从X映射到XzCAwhite,其实也是生物上眼睛处理图像的近似过程。