PCA,ZCA,ICA,白化,稀疏编码和自编码器

因为概率统计理论(随机信号分析?)的缺乏,只能从外观上简单地总结这几种和特征提取相关的算法。

自编码器 Autoencoder

自编码器就是一个全连接网络,就简单的三层,一个输入一个输出一个隐藏层。也可以把自编码器级联,形成多层的结构。自编码器的目的就是训练一个恒等映射,输入进去什么,就期望输出什么。简单的恒等映射没有意义,有意义的在于它的隐藏层神经元的个数往往和输入层不同。如果少于输入个数,这就相当于一个特征提取和重构的过程(降维);如果隐藏层个数大于输入层个数,此时如果还能再加上稀疏性约束,则就相当于稀疏编码。

如果是前者,Loss直接是输入和输出的的差,比如平方误差之类。

如果是后者,得加上稀疏性约束(稀疏性即提取出来的特征中,大量系数为零,非零系数尽量少)。为约束稀疏性,手段可以如下(来自UFLDL教程)。先定义隐藏层第\(j\)单元的平均激活(在训练集上取平均)如下,其中\(\boldsymbol{x}^{(i)}\)是训练集第\(i\)个样本,一共有\(m\)个样本。

\[\hat{\rho_j}=\frac{1}{m}\sum^m_{i=1}(a^{(2)}_j(\boldsymbol{x}^{(i)})) \]

再引入一个接近于零的所谓的稀疏性参数\(\rho\),约束为\(\hat{\rho}_j\)接近\(\rho\)。从而此时Loss可以定义为

\[J(W,b)=J_0(W,b)+\beta\sum^{s_2}_j\text{KL}(\rho|\hat{\rho_j}) \]

右边第一项代表重构误差,第二项代表稀疏惩罚。\(\text{KL}(\cdot)\)是相对熵,\(\hat{\rho}_j\)\(\rho\)越远则这个惩罚项越大;参数\(\beta\)用于权衡。

稀疏编码 Sparse Coding

上面的自编码器,隐层单元数量大于输入层时,如果再有稀疏性的约束,则相当于稀疏编码。但是因为激活函数的非线性等等问题,总的来说,它不是线性的变换。而一般说的稀疏编码、稀疏表示,大多数都是线性变换。就线性变换而言,稀疏编码是在寻找超完备的一组基\(\{\phi_i\},i=1,2,\cdots,k\),使得输入向量表示成基的线性组合(这里不要求基的正交性)。

\[\boldsymbol{x}=\sum^ia_i\phi_i \]

这里\(a_i\)是稀疏表示稀疏,而非激活函数值。因为这组基是超完备的,所以基的个数大于输入信号的维数,\(k>n\)。训练集样本容量设为\(m\)则问题表达为

\[\mathop{\text{argmin}}\limits_{a^{(j)}_i,\{\phi_i\}}\sum^{m}_{j=1}\left(\Big|\Big|\boldsymbol{x}^j-\sum^{k}_{i=1}a^{(j)}_j\phi_i\Big|\Big|^2+\lambda\sum^{k}_{i=1}S(a^{(j)}_i)\right) \]

其中\(S(\cdot)\)是一个函数,负责惩罚明显大于零的系数,从而保证稀疏性,\(\lambda\)负责权衡。上面的形式有一个漏洞,即为了减小在新基上的分量(从而迎合稀疏惩罚),我可以把基变大,把其上的分量\(a\)减小,不改变最终结果而又使得上面目标函数变小。为了弥补,再加入约束来控制基,不让它太大,例如约束为\(||\phi_i||<C_i\).

PCA 主成分分析

PCA具体推导就不写了,也不说方差最大化,或者拉格朗日法求驻点的步骤。只简单总结一下,如果从协方差矩阵对角化的角度来看,事情会怎么样。

\(n\)维随机变量\(\boldsymbol{x}\)每个元素的均值设为零。则其协方差矩阵的第\((i,j)\)元为\(\text{Cov}(x_i,x_j)\)根据协方差定义,它等于\(E(x_ix_j)-E(x_i)E(x_j)=E(x_ix_j)\),所以\(m\)个矩阵的平均\(\frac{1}{m}\sum^\limits{i}\boldsymbol{x}^{(i)}\boldsymbol{x}^{(i)T}\)正好是协方差矩阵的无偏估计。根据协方差矩阵的意义,如果其第\((i,j)\)元素为零,则说明\(x_i\)\(x_j\)不相关。PCA就是要让协方差矩阵的非对角元全部为零(对角元没法搞成零,那是方差),从而使得信号\(\boldsymbol{x}\)的任意两个维度都不相关,并在此基础上进行维度压缩。

要对角化一个矩阵,标准手段是求特征值和特征向量,然后在其特征空间中,这个矩阵就自动对角化了。PCA这里也一样,求协方差矩阵的特征分解,然后把特征向量作为新的一组基,把原来的信号空间变换到协方差矩阵的特征空间中,这时协方差矩阵是对角化的形式。

然后开始降维,利用一个结论:协方差矩阵的越大的特征值对应的特征向量指向的方向是数据弥散越厉害的方向。降维就是要剔除几个基,找到一个子空间,在这个子空间中数据尽可能地保留。所以如果要尽量保留原数据分布地降维,则优先丢弃特征值小的特征向量。剔除以后,得到子空间,降维的操作就是把原数据往这个子空间中投影。

