ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

半监督学习总结

2021-07-18 20:57:33  阅读:174  来源: 互联网

标签:总结 训练 标签 网络 学习 监督 算法 数据


半监督学习 Semi-supervised Learning

简介

什么是半监督学习(Semi-supervised Learning)?
在有标签数据+无标签数据混合成的训练数据中使用的机器学习算法。

默认的要求:

  • 无标签数据比有标签数据多得多
  • 无标签数据一般是有标签数据中的某一个类别,意思是不要不属于的,也不要属于多个类别的
  • 无标签数据一般是类别平衡的,也就是说每一类的样本数差不多
  • 无标签数据的分布应该和有标签数据的分布相同或类似

其实,半监督学习的方法大都建立在对数据的某种假设上,只有满足这些假设,半监督算法才能有性能的保证,这也是限制了半监督学习应用的一大障碍。

半监督学习算法分类:
简单自训练(simple self-training): 用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(pseudo label)或软标签(soft label),挑选你认为分类正确的无标签样本(此处应该有一个挑选准则),把选出来的无标签样本用来训练分类器。

协同训练(co-training): 其实也是 self-training 的一种,但其思想是好的。假设每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样。

半监督字典学习: 其实也是 self-training 的一种,先是用有标签数据作为字典,对无标签数据进行分类,挑选出你认为分类正确的无标签样本,加入字典中(此时的字典就变成了半监督字典了)

标签传播算法(Label Propagation Algorithm): 是一种基于图的半监督算法,通过构造图结构(数据点为顶点,点之间的相似性为边)来寻找训练数据中有标签数据和无标签数据的关系。是的,只是训练数据中,这是一种直推式的半监督算法,即只对训练集中的无标签数据进行分类,这其实感觉很像一个有监督分类算法…,但其实并不是,因为其标签传播的过程,会流经无标签数据,即有些无标签数据的标签的信息,是从另一些无标签数据中流过来的,这就用到了无标签数据之间的联系

半监督支持向量机: 监督支持向量机是利用了结构风险最小化来分类的,半监督支持向量机还用上了无标签数据的空间分布信息,即决策超平面应该与无标签数据的分布一致(应该经过无标签数据密度低的地方)(这其实是一种假设,不满足的话这种无标签数据的空间分布信息会误导决策超平面,导致性能比只用有标签数据时还差)

半监督深度学习

半监督深度学习算法可分为以下三类:

  • 无标签数据预训练网络后有标签数据微调(fine-tune)
  • 有标签数据训练网络,利用从网络中得到的深度特征来做半监督算法
  • 网络 work in semi-supervised fashion

无标签数据预训练,有标签数据微调

对于神经网络来说,一个好的初始化可以使得结果更稳定,迭代次数更少。因此如何利用无标签数据让网络有一个好的初始化就成为一个研究点了。

目前我见过的初始化方式有两种:无监督预训练伪有监督预训练

无监督预训练:如果你有很多未标记的训练数据,你可以尝试逐层训练层,从最低层开始,然后上升,使用无监督的特征检测算法,如限制玻尔兹曼机(Restricted Bolzmann Machine, RBM)或自动编码器(Autoencoder, AE)(自动编码器是神经网络的一种,其基本思想就是直接使用一层或者多层的神经网络对输入数据进行映射,得到输出向量,作为从输入数据提取出的特征)。 每个层都被训练成先前训练过的层的输出(除了被训练的层之外的所有层都被冻结)。 一旦所有层都以这种方式进行了训练,就可以使用监督式学习(即反向传播)对网络进行微调
在这里插入图片描述
Reference:
受限制玻尔兹曼机(RBM)以及自编码器(Autoencoder)
受限玻尔兹曼机(RBM)原理总结
受限制玻尔兹曼机(RBM)的能量函数及其梯度求解

伪有监督预训练:通过某种方式/算法(如半监督算法,聚类算法等),给无标签数据附上伪标签信息,先用这些伪标签信息来预训练网络,然后在用有标签数据来微调。

利用从网络得到的深度特征来做半监督算法

先用有标签数据训练网络(此时网络一般过拟合),从该网络中提取所有数据的特征,以这些特征来用某种分类算法对无标签数据进行分类,挑选你认为分类正确的无标签数据加入到训练集,再训练网络;如此循环。
由于网络得到新的数据(挑选出来分类后的无标签数据)会更新提升,使得后续提出来的特征更好,后面对无标签数据分类就更精确,挑选后加入到训练集中又继续提升网络。
这个想法往往不能很好地 work ,可能的原因是噪声,你挑选加入到训练无标签数据一般都带有标签噪声(就是某些无标签数据被分类错误),这种噪声会误导网络且被网络学习记忆。

Make Network work in semi-supervised fashion

前面的两种类别虽然是都用了有标签数据和无标签数据,但就神经网络本身而言,其实还是运行在一种有监督的方式上。
下面的方法让深度学习真正地成为一种半监督算法:

Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks

