贪婪深度字典学习

原文地址:http://blog.csdn.net/hjimce/article/details/50876891

作者:hjimce

一、相关理论

近几年深度学习声名鹊起,一个又一个AI领域被深度学习攻破,然而现在大部分深度学习所采用的算法都是有监督学习的方法;有监督学习需要大量的标注数据,需要耗费大量的人力物力。因此当有监督学习算法达到瓶颈的时候,无监督学习必将成为未来深度学习领域的研究焦点,使得深度学习更接近于人类;毕竟无标签数据一抓一大把、到处都是,如果我们可以搞好无监督学习,这才是牛逼人工智能。

无监督表征学习,除了自编码、受限玻尔兹曼机之外,k-means、稀疏编码等也是无监督表征学习的重要算法。无监督表征学习算法的应用主要分两种:

(1)用于神经网络的无监督预训练。这个我们在深度学习里面经常遇到,比如自编码、RBM就可以分别用于SAE、DBN深度网络的预训练;

(2)无监督特征抽取,然后用抽取到的特征做分类任务;这个说白了就是先用无监督算法抽取高层特征,然后再用SVM来训练特征分类器,像稀疏编码、k-means表征学习一般是这么使用的,当然AE、RBM也可以这样使用。

本篇博文主要讲解我最近所学的一篇paper:《Greedy Deep Dictionary Learning》。这篇文献主要提出了一个深度字典学习方法,字典学习也可以简单的称之为稀疏编码。文献算法主要是受了栈式自编码、DBN训练方法的启发,提出逐层贪婪深度字典学习。

二、贪婪深层字典学习

之前人们所研究的算法都是针对单层字典学习(浅层字典学习),然而我们知道深层模型具有更抽象、更牛逼的表征能力。既然单层自编码对应的DL模型“栈式自编码”;RBM也有对应的DL模型“深度信念网络”;于是文献借助于这思想,也提出了单层字典学习的对应DL算法:深度字典学习。

1、字典学习相关概念

从矩阵分解角度看字典学习过程:给定样本数据集X,X的每一列表示一个样本;字典学习的目标是把X矩阵分解成D、Z矩阵:

X≈DZ

同时满足约束条件:X尽可能稀疏,同时D的每一列是一个归一化向量。这样就相当于求解目标函数:

D称之为字典,D的每一列称之为原子;Z称之为编码矢量、特征、系数矩阵。除了上面这个损失函数之外,字典学习还有另外两种形式的损失函数,比如k-svd字典学习算法,求解的目标函数就是:

具体字典学习相关概念,可以参考我的另外一篇博文《k-svd字典学习》,这边不再啰嗦。

2、深层字典学习

我们前面讲到字典学习说白了就是矩阵分解:

X=DZ

这是一个单层矩阵分解,就相当于单层神经网络一样。而文献所提出的算法是多层字典学习,也就是多层矩阵分解:

X=D1*D2*Z

首先字典学习它是个非凸优化问题,多层字典学习将会变得更加复杂;另外多层字典学习的所要求解的参数大大增加,在有限的训练样本下,容易引起过拟合问题。因此文献提出类似于SAE、DBN一样,采用逐层训练学习的思想,这样可以保证网络的每一层都是收敛的。算法其实非常简单,以双层分解为例进行逐层分解,具体示意图如下:

(1)我们首先训练学习出第一层特征Z1、权重D1:

X=D1*Z1

(2)然后对特征Z1进行分解,求解第二层权重D2、特征Z2:

Z1=D2*Z2

以此类推,就可以实现更深层的字典学习。OK,这就是文献的算法,没了……(感觉啥也没学到的样子,给我的感觉很low,跟文献《A deep matrix factorization method for learning attribute representations》没得比呀,这篇文献至少还有整体微调阶段)

3、paper使用方法

在每一层字典学习的时候,我们可以通过添加约束项,选择稠密特征或者是稀疏特征。

(1)如果要求解稠密特征,那我们就直接求解目标函数:

也就是没有了稀疏约束项。求解方法采用类似lasso,即对两个变量Z、D交替迭代的方法:

(2)如果要求解稀疏特征,那么我们就用L1正则约束项:

然后迭代公式就是:

对于第二个公式Dk的求解,也是求解一个最小二乘问题。对于稀疏编码Zk的求解采用ISAT算法,如下公式:

以前字典学习,一般字典的初始化都是从样本中随机抽取的,然而本文采用的是QR分解,从Q矩阵中按顺序,提取出正交向量,作为初始字典。另外文献最后采用的网络模型是,除了最后一层采用稀疏编码之外,其它层都采用的稠密特征。

三、与RBM、自编码的区别、联系

1、与RBM的联系

RBM是损失函数是采用数据分布相似性度量,而字典学习是采用欧式距离损失函数。RBM要求数据介于0~1之间,如果数据超过这个范围,那么就需要做归一化处理。在大部分情况下,归一化对于我们所要的性能可能没啥影响,但是在某些特定的情况下它会抑制一些重要的信息。然而字典学习可以让我们输入任意复杂的数据。

2、与自编码的联系

从我们的分析来看,自编码是学习W,使得W*X=Z,然而字典学习的目标是学习D使得X=DZ。也难怪文献中的字典学习网络的线是画相反的方向。

四、试验结果

1、浅层学习与深层学习对比

文献对比了浅层表征学习和深层表征学习的结果,采用两种方法进行特征Z的学习,然后采用k近邻进行分类测试,结果如表一所示。

2、与SAE、DBN的对比

