【self-taught learning】学习论文以及代用代码

self-taught learning】快速稀疏编码算法

 

Self-taught learningHonglak Lee等开发的一个matlab框架,能够实现他们在论文Self-taught Learning Transfer Learningfrom Unlabeled DataEfficient sparse coding algorithms中提出的快速实现图像稀疏编码的算法。

 

先看第一篇论文《Self-taught LearningTransfer Learning from Unlabeled Data

 

主要思想:

在监督分类算法的数据中,加入部分unlabel的数据,未标数据不一定和训练集数据从属同一类类别,在建模过程中,首先根据未标数据训练出一组基,然后对训练集的数据用该空间的基表示,最后使用SVM或其他分类算法进行分类。

 

PS.

这种方法不同于semi-supervised learning,后者需要加入的未标数据,必须跟训练集具有相同类型的类别,例如想要对大象和犀牛的图像集分类,就必须加入大象和犀牛的未标图像,而self-taught learning可以加入任意图像比如自然景色等。

加入未标数据是为了使图像的特征变得稀疏,能够加速训练的计算速度。

 

符号约定:


 

算法介绍

 

第一步:根据未标数据学习一组表示图像的基。

 

对于未标数据,提出如下的优化公式:

 

优化的目标是基向量组b和稀疏系数ak是输入数据的个数,s是新空间的维度,n是原始输入空间的维度。所以,bs*n的矩阵,ak*s的矩阵。上面的公式有两项需要优化,左边项的目的是用一组基来表示输入数据,并且使得误差最小,右边项引入了L1规则作为惩罚项,使得学习出来的系数a大部分是零。

保持a不变求b,或者保持b不变求a,都是凸优化问题,可以用梯度下降等方法求得。

这里补充一下L1/L2规则化。(在第二篇论文里提到过)

常用的规则化函数有下面三种:

 【self-taught learning】学习论文以及代用代码_第1张图片

第一种是L1规则化,即1范数。第二种是加上参数的L1规则化。第三种是log规则化。前两种作为稀疏函数求解都是凸优化的问题,所以比较常用,而且L1规则化通常用于产生稀疏,对不相关特征也有很好的鲁棒性。

 

第二步:根据上步的基,表示已标数据。

 

对每个已标数据,根据第一步中得到的一组基,通过优化下面的公式得到其稀疏系数a

 

这就变成了L1规则化最小二乘问题,可以优化出稀疏向量来表示输入。

 

第三步:将得到的数据特征输入分类器进行分类。

 

将上步得到的训练数据的特征输入分类器(例如SVM)中进行分类。

 

完整算法伪代码:

 

 

论文中还涉及到了与其他算法(PCA)的对比,以及实验,这里略过不提。

 

 

再看第二篇论文《Efficient sparse coding algorithms

 

有了上面的基础,如何快速稀疏编码就会更容易理解,大体思路是一样的,不同之处在于优化公式有所改变,如下:

 

生成模型的误差服从(mean=0, cov=σ2I)的高斯分布,上式用矩阵表示如下:

 

B固定求S,或者S固定求B的时候,都是凸优化问题。在这篇论文里,交替的求BS(保持另一个固定)。当学习B时,问题变成了最小二乘优化问题,解决方法有QCQP、梯度下降,问题是QCQP求解速度慢,梯度下降收敛慢,论文提出使用“Lagrange dual”求解。当学习S时,问题变成了规则化最小二乘问题,论文里使用“generic QP”方法解决。

 

这篇论文我还没有看完,现在存在这样的问题

1、我还不太明白最小二乘、规则化最小二乘是啥意思。

2、Lagrange dual方法还没看具体是怎样推导的。

3、generic QP也没看怎么推导的。

 

 

Matlab代码的使用方法

作者提供了self-taught learning框架的matlab代码,下载

 

使用方法:

 

1. download IMAGES.mat from http://redwood.berkeley.edu/bruno/sparsenet/

2. copy IMAGES.mat to ./data directory

3. move to ./code 

4. run matlab and execute:

        "demo_fast_sc(1)": epsilon-L1 sparsity penalty

        "demo_fast_sc(2)": L1 sparsity penalty

 

Note: You can apply sparse coding to any type of general data. See sparse_coding.m for details.

你可能感兴趣的:(【self-taught learning】学习论文以及代用代码)