深度学习(三十二)半监督阶梯网络学习笔记
半监督阶梯网络学习笔记
原文地址:http://blog.csdn.net/hjimce/article/details/50877704
作者:hjimce
一、相关理论
这几年深度学习声名鹊起,一个又一个AI领域被深度学习攻破,然而现在大部分深度学习所采用的算法都是有监督学习的方法,需要大量的标注数据,需要耗费大量的人力物力。因此如何充分利用大量的无标签数据资源,必将成为未来深度学习领域的研究焦点。
本篇博文主要讲解2015年 NIPS的一篇牛逼paper:《Semi-Supervised Learning with Ladder Networks》,号称2015年深度学习领域"五大佳文"之一。这篇文献采用半监督的方法,充分利用了无标签数据+少量有标签数据,相比于以往的方法精度上有了大幅的提升。因为最后的网络结构像梯子一样,所以我就把它翻译为“阶梯网络”。这篇博文是我综合了《Deconstructing the Ladder Network Architecture》、《From Neural PCA to Deep Unsupervised Learning》、《Lateral Connections in Denoising Autoencoders》、《Semi-Supervised Learning with Ladder Networks》这四篇文献所写的个人笔记总结。
众所周知,机器学习主要划分为:有监督、无监督、半监督学习三类方法。可能有监督学习、无监督学习这两者,我们经常碰到,然而半监督的学习方法却很少接触。半监督学习是有监督学习和无监督学习的结合体,其主要思想是:利用少量的有标签数据和大量的无标签数据相结合,训练出牛逼的结果。下面用一个例子介绍下半监督学习,了解下怎么充分利用无标签数据资源的,进行分类:
如上图所示,我们有两个有标签数据样本,两个样本属于不同类别,我们用黑和白表示。数据量很少,我们仅仅有两个有标签的数据而已,现在如果利用上面这两个样本对下面图片中的未知标签的样本(下图中的灰色,带问号的圆圈),进行分类的话,那么根据已有的机器学习算法,就会把这个未知的样本分类为:白色类别。
然而如果我们除了那两个有标签的样本之外,还有大量的无标签数据(用灰色表示无标签数据):
从上面的数据分布上看,我们这两类数据服从某种数据分布,我们从直观上看,可以用一条曲线把数据划分为两个部分:
这个时候,如果还是要判别上面一开始我们要分类的那个样本,我们就会把它归属于类别:黑色。因此利用无标签数据,可以帮助我们找到数据的潜在分布,提高我们分类的精度。我们人类学习事物的大部分过程都是如此,通过观察少量的东西有标签数据,结合大量无标签数据,用先验知识做出推断。
二、深度学习半监督难点
半监督是一种有监督和无监督相结合的模型。在深度学习领域,无监督学习常见的有自编码、受限玻尔兹曼机等,在以前这些无监督方法一般是用于网络的预训练、参数初始化(像用于DBM、栈式自编码等深度网络的参数初始化)。简而言之,它们所采用的思路都是无监督预训练+有监督微调,也就是所有监督和无监督是分开的,两个阶段的训练相互独立,并不能称之为真正的半监督学习。
一般来说,无监督学习的目标函数都是:
其中X是原始输入、X'是重构数据。无监督学习的目标其实是为了学习原始数据X的另外一种表征H,同时要保证这个新的特征H,尽可能的能够保留原始数据信息;或者说经过H=f(x)映射后,尽可能不要丢失信息。
然而恰恰相反,有监督学习方法要求只有与任务相关的信息保留下来;或者说有监督学习会过滤掉与我们任务无关的相关信息。打个比方:我们的分类任务判断一张人脸图片是单眼皮,还是双眼皮;那么有监督学习经过训练完毕后,就会尽可能的把与这个分类任务无关的信息过滤掉,过滤的越好,那么分类的精度将会更高。比如一个人的嘴巴、鼻子信息这些都是与这个分类任务无关的,那么就要尽量的过滤掉。
因此这就存在着一个冲突问题:无监督学习是要尽可能的保留原始数据的信息,而有监督学习是过滤与任务无关的信息,这个原因以至于一直以来有监督学习和无监督学习不能很好的兼容在一起,半监督学习算法不能很好的work。然而如果我们可以设计一个网络模型,这个网络有两个分支,可以把监督任务相关的信息和无关的信息尽可能的分开,如下图所示,这也正是阶梯网络的设计思想。
三、从深度自编码网络到阶梯网络
因为阶梯网络是深度自编码网络的进化版,所以我这边就先从深度自编码网络讲起,先复习一下深度自编码网络。
(1)深度自编码网络复习
可能在我们以前所接触的自编码网络一般是一个单层的网络结构,即使是栈式自编码也是单层自编码网络堆叠起来的,所以我这边就简单啰嗦一下深度自编码网络结构,多层自编码网络其实也很简单,只不过是自编码网络的隐藏层数增加罢了。单层自编码网络的前向传导公式:
x(t)表示输入数据、h(t)表示隐藏层神经元。我们喜欢把f函数当成是编码映射函数,g函数表示解码映射函数。如果是多层的自编码网络就是:
具体网络结构图如下:
无监督自编码网络存在我们前面所讲的问题:顶层特征hL(t)要尽量的保留原始x(t)所包含的全部信息;如果我们要用hL(t)做有监督训练,那么高层特征hL(t)就应该尽量的只包含与我们的分类任务相关的信息,因此阶梯网络作者就提出了横向连接,这样可以缓解最高层特征需要表达X的全部信息压力。
(2)阶梯网络
A、下面是阶梯网络结构图,与深度自编码网络相比,在编码部分的每一层都有一条横向连接线,连接到解码层。
B、除此之外,阶梯网络在编码层的每一层都引入了噪声(类似于降噪自编码器,不过降噪自编码器只对输入层加入噪声,而阶梯网络是对编码层的每一层都加入了噪声)
C、另外,阶梯网络网络的损失函数是每一层的构建误差损失函数C0、C1……CL(与降噪自编码器不同在于:降噪自编码器只对解码输出层构建损失函数C0)。最后无监督阶梯网络的总损失函数就是C0+C1……+CL。
四、半监督阶梯网络
OK,上面我们仅仅只是讲解了阶梯网络结构图,我们这部分就来详细讲解,具体要怎么实现半监督学习。其实半监督阶梯网络也很简单:
只不过是在编码最高层接入有监督损失函数;Ladder Network采用的是在网络训练过程中,直接把有监督和无监督的损失函数相加起来,作为总损失函数,进行梯度下降整体训练。这个思路和文献:《Stacked What-Where Auto-encoders》非常之相似。。
给定N个有标签的样本数据(x(1),y(1))、(x(2),y(2))……,以及M个无标签的样本数据x(N+1)、x(N+2)、x(N+3)……并且有标签的样本数据个数远小于无标签数据。我们的目标是学习出一个函数用来判别数据的标签P(y|x)。在阶梯网络中,这个函数是一个深度降噪自编码器,噪声加入所有的隐藏层,然后最后的损失函数是有标签样本数据的交叉熵损失函数+无监督各层噪声解码器重构误差欧式损失函数:
X,y,y*分别表示输入数据,无噪声输出、有噪声输出。公式中的超参数λ表示的是每一层解码层损失函数的权重,因为每一层的重要性不同,因此每一层的权重不同。
五、训练细节
1、算法前向传导流程:
(1)首先是有噪声通道编码、解码前向计算;
(2)无噪声通道前向计算;
(3)通过无噪声通道各层数据Z与解码器Z'构建损失函数;这样就可以得到无监督部分损失函数。
(4)有监督部分损失函数计算:直接在噪声通道的编码器顶层接入分类器,构建损失函数。
2、其它细节
需要注意的是:在训练的时候,有监督部分输出采用的是噪声通道y’,构建损失误差的;而在测试使用阶段,采用的是无噪声通道计算y。编码阶段和解码阶段有采用tied-weight、采用参数权值共享,CNN反卷积过程也是一样。在训练的时候,有标签样本随机抽取但是需要保证每批各个类别的样本个数相同,保证类别平衡。
3、横向阶梯连接
这个在文献《Deconstructing the Ladder Network Architecture》第3节分析了横向连接的公式,对半监督结果的影响。
参考文献:
1、http://rinuboney.github.io/2016/01/19/ladder-network.html
2、《Deconstructing the Ladder Network Architecture》
3、《Semi-Supervised Learning with Ladder Networks》
4、《From Neural PCA to Deep Unsupervised Learning》
5、《Lateral Connections in Denoising Autoencoders》
**********************作者:hjimce 时间:2016.3.13 联系QQ:1393852684 原创文章,转载请保留原文地址、作者等信息***************
深度学习(三十二)半监督阶梯网络学习笔记相关推荐
- 32.深度解密三十二:详解影响QQ群整体排名的那些秘密
网络营销推广技术.技巧深度解密(三十二)指南: 1.本文档适合零基础以及互联网营销推广人员,主要讲解营销QQ群排名的一些问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...
- Tensorflow实战学习(三十八)【实现估值网络】
Q-Learning,学习Action对应期望值(Expected Utility).1989年,Watkins提出.收敛性,1992年,Watkins和Dayan共同证明.学习期望价值,从当前一步到 ...
- torch学习 (三十二):周杰伦歌词数据集与长短期记忆 (LSTM)
文章目录 1 引入 2 长短期记忆 2.1 输入门.遗忘门和输出门 2.2 候选记忆细胞 2.3 记忆细胞 2.4 隐藏状态 3 代码 致谢 1 引入 本文介绍一种常用的门控循环神经网络:长短期记 ...
- Java多线程学习三十二:Callable 和 Runnable 的不同?
为什么需要 Callable?Runnable 的缺陷 先来看一下,为什么需要 Callable?要想回答这个问题,我们先来看看现有的 Runnable 有哪些缺陷? 不能返回一个返回值 第一个缺陷, ...
- ballerina 学习 三十二 编写安全的程序
ballerina编译器已经集成了部分安全检测,在编译时可以帮助我们生成错误提示,同时ballerina 标准库 已经对于常见漏洞高发的地方做了很好的处理,当我们编写了有安全隐患的代码,编译器就已经提 ...
- 前端学习(三十)es6的一些问题(笔记)
赋值表达式 document.onclick = document.onmouseover = fn; var a = b = c = d = 5; 不推荐 逗 ...
- 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...
- 深度学习入门(三十二)卷积神经网络——BN批量归一化
深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...
- 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!
推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...
最新文章
- Nginx+Tomcat负载均衡、动静分离集群
- 或许每条喵咪上辈子都是陨落的码农
- 春节您“抢票”到手了吗,如果没,请进来看看!
- RPC远程过程调用之Hessian 基于HTTP
- python中读写excel_python读写Excel
- Gartner:云安全的未来,是安全访问服务边缘架构
- 实用常识 | 文件都在C盘,一点儿都不圆润,盘它!
- 【赠书】当深度学习遇上图: 图神经网络的兴起!
- 【三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含Matlab源码 043期】
- VLAN(虚拟局域网)
- OpenWrt固件编译、软件包Ipk的编译详解
- 《吴恩达深度学习》学习笔记011_深度卷积网络:实例探究(Deep convolutional models: case studies)
- 10.16 Loi队内胡策 贪心+毒瘤输入+DP+数论
- php tsrmg,php内核分析(二)-ZTS和zend_try
- 七大软件设计原则之一 | 开闭原则
- 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...
- 彭亮—Python学习
- java手机游戏开发人才短缺
- UC伯克利教授马毅投稿ICML,4个评审一致接收却遭AC一票否决
- 美团点评高级1234面:算法+HashMap+Zookeeper+线程+Redis+kafka
热门文章
- php如何接入微信支付接口,PHP实现微信支付(jsapi支付)流程的方法
- 微信 php收藏功能实现,关于微信小程序收藏功能的实现
- oracle 创建更新定时任务,oracle 创建定时任务
- button点击后变色_炒丝瓜怎么不变色?鹏厨教你制作小窍门,健康美味、颜色碧绿...
- mysql注解实体类_jpa实体类生成mysql表及字段注解
- 电脑仙人掌机器人作文_满分作文精选细评:致敬奋斗的时光
- 20155235 《网络攻防》 实验四 恶意代码分析
- 微信 小程序布局 scroll-view
- oracel动态sql实例
- 视频超分,Transformer再下一城之VSR-Transformer