首页 > 代码库 > Independent Components Analysis:独立成分分析

Independent Components Analysis:独立成分分析

1. 引言

与 PCA 类似,Independent Components Analysis(ICA)同样是要找到一组新基去表示数据。但是目标大不相同。

为了阐述动机,举一个例子,考虑“鸡尾酒会问题”。

在酒会上,有 n 个演讲者同时讲话,房间里面的每一个麦克风都会记录所有演讲者声音混合起来的音频,但是由于每一个麦克风距离每一个演讲者的距离都不一样,所以没一个麦克风记录的混合音频是不一样的,那么用这些麦克风录下来的混合音频数据,我们能否将每一个演讲者的声音都区分出来呢?

为了方便讨论,假设某个数据  是由 n 个独立的数据源而产生的。我们观察到的是:

x = As 

这里矩阵 A 是方阵,被称作混合矩阵。重复观察或者记录 m 次,就可以得到一个数据集{x(i); i = 1, 2, ... , m},我们的目标是利用已经产生的数据( x(i) = As(i) )去恢复出数据源 s(i).


 

在“鸡尾酒会问题”中,s(i) 是一个 n 维的向量 ,  是第 j 个演讲者在 时间点 i 所发出的声音;同样, x(i) 也是一个 n 维向量, 是第 j 个麦克风在时间点 i 所记录的音频数据。

W = A-1 为解混合矩阵. 我们的目标就是找到 W, 这样给出麦克风的录音数据 x(i) ,就可以通过 s(i) = Wx(i) 来恢复出数据源. 为了表示方便,令  表示 W 的第 i 行,所以有:

因此,,第 j 个数据源可以通过计算  恢复出来.


 

2. ICA 的不确定性(ICA ambiguities)

如果没有数据源和混合矩阵的先验知识,不难看出,在只给出观察数据 x 的情况下,A 中存在的一些不确定性会使得数据源不可能得到恢复.

  • 特别是,令 P 是任意一个 n×n 的置换矩阵(permutation matrix). 这就意味着 矩阵 P 的每一行和每一列有且只有一个元素为1,其它元素均为0. 下面是一些置换矩阵的例子:

   如果 z 是一个向量,那么 Pz 就会返回一个 z 中坐标经过置换后的版本的向量,具体如何置换取决于 1 所在 P 中位置.

  所以在只有 x 的情况下,没法区分 WPW. 所以解混合矩阵无法确定,数据源也就无法确定. 幸运的是,这种问题,即如何对应的问题在大多数应用中都无关紧要.

  • 而且,没法得到正确的混合矩阵 A,例如如果用 2A 代替 A, 然后用 0.5s(i) 代替 s(i) ,然后观测数据 x(i) = 20.5s(i) 是一样的. 也就是说我们恢复出的数据源前面的系数无法确定,可能会是真正数据源的任意倍数. 但是对于“鸡尾酒会问题”这个不确定性也不重要,因为前面的系数仅仅代表着演讲者的声音大小,不影响数据的恢复.

 已经证明,只要数据源不是高斯分布的数据,ICA 的不确定性也仅仅就来源于上面讨论的两方面.

那么对于高斯数据,考虑有两个数据源,即 n = 2, s~N(0, I ). 其中 I 是 一个2×2的单位矩阵.现在,假设观察到某个数据 x = As, A是混合矩阵,显然 x 也服从高斯分布, 且均值为0, 协方差E(xxT) = E(AssTAT) = AAT . 令 R 为任意的正交矩阵,即 RRT = RTR = I, 令 A‘ = AR. 如果用 A‘ 作为混合矩阵代替 A, 那么观测数据就是 x‘ = A‘s, 类似 x‘ 同样服从高斯分布,均值为0, 协方差为E[x‘(x‘)T] = E[A‘ssT(A‘)T] = E[ARssT(AR)T] = ARRTAT = AAT. 因此,不论混合矩阵式 A 还是 A‘,观测数据都服从高斯分布 N(0, AAT), 于是难以分辨数据源的混合到底是用了 A 还是 A‘ . 可以看出,存在一个任意的转置成分(例子中的R)不是数据决定的,所以无法恢复出数据源.

上面的讨论是基于多元标准正态分布的转置对称性(目前还没搞定什么是转置对称).尽管如此,只要不是高斯数据,可以证明,在有足够数据的情况下,ICA都有可能恢复出 n 个独立的数据源.


 

3. 密度函数和线性变换

在正式讨论ICA算法之前,首先简要地讨论线性变换对密度函数的影响.

假设随机变量 s 是通过密度函数 ps(s) 采样而来, 假设 s 是一个实数. 另一个随机变量 xx = As 得出. 用 px 表示 x 的密度函数,下面来求出这个密度函数.

先看一个简单的例子,令 s~Uniform[0,1], 那么 s 的概率密度ps(s) = 1{0 ≤ ≤ 1}.令A = 2,那么 x = 2s. 显然,x 服从[0,2]之间的均匀分布,密度函数 px(x) = (0.5)1{0 ≤ ≤ 2},注意A-1 = 0.5.

更一般地,令 W = A-1 , 计算 x 的密度函数:

px(x)  = ps(Wx)|W|


 

4. ICA 算法

假设每一个数据源 si 由密度函数 ps 给出,数据源 s 的联合分布:

注意上面式子之所以成立是因为假设数据源是彼此独立的.

根据上面讨论的密度函数和线性变换的关系以及根据 x = As = W-1s

回忆概率论的知识,对于一个连续实数的随机变量 z, 它的分布函数 F 的定义:

所以变量 z 的密度函数就是它的分布函数的导数:

所以,为了找到一个具体的 s 的密度函数 ps(s), 只要能找到它的分布函数即可. 分布函数是由0到1的单调递增函数,由前面的讨论知道这个分布函数不能取高斯分布函数.

通常取 sigmoid 函数:作为默认的分布函数,所以.

方阵 W 是我们模型的参数,给定训练集,那么参数的似然函数:

接下来就是最大化这个参数 W 的似然函数,利用,推导出参数的更新规则,对于训练样本x(i) :

其中α 是学习率.

等到算法收敛之后,计算 s(i) = Wx(i) 就可以恢复出数据源的数据了.

Independent Components Analysis:独立成分分析