转:Deep learning系列(十五)有监督和无监督训练
http://m.blog.csdn.net/article/details?id=49591213
1. 前言
在学习深度学习的过程中,主要参考了四份资料:
- 台湾大学的机器学习技法公开课;
- Andrew NG的深度学习教程;
- Li feifei的CNN教程;
- caffe官网的教程;
对比过这几份资料,突然间产生一个困惑:台大和Andrew的教程中用了很大的篇幅介绍了无监督的自编码神经网络,但在Li feifei的教程和caffe的实现中几乎没有涉及。当时一直搞不清这种现象的原因,直到翻阅了深度学习的发展史之后,才稍微有了些眉目。
深度学习的发展大致分为这么几个时期:
- 萌芽期。从BP算法的发明(1970s-1980s)到2006年期间。
- 迅速发展期。从2006年栈式自编码器+BP微调提出之后。
- 爆发期。2012年Hilton团队的Alexnet模型在imagenet竞赛取得惊人成绩之后。
2. 萌芽期
在Yann LeCun、Yoshua Bengio和Geoffrey Hinton三巨头nature深度学习综述deep learning文章中提到,这段期间神经网络模型被主流的计算机视觉和学术界所抛弃。
这期间,学者们试图用有监督学习的方式训练深度神经网络,然而方法不是十分奏效,陷入了困境,在Andrew的教程中可以找到大概这几点原因:
- 数据获取问题。有监督训练需要依赖于有标签的数据才能进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,很难获得足够多的样本来拟合一个复杂模型的参数。例如,考虑到深度网络具有强大的表达能力,在不充足的数据上进行训练将会导致过拟合。
- 局部极值问题。使用监督学习方法来对浅层网络(只有一个隐藏层)进行训练通常能够使参数收敛到合理的范围内。但是当用这种方法来训练深度网络的时候,并不能取得很好的效果。特别的,使用监督学习方法训练神经网络时,通常会涉及到求解一个高度非凸的优化问题。对深度网络而言,这种非凸优化问题的搜索区域中充斥着大量“坏”的局部极值,因而使用梯度下降法(或者像共轭梯度下降法,L-BFGS等方法)效果并不好。
- 梯度弥散问题。梯度下降法在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学习。这种问题通常被称为“梯度的弥散”。
因为一直没找到有效解决这些问题的方法,这期间,深度神经网络的发展一直不温不火。或者说在2001年Hochreiter的Gradient flow in recurrent nets: the difficulty of learning long-term dependencies(好像是这篇)提出了神经网络存在的几个问题后,在接下来的几年内神经网络的发展陷入了低谷。而那几年流行的机器学习算法是SVM和集成模型(随机森林、adaboost等),如下图所示。
3. 迅速发展期
06年Hilton在nature上发表了一篇文章Reducing the dimensionality of data with neural networks,针对上面提到的三个深度学习问题,提出了栈式自编码器+BP微调的解决方案。在一定程度上解决了上面的三个问题:
- 栈式自编码神经网络是无监督学习算法。因而不需要规模很大的有标签样本。
- 经过自编码神经网络训练后的参数已经落在一个较优的位置上,从这个位置开始BP微调,不用担心局部极值问题。
- 自编码神经网络训练已经使深度网络的前几层参数具有表达能力了,比如可以提取出图片的边,局部组建等,即使有梯度弥散问题,前几层参数不再更新,也不会影响最终深度网络的表达能力。
因为上面的原因,在经历01年神经网络的低谷后,深度学习开启的崭新的浪潮,走上了发展的快车道,从上图的红线可以明显的看出。
4. 爆发期
在12年的ILSVRC竞赛中,Hilton团队的Alexnet模型Imagenet classification with deep convolutional neural networks将1000类分类的top-5误差率降低到了15.3%,碾压了第二名使用SVM算法的26.2%,开启了深度学习的革命,从此之后,深度学习走上了指数式的发展道路。在15年CVPR的文章中,我关注的两个方向场景语义标注和显著物体检测,有相当大比例的文章中涉及CNN或者deep的字眼,估计明年CVPR文章中深度学习的比例会更高。工业界的火爆就不用多提了,从Yann LeCun、Yoshua Bengio和Geoffrey Hinton三巨头到颜水成、li feifei这样的视觉方向大牛都被挖到互联网公司就可见一斑。
回到Hilton团队的Alexnet模型上,仅仅使用了有监督的训练,貌似没涉及无监督的预训练。不是在之前说有监督的深度学习训练存在很多问题吗,大概是因为这几条原因,导致了有监督训练的可行:
- 大规模标注数据的出现。在ILSVRC使用的数据集包括120万的训练图片,5万张验证图片和15万张测试图片。这些图片都是有标注的(属于1000类),而在imagenet出现之前,这样规模的标注数据是不存在的。
- 对于局部极值的问题,nature综述中,三个大牛作者的说法是:对于深度网络来说,局部极值从来都不是一个问题,从任意的初始参数值开始训练网络,最后都能达到相似的分类效果。这也是被最近的理论和实践所证明的。
- 对于梯度弥散导致的收敛速度慢问题。Alexnet模型的两大利器:ReLU激活函数和GPU并行加速。前者使SGD有6倍的加速,后者使用两块GTX580GPU也极大的加快了SGD的收敛速度,两者效果相乘,使得无监督预训练几乎是多余的了,梯度弥散问题也不再是一个很大的问题。
5. 总结
从上面介绍可以看出,Andrew NG的教程是06年到12年之间的产物,当时无监督训练是主流,Li feifei的CNN教程和caffe官网的教程是产生于12年之后,这时数据库足够大(上千万级别),模型足够先进(ReLU激活函数,dropout等等),同时计算速度足够快(GPU加速),使得无监督预训练(自编码神经网络)在很多应用场景中失去了存在的价值,有监督训练已足够完成任务。
一句话总结,06年的无监督预训练开启了深度学习的纪元,在之后深度学习快速发展的过程中,大数据的获得、计算机硬件的发展以及深度模型的升级使得有监督训练重新走上舞台,无监督预训练也算是完成了历史使命。
那预训练还有用吗?答案是肯定的,比如我们有一个分类任务,数据库很小,这时还是需要通过预训练来避免深度模型的过拟合问题的,只不过预训练是通过在一个大的数据库上(比如imagenet),通过有监督的训练来完成的。这种有监督预训练加小的数据库上微调的模式称为Transfer learning,在Li feifei的CNN教程和caffe官网的教程中都有详细的介绍。
除此之外,Andrew NG的教程也有其它几点常用于12年之前但现在很少用的细节,比如这个教程中介绍的激活函数是sigmoid,现在很少见了,几乎被ReLU激活函数取代,优化算法用的是L-BFGS,现在的优化算法主流是SGD+momentum。这些教程之间的不同点在当时学习之初是很困惑的,直到明白了深度学习的发展历程,才渐渐了解这些不同的来源。
转:Deep learning系列(十五)有监督和无监督训练的更多相关文章
- m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中
m_Orchestrate learning system---三十五.php数据和js数据的解耦:php数据(php代码)不要放到js代码中 一.总结 一句话总结:也就是以html为中介,用html ...
- m_Orchestrate learning system---二十五、复制类的时候最容易出现的错误是什么
m_Orchestrate learning system---二十五.复制类的时候最容易出现的错误是什么 一.总结 一句话总结:命名空间错误导致Analyze类虽然继承了Base类,但是没有执行里面 ...
- 1(1).有监督 VS 无监督
对比一 : 有标签 vs 无标签 有监督机器学习又被称为“有老师的学习”,所谓的老师就是标签.有监督的过程为先通过已知的训练样本(如已知输入和对应的输出)来训练,从而得到一个最优模型,再将这个模型应用 ...
- 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 聊聊MySQL的加锁规则《死磕MySQL系列 十五》
大家好,我是咔咔 不期速成,日拱一卒 本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升MySQ ...
- 学习笔记CB008:词义消歧、有监督、无监督、语义角色标注、信息检索、TF-IDF、隐含语义索引模型
词义消歧,句子.篇章语义理解基础,必须解决.语言都有大量多种含义词汇.词义消歧,可通过机器学习方法解决.词义消歧有监督机器学习分类算法,判断词义所属分类.词义消歧无监督机器学习聚类算法,把词义聚成多类 ...
- 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。
实验了效果,下面的还是图像的异常检测居多. https://github.com/LeeDoYup/AnoGAN https://github.com/tkwoo/anogan-keras 看了下,本 ...
- 【Qt编程】基于Qt的词典开发系列<十五>html特殊字符及正则表达式
1.html特殊字符的显示 我们知道html语言和C语言一样也有一些特殊字符,它们是不能正常显示的,必须经过转义,在网上可以查到如何显示这些字符,如下图所示: 上图给了最常用的特殊字符的显示,下面我们 ...
- SSE图像算法优化系列十五:YUV/XYZ和RGB空间相互转化的极速实现(此后老板不用再担心算法转到其他空间通道的耗时了)。
在颜色空间系列1: RGB和CIEXYZ颜色空间的转换及相关优化和颜色空间系列3: RGB和YUV颜色空间的转换及优化算法两篇文章中我们给出了两种不同的颜色空间的相互转换之间的快速算法的实现代码,但是 ...
随机推荐
- PHP常用设计模式
1.单例模式指在整个应用中只有一个对象实例的设计模式 class Single { public $rand; static private $instance; // 类直接调用 final pri ...
- 任务调度框架Hangfire 简介
任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的. 在.net环境中,较为有名的任务调度框架是HangFire与Quartz.NE ...
- NXP LPC-Link LPC3154
LPC-Link: LPC-Link调试探针由恩智浦.Code Red和Embedded Artists三方共同开发, 该探针可与目标板断开,利用板载10针JTAG/SWD连接器直接用于客户自己的设计 ...
- SQL Server、Oracle和MySQL中查出值为NULL的替换
参考文献: http://database.51cto.com/art/200803/67397.htm 正文 在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1 ...
- golang 引用相对路径package
My $GOPATH is "/Users/peter/goworkspace" Golang 版本是: go version go1.6 darwin/amd64 在这个work ...
- sqlserver 2012 IDE中 Windows身份验证连接服务器报错 ,Login failed for user 'xxx\Administrator'. 原因: 找不到与提供的名称匹配的登录名。
问题描述: 本地装了两个实例,一个是SQLEXPRESS,可以正常操作.但是另一个开发常用的实例MSSQLSERVER却连Windows身份验证都报错,报的错误也是很奇葩,怎么会找不到Administ ...
- C#打印图片
打印的原理是:生成mdi文件,系统碰到mdi的时候会自动以打印的方式处理.所以,不管用什么模板,什么方式:能在PrintPage事件处理中,生成一张要打印内容的图片就OK了! C#实现打印源码如下: ...
- 8张图理解Java---importnew---programcreek
http://www.importnew.com/11725.html https://www.programcreek.com/2013/09/top-8-diagrams-for-understa ...
- Revit手工创建族
手工创建族 1.画两个参考平面. 图3001 2.点击族类型,添加参数. 图3002,3003 3.添加类型,为类型赋值. 3004 4.创建拉伸截面,完成后,可以三维查看. 3005 5.创建对齐, ...
- Linux内存管理学习2 —— head.S中的段页表的建立
作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Qemu+vexpress-ca9 Linux-4.10.17 正文 继续分析head.S: 此时r2存放的是设备树镜像 ...