Deep Learning by Andrew Ng --- Sparse coding

来源:互联网 发布:油田网络宽带客服电话 编辑:程序博客网 时间:2024/05/17 22:49

稀疏编码介绍

稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。稀疏编码算法的目的就是找到一组基向量

ϕi
,使得我们能将输入向量 x 表示为这些基向量的线性组合:
x=i=1kaiϕi

不同于PCA,sparse coding目的是寻找一组“超完备”基向量而非“完备”基向量。也就是说sparse coding中k要大于n。
含了限制条件的稀疏编码代价函数的完整形式如下(参考UFLDL):
minimizea(j)i,ϕisubject toj=1mx(j)i=1ka(j)iϕi2+λi=1kS(a(j)i)||ϕi||2C,i=1,...,k

学习算法

使用稀疏编码算法学习基向量集的方法,是由两个独立的优化过程组合起来的。第一个是逐个使用训练样本 x 来优化系数 ai ,第二个是一次性处理多个样本对基向量

ϕ
进行优化。

可以使用 L1 范式 :

S(ai)=|ai|1
或L2 范式作为稀疏惩罚函数。(具体参考UFLDL)

根据前面的的描述,稀疏编码是有一个明显的局限性的,这就是即使已经学习得到一组基向量,如果为了对新的数据样本进行“编码”,我们必须再次执行优化过程来得到所需的系数。这个显著的“实时”消耗意味着,即使是在测试中,实现稀疏编码也需要高昂的计算成本,尤其是与典型的前馈结构算法相比。

目标函数

J(A,s)=Asx22+λs2+ϵ+γA22
s2+ϵks2k+ϵ
的简写。在给定 A 的情况下,最小化 J(A,s) 求解 s 是凸的。同理,给定 s 最小化 J(A,s) 求解 A 也是凸的。这表明,可以通过交替固定 s和 A 分别求解 A和s。其中包括weight decay还有smoothing parameter(sparsity parameter)。

该目标函数可以通过以下过程迭代优化(注意一种矩阵微积分的求法):

  • 随机初始化A
  • 重复以下步骤直至收敛:
    根据上一步给定的A,求解能够最小化J(A,s)的s
    根据上一步得到的s,,求解能够最小化J(A,s)的A

梯度下降方法求解目标函数也略需技巧,另外使用矩阵演算或反向传播算法则有助于解决此类问题

拓扑稀疏编码

我们拓扑希望稀疏编码能学习得到一组有某种“秩序”的特征集。

J(A,s)=Asx22+λVssT+ϵ+γA22

稀疏编码实践(技巧)

两种更快更优化的收敛技巧:

  • 将样本分批为“迷你块”
  • 良好的s初始值:令
    sWTx(xpatches)
    或者
    ssAsr,ccrAcAcsr,csr,cAc.

稀疏编码算法修改如下:

  • 随机初始化A。
  • 重复以下步骤直至收敛:
    随机选取一个有2000个patches的迷你块
    如上所述,初始化s
    根据上一步给定的A,求解能够最小化J(A,s)的s
    根据上一步得到的s,求解能够最小化J(A,s)的A

作业题

该作业需要我们自己对costfunction求导:
这里写图片描述
这里写图片描述

以后补充,未完待续。

0 0
原创粉丝点击