这一节的主题是独立成分分析(Independent Components Analysis, ICA)。和PCA的降维思路不同,ICA主要解决的是找到数据背后的“独立”成分。我们从一个鸡尾酒会问题开始说起。
在一个鸡尾酒会中假设有n个人同时说话,屋子里的n个麦克风记录着这n个人说话时叠加的声音。由于每个麦克风离人的距离不同,它所采集到的声音是不同的,但都是这n个人声音的一种组合。那么问题是根据这些采集到的声音,我们是否可以还原每个人说话的声音?
该问题可以形式化地描述为,从n个独立的数据源s ∈ Rn中我们观察到了叠加数据x,其中x可以表示为:
其中A是一个未知的方阵,我们称为混合矩阵(mixing matrix)。我们观察到的数据是{x(i); i=1,...,n},我们的目标是求出源数据{s(i); i=1,...,n}。
在鸡尾酒会问题中,s(i)是个n维向量,sj(i)表示第j个人在i时刻发出的声音。同样,x(i)也是个n维向量,xj(i)表示第j个麦克风在i时刻采集到的声音。
令W = A-1表示解析矩阵(unmixing matrix),我们只需要求出W,然后根据s(i) = Wx(i)就能求出s(i)。为了简化描述,我们用wiT表示W的第i行,因此W可表示为:
ICA的不确定性
如果我们对源数据和混合矩阵没有任何先验知识的话,在求混合矩阵的过程中会存在不确定性。
第一个不确定性来自于源数据的顺序。当源数据的顺序交换后,对混合矩阵的列之间进行对应的交换能够保证生成同样的数据。
第二个不确定性来自于对源数据的缩放。假设我们用2A来替代A,0.5s(i)替代s(i),那么x(i) = 2A · 0.5s结果不变,因而s(i)和A的值不是唯一确定的。
第三个不确定性来自于源数据不能是高斯分布的。如果源数据s(i)是高斯分布的,我们可以证明混合矩阵A不是唯一的。证明如下:
令R是任意正交矩阵(orthogonal matrix),因而RRT = 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'。
密度函数和线性变换
在推导ICA算法之前,我们先讨论线性变换后的密度函数。
假设随机变量s的概率密度函数为ps(s),另一个随机变量x = As,其中A是一个可逆的方阵,x的概率密度函数是px,那么px为:
其中W = A-1。
ICA算法
现在我们正式推导ICA算法,这个算法主要归功于Bell和Sejnowski,但我们这里使用最大似然估计法来进行解释。算法原始的版本用了一种更为复杂的方法,但对于目前我们理解ICA算法不是必要的。
假设每个源数据s(i)的概率密度函数是ps,那么它们的联合分布为:
这里我们假设每个源数据都是互相独立的。再根据上一节的公式,由于有x = As这样的线性变换,所以:
前面提过如果没有任何先验知识,W和s是无法唯一确定的,因此我们这里对s的概率密度函数做一定假设,同时根据前面讨论ps(s)不能是高斯分布的。我们知道密度函数可以通过对累计分布函数求导获得,而累计分布函数必须是在0到1之间单调递增的函数,因此我们可以选取sigmoid函数作为默认的累计分布函数。所以ps(s) = g'(s),其中g(s) = 1 / (1 + e-s)。
确定了ps(s)后,W是模型里唯一需要求解的参数了。给定训练数据集{x(i); i=1,...,n},通过最大似然估计法可得:
对l(W)求导并且根据∇W|W| = |W|(W-1)T的事实,我们可得:
其中α是学习率。
算法收敛后即可得到参数W,然后通过s(i) = Wx(i)就能还原出源数据了。
总结
- 独立成分分析(ICA)算法可以用于求解类似鸡尾酒会类型的问题,在已知叠加数据的情况下还原出源数据
参考资料
- 斯坦福大学机器学习课CS229讲义 Independent Components Analysis
- 网易公开课:机器学习课程 双语字幕视频