【问题标题】:Understanding a FastICA implementation了解 FastICA 实施
【发布时间】:2017-09-11 06:53:03
【问题描述】:

我正在尝试实现 FastICA(独立分量分析)来实现图像的盲信号分离,但首先我想我应该看看 Github 上的一些产生良好结果的示例。我正在尝试从Wikipedia's FastICA 上的算法步骤比较主循环,但我很难看出它们实际上是如何相同的。

它们看起来非常相似,但有一些我不明白的区别。看起来这个实现类似于(或相同)来自 Wiki 的“多组件提取”版本。

有人能帮我理解一下与非线性函数及其一阶和二阶导数有关的四行左右的内容,以及更新权重向量的第一行吗?非常感谢任何帮助!

以下是更改变量以更接近地反映 Wiki 的实现:

% X is sized (NxM, 3x50K) mixed image data matrix (one row for each mixed image) 

C=3; % number of components to separate                       

W=zeros(numofIC,VariableNum); % weights matrix  

for p=1:C       

    % initialize random weight vector of length N             
    wp = rand(C,1);                   
    wp = wp / norm(wp);  

    % like do:
    i = 1;
    maxIterations = 100; 
    while i <= maxIterations+1

       % until mat iterations 
       if i == maxIterations    
            fprintf('No convergence: ', p,maxIterations); 
            break; 
        end 

        wp_old = wp; 

        % this is the main part of the algorithm and where
        % I'm confused about the particular implementation

        u = 1; 
        t = X'*b; 
        g = t.^3; 
        dg = 3*t.^2; 
        wp = ((1-u)*t'*g*wp+u*X*g)/M-mean(dg)*wp;

        % 2nd and 3rd wp update steps make sense to me   
        wp = wp-W*W'*wp;                       
        wp = wp / norm(wp);  

        % or until w_p converges
        if abs(abs(b'*bOld)-1)<1e-10      
             W(:,p)=b;                  
             break; 
         end 

        i=i+1;         
    end 
end 

以及快速参考的 Wiki 算法:

【问题讨论】:

  • 好吧,在我打开这个赏金之后,我发现了我的误解:/ 如果你想要一些积分,请继续回答。

标签: algorithm matlab image-processing machine-learning feature-detection


【解决方案1】:

首先,我不明白为什么始终为零的术语仍保留在代码中:

wp = ((1-u)*t'*g*wp+u*X*g)/M-mean(dg)*wp;

以上可以简化为:

wp = X*g/M-mean(dg)*wp;

同时删除 u,因为它始终为 1。

其次,我认为下面这行是错误的:

t = X'*b;

正确的表达方式是:

t = X'*wp;

现在让我们来看看这里的每个变量。让我们参考

w = E{Xg(wTX)T} - E{g'(wTX)}w

作为迭代方程。

  • X 是您的输入数据,即迭代方程中的 X

  • wp是权重向量,即迭代方程中的w。它的初始值是随机的。

  • g是非二次非线性函数的一阶导数,即g(wTX) 在迭代方程中

  • dgg的一阶导数,即g'(wTX) 在迭代方程中

  • M虽然在你提供的代码中没有显示它的定义,但我觉得应该是X的大小。


了解了所有变量的含义后,我们现在可以尝试理解代码了。

    t = X'*b; 

以上行计算 wTX

    g = t.^3; 

以上行计算 g(wTX) = (wTX)3。注意g(u)可以是任意方程,只要f(u),其中g(u) = df(u)/du, 是非线性和非二次的。

    dg = 3*t.^2; 

以上行计算g的导数。

    wp = X*g/M-mean(dg)*wp;

Xg 显然计算 Xg(wTX)。 Xg/M计算Xg的平均值,相当于E{Xg(wTX)T}。

mean(dg)E{g'(wTX )} 并在等式中乘以 wpw

现在您已经拥有了 Newton-Raphson 方法所需的一切。

【讨论】:

  • @Jake 因为你在应用权重因子后降低了图片的“亮度”。
  • 纯数学,你可以将w应用于居中的数据,即X,但是你必须使结果不居中,这不太可能.如果您尝试S = W'*WhiteningMat*UncenteredUnwhitenedData; SMean = mean(S); S_centredThenUncentred = W'*X+SMean;,则可以验证这一点,S 应该等于S_centredThenUncentred。您可能需要修改计算均值和去中心的表达式。
  • @Jake 我认为您在评论中提出的问题与代码背后的数学和理论更相关,而不是代码本身,这意味着它超出了您原始问题的范围。我对ICA也不熟悉(昨天才开始看),如果没有任何信号处理方面的背景知识,我很难在短时间内理解它。我建议您在其他地方提出一个新问题,也许是here
  • 另外,我想纠正自己,降低“亮度”的不是重量。这是因为 ICA 无法恢复原始信号的幅度。我读了这个here
  • @Jake 感谢您的支持。我发现some slidesa journal paper 都提到了 ICA 的一个限制,即无法确定输出的符号。对于图像,解决方案非常简单。由于不存在负 rgb 值,因此只需取绝对值。 Doc 1 似乎是关于 ICA 的很好的讲座。我以后可能会读它:)。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2020-10-03
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多