这是一篇发表在 ICML 2013 的文章,是一个相当简单的让网络 work in semi-supervised fashion 的方法。就是把网络对无标签数据的预测,作为无标签数据的标签(即 Pseudo label),用来对网络进行训练,其思想就是一种简单自训练。但方法虽然简单,但是效果很好,比单纯用有标签数据有不少的提升。
网络使用的代价函数如下:
在这里插入图片描述
代价函数的前面是有标签数据的代价,后面的无标签数据的代价,在无标签数据的代价中, y ′ y' y′无标签数据的 pseudo label,是直接取网络对无标签数据的预测的最大值为标签。
虽然思想简单,但是还是有些东西需要注意的,就是这个 α ( t ) \alpha(t) α(t),其决定着无标签数据的代价在网络更新的作用,选择合适的 α ( t ) \alpha(t) α(t) 很重要,太大性能退化,太小提升有限。在网络初始时,网络的预测时不太准确的,因此生成的 pseudo label 的准确性也不高。在初始训练时, α ( t ) \alpha(t) α(t)要设为 0,然后再慢慢增加,论文中给出其增长函数。在后面的介绍中,有两篇论文都使用了一种高斯型的爬升函数。
感觉这种无标签数据代价达到一种正则化的效果,其减少了网络在有限有标签数据下的过拟合,使得网络泛化地更好。

Semi-Supervised Learning with Ladder Networks

2015年诞生半监督 ladderNet,ladderNet是其他文章中先提出来的想法,但这篇文章使它 work in semi-supervised fashion,而且效果非常好,达到了当时的 state-of-the-art 性能。
ladderNet 是有监督算法和无监督算法的有机结合。前面提到,很多半监督深度学习算法是用无监督预训练这种方式对无标签数据进行利用的,但事实上,这种把无监督学习强加在有监督学习上的方式有缺点:两种学习的目的不一致,其实并不能很好兼容。
无监督预训练一般是用重构样本进行训练,其编码(学习特征)的目的是尽可能地保留样本的信息;而有监督学习是用于分类,希望只保留其本质特征,去除不必要的特征。
ladderNet 通过 skip connection 解决这个问题,通过在每层的编码器和解码器之间添加跳跃连接(skip connection),减轻模型较高层表示细节的压力,使得无监督学习和有监督学习能结合在一起,并在最高层添加分类器,ladderNet 就变身成一个半监督模型。
ladderNet 有机地结合了无监督学习和有监督学习,解决兼容性问题,发展出一个端对端的半监督深度模型。

Temporal Ensembling for Semi-supervised Learning

Temporal Ensembling 是 Pseudo label 的发展,ICLR2017的一篇文章,是半监督学习领域的一篇经典文章,目的是构造更好的 pseudo label。
多个独立训练的网络的集成可取得更好的预测,论文扩展了这个观点,提出自集成(self-ensembling),通过同一个模型在不同的迭代期,不同的数据增强和正则化的条件下进行集成,来构造更好的 target。
论文提出了两种不同的实现: π \pi π ModelTemporal Ensembling

π \pi π Model

构造的损失函数,可以不借鉴标签值。因此学者提出了一个一致性约束假设

对于无标签数据,模型或数据加一定扰动,预测结果一致。

而这个约束就可以抽象为一个loss函数 m i n ( f ( x ) − f ∗ ( x ∗ ) ) min(f(x)-f^*(x^*)) min(f(x)−f∗(x∗))
注:*代表数据或者模型经过扰动
更详细的流程可以参看下图
在这里插入图片描述
但 π \pi π Model也会带来一个缺点,就是一个batch里面每张图片会前向处理两次,而这会导致训练耗时的上升。文章中提到的另外一个创新点:Temporaral Ensembling带来的一个好处可以弥补这种缺陷。

Temporaral Ensembling

如上所述, π \pi π Model的引入事实上是一种非常直观的一致性假设的具体实现。在介绍Temporal Ensembling是怎么做之前,试着也尽量以一种更加容易接受的思想来引入该操作。
  再回到半监督学习一开始无标签的困境上来看,我们在无标签的情形下,除了可以通过一致性假设来构造损失函数,我们还可以从原来的预测值-GroundTruth标签值的传统思路出发,但我们这里是给无标签的数据一个伪标签。再来看这个公式: m i n ( f ( x ) − f ∗ ( x ∗ ) ) min(f(x)-f^*(x^*)) min(f(x)−f∗(x∗))
我们可以把 π \pi π Model中一个batch里面两次预测中的一个作为另外一个的伪标签,这个伪标签可能害怕它不准,但抛开性能好坏,这也算作是一种打伪标签的方式,先接受这一点。而Temporal Ensembling则是给我们一种能够更好的一种打伪标签的方式。这个就用到了 Ensembling Learning(集成学习) 的思想。本文称之为self-ensembling,之所以self,是因为不同的模型来自于自己,只不过是不同epoch的模型,具体的是通过滑动平均,来将当前的伪标签值与之前的epoch的标签预测值都做一个投票,只不过,越靠近当前的epoch,其权重会越大。
在这里插入图片描述
结合了以往所有epoch得到的伪标签值显然是一个更好的打标签方式。而且它带来的一个好处是每一个batch不用同一张图片预测两次,但是为了记录当前epoch下,每一张测试图片对应的伪标签值,需要一个N大小的空间来存储(N对应于训练数据的大小)。因此再计算复杂度和空间复杂度上算是典型的空间换时间吧。
更详细的流程可以参看下图
在这里插入图片描述

Mean Teacher

标签:总结,训练,标签,网络,学习,监督,算法,数据
来源: https://blog.csdn.net/weixin_45429089/article/details/118873819

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有