PCA白化

PCA白化目的就是得到对角的协方差矩阵后,进一步使其变成单位矩阵。注意到对角的协方差矩阵的对角元就是特征值的排列,所以要使其变成单位矩阵,只要每个对角元\(\lambda_i\)除以他自己(特征值)就可以了,但是一个矩阵的特征值是确定的,不能变,所以直接改变投影后的信号\(\boldsymbol{x}\)的每个分量,每个分量\(x_i\)乘以\(\frac{1}{\sqrt{\lambda_i}}\)即可。

在UFLDL的教程中,使用了二维数据为例,形象一点,可以把二维数据弥散最大的方向与其正交方向视为一个椭圆的长轴方向与短轴方向。无降维的PCA相当于把这个斜着的椭圆旋转摆正。而PCA白化则相当于把这个椭圆两个轴进行缩放,使其变成圆。

ZCA白化

进行完PCA白化以后,二维数据变成了一个圆形的,现在给它作任何角度的旋转,仍然是圆形。从表达式上可以体现出来。设\(\boldsymbol{x}\)是旋转后的信号,且其协方差矩阵是单位阵,即\(\boldsymbol{x}\boldsymbol{x}^T=I\),设任意正交矩阵\(R\) 满足\(RR^T=I\),则经\(R\)变换后,新协方差矩阵为\(R\boldsymbol{x}\boldsymbol{x}^TR^T=RR^T=I\)仍为单位阵。而ZCA白化就是进行完PCA白化后,把数据“旋转回去”,即,选用的旋转矩阵就是当初进行PCA变换的矩阵\(U\),它的列是原协方差矩阵的特征向量。

进行ZCA白化,形象地看就是把斜的椭圆摆正(比如旋转30°),两个轴缩放使其变成圆,再旋转回去(旋转-30°).

ICA独立成分分析

UFLDL直接说,在线性稀疏编码(Sparse Coding)那里,我们是要学习一组线性的基满足:1线性相关,2超完备,3稀疏。而ICA这里学习的一组基要满足:1线性无关,2相互正交,3稀疏。因为ICA的基要相互正交,所以这组基的个数一定小于信号\(\boldsymbol{x}\)的维数(欠完备基),否则一定超完备,基一旦超完备,必然不会两两正交。

使用ICA有两个前提,一个是数据已经被ZCA白化(从而信号的每个维度都不相关),二是学习的基一定是欠完备的。目标函数是:

\[J(W)=\big|\big|W\boldsymbol{x}\big|\big|_1 \]

习惯上\(W\)是作用在\(\boldsymbol{x}\)上的变换矩阵,这里与前面正好差一个转置,前面那些都是用\(W^T\)作用在\(\boldsymbol{x}\)上施行变换。把基作为行向量,排成的矩阵是\(W\).上面优化问题的约束是

\[s.t. WW^T=I \]

这个约束的存在意义是使得原始的经ZCA白化的数据经\(W\)变换后仍然是每个维度都不相关的(计算经\(W\)变换后的数据的相关矩阵,仍为单位阵),此外,这个约束的形式决定了矩阵\(W\)的列数必然不小于行数,从而\(W\)代表的基一定是欠完备的。因为这个硬约束的存在,使得问题求解难以简单地套用梯度下降。求解过程中需要下面两步骤的反复迭代:
1.梯度下降,\(W\leftarrow W-\alpha\nabla_WJ(W)\)
2.投影,\(W\leftarrow (WW^T)^{\frac{1}{2}}W\)
第二步的投影,为的是把梯度下降后的\(W\)投影到正交矩阵空间中。

Reconstruction ICA

针对ICA的硬约束给求解带来的麻烦,可以在RICA中缓解。RICA把硬约束转换为惩罚加入目标函数中:

\[J(W)=\lambda\Big|\Big|W\boldsymbol{x}\Big|\Big|_1+\frac{1}{2}\Big|\Big|W^TW\boldsymbol{x}-\boldsymbol{x}\Big|\Big|_2^2 \]

现在仅从上面式子出发,如果基\(W\)是欠完备的,\(\lambda\)趋于无穷,并把惩罚项转化为硬约束\(WW^T=I\),那这个问题就又回到了ICA。但是,上面式子由于并没有明确给出\(WW^T=I\),所以单就这个式子而言,\(W\)可以是超完备的。如果\(W\)是超完备的,这就不是ICA问题了,这个问题还有意义吗?还是有意义的,意义是,这相当于稀疏自编码器的特殊情况。

使用\(\ell_1\)范数作为稀疏约束的稀疏自编码器的损失函数可以写为

\[J(W)=\lambda\Big|\Big|\sigma(W\boldsymbol{x})\Big|\Big|_1+\frac{1}{2}\Big|\Big|\sigma(W^T\sigma(W\boldsymbol{x}))-\boldsymbol{x}\Big|\Big|_2^2 \]

第一项是稀疏惩罚,第二项是重构误差,对比\(W\)超完备时的RICA和上面这个式子,可以发现,\(W\)超完备时的RICA就是稀疏自编码器在激活函数\(\sigma(x)=x\)时的特殊情况。UFLDL还说,RICA对未经白化的数据更加稳定(回忆ICA的一个前提就是数据已经白化),这一点更像稀疏自编码器。

posted @ 2018-05-12 16:17  immcrr  阅读(814)  评论(0编辑  收藏  举报