三个网络模型都采用3层网络,每层网络神经元一次减半。同样的我们利用这两个算法进行表征学习提取高层特征,然后利用高层特征进行分类:KNN,SVM,测试结果得到表格2、3

最后再采用fune-tuning后的DBN、SAE,与本文的算法做出了对比,得到结果表格IV。可以看到,在某些情况下,即使是fine-tuning的DBN、SAE,精度也比不上文献的算法DDL:

个人总结:这篇文献其实非常简单,就仅仅是讲解X=D1*D2*Z的一个求解方法,然而文献竟然啰嗦了将近10页;而我竟让这篇博文也写了这么多,感觉自己快成了说书的了,越来越能扯……不过文献所提出的算法虽然简单,但是作者通过验证对比,确实是非常牛逼的效果,在无监督的条件下,比自编码、RBM都要牛逼,甚至连fine-tuning的自编码、RBM在某些任务下,都无法与之匹敌。不过这个还是比较喜欢另外一篇文献:《A deep matrix factorization method for learning attribute representations》,这篇文献讲的是深度非负矩阵分解,里面的创新点非常多,这样可以学到更多的知识,感觉才比较充实。

参考文献:

1、《Greedy Deep Dictionary Learning》

2、《A deep matrix factorization method for learning attribute representations》

**********************作者:hjimce   时间:2016.3.13  联系QQ:1393852684   原创文章,转载请保留作者、原文地址信息********************

深度学习(三十)贪婪深度字典学习相关推荐

  1. torch学习 (三十四):迁移学习之微调

    文章目录 引入 1 微调 2 热狗识别 2.1 数据集载入 2.2 数据集预处理 2.3 定义和初始化模型 2.4 微调模型 致谢 引入   场景:   从图像中识别出不同种类的椅子,然后将购买链接推 ...

  2. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!

    推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...

  3. 深度学习三十年创新路

    深度学习三十年创新路 编者注:深度学习火了,从任何意义上,大家谈论它的热衷程度,都超乎想象.但是,似乎很少有人提出不同的声音,说深度学习的火热,有可能是过度的繁荣,乃至不理性的盲从.而这次,有不同的想 ...

  4. 花书+吴恩达深度学习(十八)迁移学习和多任务学习

    目录 0. 前言 1. 迁移学习 2. 多任务学习 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十八)迁移学习和多任务学习 花书+吴恩达深度学习(十 ...

  5. 36.深度解密三十六:网络舆情监测之另类“免费监测”方法详解

    网络营销推广技术.技巧深度解密(三十六)指南: 1.本文档适合零基础以及互联网营销推广工作者,主要讲解免费网络舆情监测的问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...

  6. 32.深度解密三十二:详解影响QQ群整体排名的那些秘密

    网络营销推广技术.技巧深度解密(三十二)指南: 1.本文档适合零基础以及互联网营销推广人员,主要讲解营销QQ群排名的一些问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...

  7. Slicer学习笔记(三十五)slicer学习链接

    Slicer学习笔记(三十五)slicer学习链接 使用方面: 坐标系:https://www.slicer.org/wiki/Coordinate_systems 模块:https://slicer ...

  8. Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符

    shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...

  9. Tensorflow实战学习(三十八)【实现估值网络】

    Q-Learning,学习Action对应期望值(Expected Utility).1989年,Watkins提出.收敛性,1992年,Watkins和Dayan共同证明.学习期望价值,从当前一步到 ...

  10. 三十岁可以转行学习编程吗?

    经常听到一些二十七八,三十来岁的想学编程的人问,我这个年龄还可以学编程吗? 我想说的是,从找工作的角度来讲,年龄大,确实没有优势,找工作会比较困难,但能够坚持下去,找到一份工作肯定是没有问题的. 本质 ...

最新文章

  1. The Innovation | ESCI Indexing
  2. SUMO 在LINUX 下安装以及环境变量的配置
  3. countDownLatch 与 CyclicBarrier 区别
  4. C++ #pragma comment语法(预处理指令)
  5. 思科模拟器,计算机网络实验三之:静态路由配置
  6. jmx jolokia_使用Jolokia和JMX进行客户端服务器监视
  7. 150 Evaluate Reverse Polish
  8. 解决使用Servlet输出乱码问题(一行代码解决一切)
  9. 按照行数分割excel
  10. 情人节脱单秘诀,程序员表白的情话大盘点!| CSDN 博文精选
  11. You have new mail in /var/spool/mail/root 解决方法
  12. 到底谁应该对软件开发的质量负责?
  13. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
  14. 中国国内市级城市英文名称
  15. 计算机网络发展分几个阶段各有什么特点,计算机网络的发展可以划分为几个阶段?每个阶段都有什么特点?...
  16. 右键菜单,用VSCode打开文件和文件夹
  17. nats streaming订阅
  18. 如何查美国公司的年报
  19. Origin2018怎么画出向上向下的柱状图
  20. 第一行代码第三版笔记

热门文章

  1. 如何设置工作流到了某一节点自动执行java方法_2019年JAVA最常见面试题汇总(收藏)...
  2. PHP表单提交后页面跳转,PHP在表单提交后重定向到另一个页面
  3. 厦门大学计算机专业录取分数线2019,2019年厦门大学各省市各批次录取分数线公布【完整版】...
  4. 洛谷 P1183 多边形的面积
  5. selenium 安装报错问题
  6. Go语言【第九篇】:Go数据结构之:数组
  7. java中抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰...
  8. Listview的OnScrollListener的滑动监听实现分页加载
  9. 20145335 《信息安全系统设计基础》第2周学习总结
  10. joomla \libraries\joomla\session\session.php 反序列化截断畸形字符串导致对象注入漏洞...