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 的情况下,没法区分 W 和 PW. 所以解混合矩阵无法确定,数据源也就无法确定. 幸运的是,这种问题,即如何对应的问题在大多数应用中都无关紧要.
- 而且,没法得到正确的混合矩阵 A,例如如果用 2A 代替 A, 然后用 0.5s(i) 代替 s(i) ,然后观测数据 x(i) = 2A· 0.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 是一个实数. 另一个随机变量 x 由 x = As 得出. 用 px 表示 x 的密度函数,下面来求出这个密度函数.
先看一个简单的例子,令 s~Uniform[0,1], 那么 s 的概率密度ps(s) = 1{0 ≤ s ≤ 1}.令A = 2,那么 x = 2s. 显然,x 服从[0,2]之间的均匀分布,密度函数 px(x) = (0.5)1{0 ≤ x ≤ 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) 就可以恢复出数据源的数据了.