zoukankan      html  css  js  c++  java
  • 稀疏过滤

          稀疏过滤
    Jiquan Ngiam,Pang Wei Koh,Zhenghao Chen,Sonia Bhaskar,Andrew Y.Ng

        摘要:无监督特征学习能够在图像、视频和语音分类上高效的学习表征是众所周知的。然而现今很多特征学习算法却很难被使用,而且需要大量的超参数调整。在本文中,我们提出了稀疏过滤,一个简单的新算法,它不但是高效的,而且在特征学习过程中也只需要调整一个超参数。相比较其他特征学习方法,稀疏过滤不需要明显的试图去对数据分布构建一个模型。它只需要优化一个简单的损失函数--L2标准化特征的稀疏性--这个很容易实现。稀疏过滤能够很好的缩放去处理高维度的输入,也可以通过贪心逐层堆叠来在额外的层进行学习有意义的特征。我们在自然图像、目标分类(STL-10)和电话分类(TIMIT)上做实验进行评估,结果显示我们的方法在不同模态下都有很好的表现。
      1引言
        无监督特征学习近来被认为是人工设计特征表征的一个切实可行的替代品。在许多语音,图像,视频任务中,所学到的特征可以达到或者优于那些对这些任务所专门设计的特征。然而,当前许多的特征学习算法被难使用的原因是因为他们需要很好的对超参数进行调整。例如,稀疏RBM有差不多6个超参数和一个难处理的目标函数,这使得调整和监控是否收敛变得困难。
        在本文中,我们提出了稀疏过滤,这是一个新的特征学习算法,它不但容易执行而且本质上也是差不多超参数-free的。稀疏过滤不但高效而且可以缩放自如的应对大维度的输入。相比之下,其他特征学习算法在大输入上所运行的计算量却要大得多。
        稀疏过滤是专门在特征分布的稀疏性上做专门的优化。一个关键的想法就是可以避免对数据分布的明显的建模;这得益于一个简单的公式而且也允许能够高效的学习。而且我们的方法能够以很少的matlab代码就能够运行并且可以使用现成的最小化函数例如L-BFGS等来很好的工作。
        进一步的说,这个超参数-free就是稀疏过滤可以在一个大范围的数据模态上很好的工作,而且不需要对每个具体的模态做具体的调整。这也使得我们能够很简单的去针对不同的任务学习合适的特征表征,包括对象分类和电话分类。
        
    2无监督特征学习
        传统上说,特征学习方法都需要去先学习模型并使得模型对真实数据分布有一个很好的逼近;这些模型有消噪自动编码器,RBM,不同版本的ICA和稀疏编码等等。
        这些特征学习方法在很多任务上都学到了很好的特征表征。然而,他们通常都较难执行,而且需要对各自超参数进行调整;见表1是在几个主流的特征学习算法上的可调参数的对比。这些超参数的好的设定是因任务的不同而不同的,有时候会导致一个漫长的发展过程。尽管ICA只有一个可调参数,但是它对大数据集的特征或者大的输入时不能很好的适应的。(因为他需要求协方差,而且需要协方差的矩阵分解)。
       在本工作中,我们的目标就是设计一种简单而高效的特征学习方法,他只需要微小的调整。为此,我们只需要关注于我们特征的关键的特性就行--population稀疏性,lifetime稀疏性和高dispersal--不会显式的对数据分布进行建模。
       虽然给数据分布学习一个模式是合情合理的,但是它的确是复杂的学习算法:例如,为了作为数据的似然去优化,稀疏RBM需要逼近log偏导数的梯度;稀疏编码需要运行相当大的代价去推导才能在每一次的迭代中找到激活基向量的系数,数据重构项的相对应的权值和包含的稀疏性项都是需要调整的超参数。
    3特征分布
        前文中讨论的特征学习方法都可以被看成是生成特定的特征分布。例如,稀疏编码通过使用一些非零的系数(特征)去表示每个样本。一个特征分布导向的方法可以在给予对特征分布的适当的特性的优化上提供设计新算法的思路。
       更详细的,让我们在基于一个有限数据集的基础上设定一个特征分布矩阵,每一行是一个特征,每一列是一个样本(n xm),每个实体f^(i) _ j是在样本i的特征j的激活值。我们假设特征是通过这些样本的决策函数生成的。
       我们考虑下面两个较为合适的特征分布的特性:
        每个样本的稀疏特性(population稀疏性):.每个样本应该只需要一些激活的(非零)特征来表示。具体的,特征矩阵中的每列(一个样本),f^(i),我们只需要少量的激活元素。例如,一个图片可以用图片中的对象来进行描述,然而,会有很多可能的对象会出现,但是在一个时间中一般只有几个对象会存在一个图片中。这个概念被称之为population 稀疏【13 14】也是被认为早期视觉皮层(V1)的一个高效编码方式。(ICA不能学习超完备特征表征,除非你采用了极端高昂的逼近正交算法。甚至当学习完备特征表征的时候,他仍然需要在每次迭代中进行一个高昂正交运算。)。
      穿插于样本的稀疏特征(lifetime 稀疏性):特征应该是具有决策性的并允许我们去区分样本;因此,每个特征应该只需要对少量的样本负责激活。这意味着特征矩阵中的每一行只需要少量的非零元素。这个特性也被称之为lifetime稀疏性【13 14】。
       统一的激活分布(高度dispersal):对于每一行,这个分布相对于其他行来说,应该有着相似的统计性;不是说这一行应该明显比令一行有着更好的“激活性”。具体的,我们考虑一个关于每个特征的均值平方激活,即穿插于这个矩阵的每一列(样本),计算每一行的平方值然后求均值。这个值对于每个特征来说都应该是差不多的,集所有的特征都有相似的分布(个人:就是要对整个数据集的每个特征进行缩放,比如【0 1】啊)。然而高度dispersal不是必须对好的特征表征都需要严格遵守的(个人:就是这个可以不同的特征提取来说 这个是可选的操作)。我们发现强制遵守高度dispersal会导致degenerate situation(不知道怎么翻译合适)这其中同样的特征总是会一起激活【14】。对于超完备基表征来说,高度dispersal 会转换成拥有更少的“非激活”特征。举个例子,PCA编码通常不满足高度dispersal,因为编码中相对应的最大的特征值总是激活的。
        这些特征表征的特性在神经科学文件中已经被发现了【9 13 14 15】。例如,【14】文献显示population稀疏性和lifetime稀疏性不是一定要相关的。我们注意到神经编码的特点是可以作为特征分布的特性表现出来的,而不是数据分布的建模方法。
        许多的特征学习算法(包括这些目标)。例如稀疏RBM【6】通过将特征(基于他的lifetime)的期望激活值限制于和他的目标值接的很近。ICA【9 10】需要对每个特征进行标准化(每个基需要单元范数),并进一步对他学到的特征的llifetime稀疏性进行优化。稀疏AE【16】同样需要对lifetime稀疏性进行优化。
        另一方面,聚类的方法例如K-mean是【17】可以被视为执行population稀疏性的极端形式,其中每个聚类中心相当于一个特征,而且每一个特征值被允许去激活一个样本。“三角”激活函数,基本上是为了确保population稀疏性,已经被证实可以获得好的分类结果【17】,稀疏编码【11】也同样典型的可以被视为population稀疏性。
       我们的工作中,通过使用特征分布视图去获取一个简单的特征学习算法仅仅去确保population稀疏性和高度dispersal。在我们的实验中,我们发现识别这两者特殊足够让我们去学习超完备表征;我们同样认为这两个特性是可以联合起来去确保lifetime稀疏性的。
    4 稀疏过滤
        这部分中,我们会说明稀疏过滤如何遵守上述原则的。假设学习一个能够计算每个样本的线性特征的函数。具体的说,让f^(i) _ j 表示第 i 个样本(列)的第 j 个特征值(行),。我们的方法是首先按照行标准化特征的分布矩阵,然后按照列标准化,然后对所有元素的绝对值求和。
        具体的说,我们首先让每个特征都能够等同激活,就是每个特征除以所有样本的相对应特征的L2范数:。然后在标准化每个样本,这样他们都会位于一个单元L2-球,通过计算 。标准化后的特征是通过使用 L1惩罚来作为稀疏性的优化的。对于一个有着M个样本的数据来说,给定的稀疏过滤的目标函数是:
        (公式1)
    4.1对population稀疏性的优化
        这项是在第 j 个样本上测量特征的population稀疏性。考虑到标准化特征已经被限制成位于单元L2-球上了,这个目标就是当特征是稀疏的时候最小化(图1左边),如图中接近轴的时候。相反,当一个样本对于每个特征有相似值的时候就会生成一个很大的惩罚。


    图1:左:基于两个特征(f1,f2)和两个样本(红和绿)的稀疏过滤。每个样本首先映射在L2-球上,然后在进行稀疏性的优化。这个L2-球是以L1范数的不同层次展现的(个人:图中直的虚线)注意到特征的稀疏性是当样本位于轴上时最大的。右:标准化导致的特征之间的竞争。我们只展现一个样本,其中只有f_1是增加的。注意到尽管f_1是增加的,这个第二个特征值的标准化f_1是下降的。

         标准化后的特征的一个特性是暗示着特征之间的竞争。注意到如果只有一个f^(i)的成分增加了,那么其他的成分就会因为标准化的原因下降(图1 右)。相似的,如果只有f^(i)的一个成分下降,那么所有的其他成分就会上升。因为我们是最小化,这个目标鼓励标准化特征成为稀疏的,而且尽可能的接近0.将这些标准化放到一起,就意味着f^(i)中的一些特征必须当其他的特征都是很小(接近于0)的时候变得很大,因此,目标函数的优化是针对population稀疏性的。
        这个式子很接近关于population/lifetime稀疏性的Treves-Roll【14 18】测量:,这里F是特征的总数。这个测量通常是iyonglai去描述闹钟的神经元激活的稀疏性的。具体的说,我们剔除的式子可以被看成是一个对这个测量的平方根的再次缩放。
    4.2针对高度dispersal的优化
        


    看到有人已经把这篇论文翻译了,所以下面的不翻译了,而且。。

    http://blog.csdn.net/zouxy09/article/details/9982859

    附上作者代码:
    Algorithm 1 Sparse Filtering Matlab Implementation
    function [optW] = SparseFiltering(N, X);
    % N = # features to learn, X = input data (examples in column)
    % You should pre-process X by removing the DC component per example,
    % before calling this function.
    % e.g., X = bsxfun(@minus, X, mean(X));
    addpath minFunc/ % Add path to minFunc optimization package
    optW = randn(N, size(X, 1));
    optW = minFunc(@SparseFilteringObj, optW(:), struct('MaxIter', 100), ...
    X, N);
    optW = reshape(optW, [N, size(X, 1)]);
    end
    function [Obj, DeltaW] = SparseFilteringObj (W, X, N)
    % Reshape W into matrix form
    W = reshape(W, [N, size(X,1)]);
    % Feed Forward
    F = W*X; % Linear Activation
    Fs = sqrt(F.ˆ2 + 1e-8); % Soft-Absolute Activation
    [NFs, L2Fs] = l2row(Fs); % Normalize by Rows
    [Fhat, L2Fn] = l2row(NFs'); % Normalize by Columns
    % Compute Objective Function
    Obj = sum(sum(Fhat, 2), 1);
    % Backprop through each feedforward step
    DeltaW = l2grad(NFs', Fhat, L2Fn, ones(size(Fhat)));
    DeltaW = l2grad(Fs, NFs, L2Fs, DeltaW');
    DeltaW = (DeltaW .* (F ./ Fs)) * X';
    DeltaW = DeltaW(:);
    end
    function [Y,N] = l2row(X) % L2 Normalize X by rows
    % We also use this to normalize by column with l2row(X')
    N = sqrt(sum(X.ˆ2,2) + 1e-8);
    Y = bsxfun(@rdivide,X,N);
    end
    function [G] = l2grad(X,Y,N,D) % Backpropagate through Normalization
    G = bsxfun(@rdivide, D, N) - bsxfun(@times, Y, sum(D.*X, 2) ./ (N.ˆ2));



  • 相关阅读:
    Top WAF
    Access-Control-Allow-Origin与跨域
    SQLlite
    SHell命令总结
    yum仅下载RPM包不安装
    Taglib
    JFinal
    Eclipse maven git
    maven jetty plugin
    wechat
  • 原文地址:https://www.cnblogs.com/shouhuxianjian/p/4529208.html
Copyright © 2011-2022 走看看