经典的鸡尾酒宴会问题(cocktail party problem): 假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。
宴会过后,我们从n个麦克风中得到了一组数据 x ( i ) ( x 1 ( i ) , x 2 ( i ) , ⋯   , x n ( i ) ) , i = 1 , ⋯   , m x^{(i)} (x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}),i=1,\cdots,m x(i)(x1(i),x2(i),⋯,xn(i)),i=1,⋯,m , i i i 表示采样的时间顺序,也就是说共得到了 m m m 组采样,每一组采样都是 n n n 维的。我们的目标是单单从这 m m m 组采样数据中分辨出每个人说话的信号。
将第二个问题细化一下,有 n n n 个信号源 s ( s 1 , s 2 , ⋯   , s n , s ∈ R ) s(s_1,s_2,\cdots,s_n, s \in \mathbb R) s(s1,s2,⋯,sn,s∈R) , 每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号 s s s,那么
X = A s X = As X=As
X X X的意义在上文解释过,这里的 X X X不是一个向量,是一个矩阵。其中每个列向量是 x ( i ) , x ( i ) = A s ( i ) x^{(i)},x^{(i)} = As^{(i)} x(i),x(i)=As(i) 。
x ( i ) x^{(i)} x(i)的每个分量都由 s ( i ) s^{(i)} s(i) 的分量线性表示。A和 s 都是未知的,X是已知的,我们要想办法根据X来推出s。这个过程也称作为盲信号分离。
令 W = A − 1 W= A^{-1} W=A−1 ,则 s ( i ) = A − 1 x ( i ) s^{(i)} = A^{-1} x^{(i)} s(i)=A−1x(i) ,将W表示如下:
W = [ − w 1 T − − w 2 T − . . . − w n T − ] W= \begin{bmatrix} -w_1^T- \\ -w_2^T- \\ . \\ . \\ . \\ -w_n^T- \\ \end{bmatrix} W=⎣⎢⎢⎢⎢⎢⎢⎡−w1T−−w2T−...−wnT−⎦⎥⎥⎥⎥⎥⎥⎤
那么,有 s j ( i ) = w j T x ( i ) s_j^{(i)} = w_j^T x^{(i)} sj(i)=wjTx(i) 。
ICA算法归功于Bell和Sejnowski,这里使用最大似然估计来解释算法,原始的论文中使用的是一个复杂的方法Infomax principal。
我们假定每个 s j s_j sj 有概率密度 p s p_s ps 那么给定时刻原信号的联合分布就是
p ( s ) = ∏ j = 1 n p s ( s j ) p(s) = \prod\limits_{j=1}^n p_s(s_j) p(s)=j=1∏nps(sj)
这个公式代表一个假设前提:每个人发出的声音信号各自独立。有了p(s),我们可以求得第 i i i 个时间段每个麦克风收集到声音的概率密度p(x)
p ( x ) = p s ( W x ) ∣ W ∣ = ∣ W ∣ ∏ j = 1 n p s ( w j T x ) p(x) = p_s(Wx)|W| = |W|\prod\limits_{j=1}^np_s(w_j^Tx) p(x)=ps(Wx)∣W∣=∣W∣j=1∏nps(wjTx)
左边是每个采样信号X(n维向量)的概率,右边是每个原信号概率的乘积的|W|倍。
前面提到过,如果没有先验知识,我们无法求得W和s。因此我们需要知道 p s ( s j ) p_s(s_j) ps(sj),我们打算选取一个概率密度函数赋给s,但是我们不能选取高斯分布的密度函数。在概率论里我们知道密度函数p(x)由累计分布函数(cdf)F(x)求导得到。F(x)要满足两个性质是:单调递增和在[0,1]。我们发现sigmoid函数很适合,定义域负无穷到正无穷,值域0到1,缓慢递增。我们假定s的累积分布函数符合sigmoid函数:
g ( s ) = 1 1 + e − s g(s) = \frac{1}{1+e^{-s}} g(s)=1+e−s1
求导后
p s ( s ) = g ′ ( s ) = e s ( 1 + e s ) 2 p_s(s) = g'(s) = \frac{e^s}{(1+e^s)^2} ps(s)=g′(s)=(1+es)2es
l n g ′ ( s ) = 1 − 2 g ( s ) lng'(s) = 1 - 2g(s) lng′(s)=1−2g(s)
p s ( s ) p_s(s) ps(s) 是s的概率密度函数,这里s是实数,如果我们预先知道s的分布函数,那就不用假设了,但是在缺失的情况下,sigmoid函数能够在大多数问题上取得不错的效果。
知道了 p s ( s ) p_s(s) ps(s),就剩下W了。给定采样后的训练样本 x ( i ) ( x 1 ( i ) , x 2 ( i ) , ⋯   , x n ( i ) ) , i = 1 , ⋯   , m x^{(i)} (x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}),i=1,\cdots,m x(i)(x1(i),x2(i),⋯,xn(i)),i=1,⋯,m,
整个前提是每个时间段的不同生源是相互独立的,同一个生源信号接收器在不同时间段也是相互独立的。
样本对数似然估计如下:
用s的分布函数的导数表示s的概率密度函数:
p ( x ( i ) ) = ∣ W ∣ ∏ j = 1 n p s ( w j T x ( i ) ) = ∇ ∣ W ∣ ∏ j = 1 n g ′ ( w j T x ( 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)}) \\ p(x(i))=∣W∣j=1∏nps(wjTx(i))=∇∣W∣j=1∏ng′(wjTx(i))
求n个麦克风在各个频段收集到声音信号的概率密度:
∏ i = 1 m ∇ ∣ W ∣ ∏ j = 1 n g ′ ( w j T x ( i ) ) \prod\limits_{i=1}^{m} \nabla_{|W|}\prod\limits_{j=1}^ng'(w_j^Tx^{(i)}) i=1∏m∇∣W∣j=1∏ng′(wjTx(i))
线性形式的行列式的求导公式:
∂ d e t ( X ) ∂ X = ( X ∗ ) T = d e t ( X ) ( X − 1 ) T \frac{\partial{det(X)}}{\partial{X}} = (X^*)^T = det(X)(X^{-1})^T ∂X∂det(X)=(X∗)T=det(X)(X−1)T
所以
∇ ∣ W ∣ = d e t ( W ) ( W − 1 ) T = ∣ W ∣ ( W − 1 ) T ⇒ l n ′ ( ∣ W ∣ ( W − 1 ) T ) = ( W − 1 ) T \nabla_{|W|} = det(W)(W^{-1})^T = |W|(W^{-1})^T \\ \Rightarrow ln'(|W|(W^{-1})^T) =(W^{-1})^T ∇∣W∣=det(W)(W−1)T=∣W∣(W−1)T⇒ln′(∣W∣(W−1)T)=(W−1)T
构造样本对数似然函数:
ℓ ( W ) = l n ( ∏ i = 1 m ( ∇ ∣ W ∣ ∏ j = 1 n g ′ ( w j T x ( i ) ) ) ) = ∑ i = 1 m l n ( ∇ ∣ W ∣ ∑ j = 1 n g ′ ( w j T x ( i ) ) ) = ∑ i = 1 m ( ∑ j = 1 n l n g ′ ( w j T x ( i ) ) + l n ∣ W ∣ ) ) \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)=ln(i=1∏m(∇∣W∣j=1∏ng′(wjTx(i))))=i=1∑mln(∇∣W∣j=1∑ng′(wjTx(i)))=i=1∑m(j=1∑nlng′(wjTx(i))+ln∣W∣))
然后再用梯度上升法求W:
W : = W + α ( [ 1 − 2 g ( w 1 T x ( i ) ) 1 − 2 g ( w 2 T x ( i ) ) ⋮ 1 − 2 g ( w n T x ( i ) ) ] x ( i ) T + ( W − 1 ) 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) W:=W+α⎝⎜⎜⎜⎛⎣⎢⎢⎢⎡1−2g(w1Tx(i))1−2g(w2Tx(i))⋮1−2g(wnTx(i))⎦⎥⎥⎥⎤x(i)T+(W−1)T⎠⎟⎟⎟⎞
其中 α \alpha α是梯度上升速率。当迭代求出W后,便可得到 s ( i ) = W x ( i ) s^{(i)} = W x^{(i)} s(i)=Wx(i)来还原出原始信号。
注意 : 我们计算最大似然估计时,假设了 x ( i ) x^{(i)} x(i)与 x ( j ) x^{(j)} x(j) 之间是独立的,然而对于语音信号或者其他具有时间连续依赖特性(比如温度)上,这个假设不能成立。但是在数据足够多时,假设独立对效果影响不大,同时如果事先打乱样例,并运行随机梯度上升算法,那么能够加快收敛速度。
回顾一下鸡尾酒宴会问题,s是人发出的信号,是连续值,不同时间点的s不同,每个人发出的信号之间独立 s i s_i si 和 s j s_j sj之间独立)。s的累计概率分布函数是sigmoid函数,但是所有人发出声音信号都符合这个分布。A(W的逆阵)代表了s相对于x的位置变化,x是s和A变化后的结果。
Reference:
【机器学习-斯坦福】学习笔记16 独立成分分析(Independent Component Analysis)
吴恩达机器学习课程之ICA
独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别在哪里?(知乎)