独立成分分析ICA原理

独立成分分析ICA原理

一 简介

​ 经典的鸡尾酒宴会问题(cocktail party problem): 假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。

​ 宴会过后,我们从n个麦克风中得到了一组数据 x(i)(x1(i),x2(i), ,xn(i)),i=1, ,mx^{(i)} (x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}),i=1,\cdots,mii 表示采样的时间顺序,也就是说共得到了 mm 组采样,每一组采样都是 nn 维的。我们的目标是单单从这 mm 组采样数据中分辨出每个人说话的信号。

​ 将第二个问题细化一下,有 nn 个信号源 s(s1,s2, ,sn,sR)s(s_1,s_2,\cdots,s_n, s \in \mathbb R) , 每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号 ss,那么
X=As X = As
XX的意义在上文解释过,这里的 XX不是一个向量,是一个矩阵。其中每个列向量是x(i),x(i)=As(i)x^{(i)},x^{(i)} = As^{(i)}
独立成分分析ICA原理

x(i)x^{(i)}的每个分量都由 s(i)s^{(i)} 的分量线性表示。A和 s 都是未知的,X是已知的,我们要想办法根据X来推出s。这个过程也称作为盲信号分离。

​ 令W=A1W= A^{-1} ,则s(i)=A1x(i)s^{(i)} = A^{-1} x^{(i)} ,将W表示如下:
W=[w1Tw2T...wnT] W= \begin{bmatrix} -w_1^T- \\ -w_2^T- \\ . \\ . \\ . \\ -w_n^T- \\ \end{bmatrix}
​ 那么,有sj(i)=wjTx(i)s_j^{(i)} = w_j^T x^{(i)}

二 ICA 算法

​ ICA算法归功于Bell和Sejnowski,这里使用最大似然估计来解释算法,原始的论文中使用的是一个复杂的方法Infomax principal。

​ 我们假定每个 sjs_j 有概率密度psp_s 那么给定时刻原信号的联合分布就是
p(s)=j=1nps(sj) p(s) = \prod\limits_{j=1}^n p_s(s_j)

​ 这个公式代表一个假设前提:每个人发出的声音信号各自独立。有了p(s),我们可以求得第 ii 个时间段每个麦克风收集到声音的概率密度p(x)
p(x)=ps(Wx)W=Wj=1nps(wjTx) p(x) = p_s(Wx)|W| = |W|\prod\limits_{j=1}^np_s(w_j^Tx)
​ 左边是每个采样信号X(n维向量)的概率,右边是每个原信号概率的乘积的|W|倍。

前面提到过,如果没有先验知识,我们无法求得W和s。因此我们需要知道 ps(sj)p_s(s_j),我们打算选取一个概率密度函数赋给s,但是我们不能选取高斯分布的密度函数。在概率论里我们知道密度函数p(x)由累计分布函数(cdf)F(x)求导得到。F(x)要满足两个性质是:单调递增和在[0,1]。我们发现sigmoid函数很适合,定义域负无穷到正无穷,值域0到1,缓慢递增。我们假定s的累积分布函数符合sigmoid函数:
g(s)=11+es g(s) = \frac{1}{1+e^{-s}}
​ 求导后
ps(s)=g(s)=es(1+es)2 p_s(s) = g'(s) = \frac{e^s}{(1+e^s)^2}

lng(s)=12g(s) lng'(s) = 1 - 2g(s)

ps(s)p_s(s) 是s的概率密度函数,这里s是实数,如果我们预先知道s的分布函数,那就不用假设了,但是在缺失的情况下,sigmoid函数能够在大多数问题上取得不错的效果。

​ 知道了ps(s)p_s(s),就剩下W了。给定采样后的训练样本x(i)(x1(i),x2(i), ,xn(i)),i=1, ,mx^{(i)} (x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}),i=1,\cdots,m
整个前提是每个时间段的不同生源是相互独立的,同一个生源信号接收器在不同时间段也是相互独立的。
样本对数似然估计如下:

用s的分布函数的导数表示s的概率密度函数:
p(x(i))=Wj=1nps(wjTx(i))=Wj=1ng(wjTx(i)) p(x^{(i)}) = |W|\prod\limits_{j=1}^np_s(w_j^Tx^{(i)}) \\ = \nabla_{|W|}\prod\limits_{j=1}^ng'(w_j^Tx^{(i)}) \\
求n个麦克风在各个频段收集到声音信号的概率密度:
i=1mWj=1ng(wjTx(i)) \prod\limits_{i=1}^{m} \nabla_{|W|}\prod\limits_{j=1}^ng'(w_j^Tx^{(i)})
线性形式的行列式的求导公式:
det(X)X=(X)T=det(X)(X1)T \frac{\partial{det(X)}}{\partial{X}} = (X^*)^T = det(X)(X^{-1})^T
所以
W=det(W)(W1)T=W(W1)Tln(W(W1)T)=(W1)T \nabla_{|W|} = det(W)(W^{-1})^T = |W|(W^{-1})^T \\ \Rightarrow ln'(|W|(W^{-1})^T) =(W^{-1})^T
构造样本对数似然函数:
(W)=ln(i=1m(Wj=1ng(wjTx(i))))=i=1mln(Wj=1ng(wjTx(i)))=i=1m(j=1nlng(wjTx(i))+lnW)) \ell (W) = ln(\prod\limits_{i=1}^{m}( \nabla_{|W|}\prod\limits_{j=1}^ng'(w_j^Tx^{(i)}) ) )\\ = \sum\limits_{i=1}^m ln(\nabla_{|W|}\sum\limits_{j=1}^ng'(w_j^Tx^{(i)})) \\ = \sum\limits_{i=1}^m (\sum\limits_{j=1}^nln g'(w_j^Tx^{(i)}) + ln|W| )) \\
然后再用梯度上升法求W:
W:=W+α([12g(w1Tx(i))12g(w2Tx(i))12g(wnTx(i))]x(i)T+(W1)T) W := W + \alpha \left( \begin{array}{ccc} \begin{bmatrix} 1 - 2g(w_1^Tx^{(i)}) \\ 1 - 2g(w_2^Tx^{(i)}) \\ \vdots \\ 1 - 2g(w_n^Tx^{(i)}) \end{bmatrix} \end{array}x^{(i)T } + (W^{-1})^T \right)
​ 其中 α\alpha是梯度上升速率。当迭代求出W后,便可得到 s(i)=Wx(i)s^{(i)} = W x^{(i)}来还原出原始信号。

注意 : 我们计算最大似然估计时,假设了 x(i)x^{(i)}x(j)x^{(j)} 之间是独立的,然而对于语音信号或者其他具有时间连续依赖特性(比如温度)上,这个假设不能成立。但是在数据足够多时,假设独立对效果影响不大,同时如果事先打乱样例,并运行随机梯度上升算法,那么能够加快收敛速度。

​ 回顾一下鸡尾酒宴会问题,s是人发出的信号,是连续值,不同时间点的s不同,每个人发出的信号之间独立 sis_isjs_j之间独立)。s的累计概率分布函数是sigmoid函数,但是所有人发出声音信号都符合这个分布。A(W的逆阵)代表了s相对于x的位置变化,x是s和A变化后的结果。

Reference:

【机器学习-斯坦福】学习笔记16 独立成分分析(Independent Component Analysis)

吴恩达机器学习课程之ICA

独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别在哪里?(知乎)