半监督学习简介

article/2025/3/15 21:09:09

“我们预计从长远来看,无监督学习将变得更加重要。人类和动物的学习在很大程度上是不受监督的:我们通过观察来发现世界的结构,而不是通过被告知每个物体的名称。”——LeCun, Bengio, Hinton, Nature (2015)。


Semi-Supervised Learning

半监督学习(Semi-supervised learning)使用未标记的数据来获得对总体结构的更多理解。以 Kaggle 上的农场挑战赛为例,来说明半监督学习的重要性。数据集中,测试集有80000张图像,但训练集中只有20000张图像。换句话说,我们只从一个小的训练集中学习特征,因为它是有标签的,我们没有利用包含大量有价值信息的测试集,因为它的图像是没有标签的。因此,我们应该找到一种方法来从大量的未标记数据中学习。现实世界的数据往往就是这样。由于人工标注很昂贵,尤其是在大多数数据集存在的规模上,大型数据集,尤其是企业级数据,可能只有几个标签。
在这里插入图片描述
通常,半监督学习算法在以下框架上运行:

  • 一个半监督的机器学习算法使用一组有限的标记样本数据来训练自己,产生一个“部分训练”的模型。
  • 部分训练的模型标记未标记的数据。因为样本标记的数据集有许多严重的限制,例如,现实世界数据中的选择偏差,所以标记的结果被认为是“伪标记(pseudo-labelled)”数据。
  • 标记数据集和伪标记数据集相结合,创建了一个独特的算法,结合了监督和无监督学习的描述性和预测性。

半监督学习使用分类过程来识别数据,并使用聚类过程将其分组为不同的部分。

下图,白点和黑点是标注数据,灰点是未标注的。从图片中可以看出,未标记的点以某种方式能够给我们一些有价值的信息,这将帮助我们更多地了解数据的结构。
在这里插入图片描述

Pseudo Labeling

伪标签(Pseudo Labeling)是一种简单有效的半监督学习方法。它可以结合几乎所有的神经网络模型和训练方法(伪标签)。如果想从未标记的数据中学习,这里有一个示例:

  • 采用与训练集相同的模型,它会带来良好的效果。
  • 现在将它与未标记的测试集一起使用,以预测输出或伪标签。我们不知道这些预测是否正确,但现在有了相当准确的标签,这就是在这一步的目标。
  • 将训练标签与测试集伪标签连接(Concatenate)起来。
  • 将训练集的特征与测试集的特征连接起来。
  • 最后,用与之前训练集相同的方式训练模型。

这种方法将使误差减小,并通过更好地学习常规结构来改进模型。

怎么知道每批中真标签和假标签的比例呢?一般的经验法则是让 1 / 4 − 1 / 3 1/4-1/3 1/41/3 的批次为伪标签。

Algorithm: Semi-Supervised GAN

半监督网络(Semi-Supervised GAN,SGAN)是生成对抗网络( Generative Adversarial Network ,GAN)的变体,用于解决半监督学习问题。

在传统的GAN中,训练鉴别器(discriminator)从数据集预测图像是真实的还是由生成器模型(generator model)生成的假的,从而允许它从图像中学习鉴别特征,即使没有标签。虽然大多数人通常使用GANs中的生成器来生成真实生成的图像,GANs中的生成器已经过训练,可以生成与数据集相似的图像,但也可以通过迁移学习作为起点来使用鉴别器,在同一数据集上开发分类器,从而使受监督的任务受益于无监督的训练。由于已经学习了大多数图像特征,所以执行分类的训练时间和精度将会好得多。

然而,在SGAN中,鉴别器同时以无监督和有监督两种模式训练:

  • 在无监督的情况下,鉴别器需要区分真实图像和生成的图像,就像在传统的GAN中一样。
  • 在有监督的情况下,鉴别器需要将图像分类到预测问题中的几个类别中,就像标准的神经网络分类器一样。

为了同时训练这两种模式,鉴别器必须输出 1 + n 1 + n 1+n 个节点的值,其中 1 1 1 代表“真或假”节点, n n n 是预测任务中的类数。

在半监督GAN中,更新鉴别器模型来预测 K + 1 K+1 K+1 个类,其中 K K K 是预测问题中的类数,并为新的“伪”类添加额外的类标签。它包括同时为无监督的GAN任务和有监督的分类任务直接训练鉴别器模型。整个数据集可以通过SGAN传递——当训练示例有标签时,鉴别器的权重被调整,否则,分类任务被忽略,鉴别器调整其权重以更好地区分真实图像和生成的图像。
在这里插入图片描述
SGAN 允许无监督训练允许模型从非常大的未标记数据集学习提取特征,有监督学习允许模型利用提取的特征并将其用于分类任务。其结果是一个分类器,它可以在标准问题上取得令人难以置信的结果,比如MNIST问题,即使是在非常非常少的标记样本(几十到几百个)上进行训练。

SGAN巧妙地将无监督和有监督学习的各个方面结合起来,相互加强,使之能够一起工作,用最少的标签产生令人难以置信的结果。

Use Cases and the Future of Machine Learning

在一个可用数据量不断呈指数级增长的时代,无标记的数据不能等待被标注,无数现实生活的数据场景都是这样出现的——例如,YouTube视频或网站内容。从引擎和内容聚合系统到图像和语音识别,半监督学习无处不在。

半监督学习将监督学习和无监督学习的“过拟合”和“欠拟合”趋势相结合的能力分别创建了一个模型,在给定最少量的标记数据和大量未标记数据的情况下,该模型可以出色地执行分类任务,同时进行归纳。除了分类任务之外,半监督算法还有许多其他用途,如增强聚类和异常检测。尽管该领域本身相对较新,但随着算法在当今的数字环境中找到巨大的需求,它们正在不断地被创造和完善。


参考:
Simple explanation of Semi-Supervised Learning and Pseudo Labeling
Supervised Learning, But A Lot Better: Semi-Supervised Learning


http://chatgpt.dhexx.cn/article/bpuELepn.shtml

相关文章

半监督学习

1. 介绍 1.1 什么是半监督学习 所给的数据有的是有标签的,而有的是没有标签的。常见的两种半监督的学习方式是直推学习(Transductive learning)和归纳学习(Inductive learning)。   直推学习(Transduct…

半监督学习(SEMI-Supervised Learning)

半监督学习的工作原理 想象一下,收集了大量未标记的数据,您想在这些数据上训练模型。手动标记所有这些信息可能会花费你一大笔钱,除了需要几个月的时间来完成注释。这时候半监督机器学习方法就派上用场了。工作原理很简单。无需将标签添加到…

半监督学习概述

1、半监督学习 今天在阅读一篇论文时了解了这个之前一直不太清晰的概念。下面是查阅了相关资料后对半监督学习的理解。如有错误,望更正。 半监督学习是一种介于监督学习和无监督学习之间的学习凡是,我们都知道,在监督学习中,样本…

JS中使数组倒序排列

使用reverse方法 注意:reverse方法会使得原数组发生变化

JS实现数组和数组对象倒序(reverse方法)

const arr1 [{a:1},{b:2},{c:3},{d:4}]; const arr2 [1,2,3,4,5,6,7]; console.log(倒序前,arr1,arr2); arr1.reverse(); arr2.reverse(); console.log(倒序后,arr1,arr2);

js实现数组翻转(倒序输出)

//倒序排列var arr[2,30,1,9,5,7];var brrarr.reverse();for(var i0;i<brr.length;i){document.write(brr[i]);}console.log(brr);//控制台也能看到数组的输出

js实现数组元素的倒序

模拟循环录入采集名单存储到数组中并编码实现数组元素的倒序查看名单 :例如数组原名单: A B C D E ,倒序后展示为: E D C B A 运行后的结果如下图所示&#xff1a;

JS数组对象的正序、倒序和根据中文首字母排序

//数组对象方法排序:升序 sortByKey(array,key){return array.sort(function(a,b){var xa[key];var yb[key];return ((x<y)?-1:((x>y)?1:0));}); },//数组对象方法排序:降序 sortDownByKey(array,key){return array.sort(function(a,b){var xa[key];var yb[key];return…

js中数组反向、排序reverse、sort

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; js系列教程1-数组操作全解 js中数组反向、排序 数组反向使用reverse函数&#xff0c;数组排序使用sort函数&#xff0c;排序函数可以传入比较函数&#xff0c;也可以修改数组圆形&#xff0c;自定义添加排序…

数组倒序排序

Array.reverse()&#xff0c;数组元素的排序排列 今天做项目的时候遇到了一个需求&#xff0c;把下单字段的时间倒序排列&#xff0c;也就是最新的时间显示在前面&#xff0c;像这样 因为这个字段是一个数组元素&#xff0c;所以就想到了让数组元素倒序排列&#xff0c;然后就…

js数组排序,数组按照某个字段正序倒序排序方法,sort()

话不多说直接看案例哈 比如后端返回了一个数组集合&#xff0c;需要吧默认选项放在第一条 let arr [{isDefault: 0},{isDefault: 0},{isDefault: 1},{isDefault: 0}]arr.sort((a,b)> a.isDefault-b.isDefault)console.log(arr,正序)输出结果&#xff1a;正序&#xff0c;从…

js-实现数组翻转(倒序)

源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>翻转数组</title></head><body><script>var arr[1,2,3,4,5,6,7,8];var newArr [];console.log(arr);for(var iarr.length-1;…

js 数组倒序排列

1.使用reverse()函数&#xff1a; var array[我,喜,欢,你];array.reverse(); // 输出&#xff1a; ["你", "欢", "喜", "我"]2.循环遍历一一使其倒序&#xff1a; var array[我,喜,欢,你];var temp;for(let i0; i<array.length/2;…

重磅!超详细的 JS 数组方法整理出来了

作者&#xff1a;Yushia https://juejin.cn/post/6907109642917117965 数组是 js 中最常用到的数据集合&#xff0c;其内置的方法有很多&#xff0c;熟练掌握这些方法&#xff0c;可以有效的提高我们的工作效率&#xff0c;同时对我们的代码质量也是有很大影响。 一、创建数组 …

VS Code字体总是安装不上,vscode字体安装

VS Code字体安装&#xff0c;顽固版本 tmd&#xff0c;Vs Code老是把l看成i或者是1急死了首先要下载字体&#xff0c;下载好安装对应的字体&#xff0c;windows字体文件一般是ttf&#xff0c;安装好之后 这里有免费的供开发编程使用的字体 —》链接 下载好之后&#xff0c;解压…

VsCode字体颜色修改和背景图片修改 字体高亮

1.打开VS Code编辑器&#xff0c;在编辑器中设置。根据以下步骤&#xff0c;打开settin.json文件。 2.在json文件中若有代码覆盖即可没有代码直接添加下面代码。看注释可以自定义设置喜欢的颜色。 {//设置用户选中代码段的颜色"workbench.colorCustomizations": {/…

VScode字体超大怎么改回来?

VScode字体超大怎么改回来&#xff1f; 改背景图时不小心把字体设置的超大了&#xff0c;而且还是失去焦点自动保存了&#xff0c;难受… 网上一搜&#xff0c;真不好搜&#xff0c;答案有两种 借图一用&#xff08;本人比这个还严重&#xff0c;鼠标已经滚动不了了&#xff…

ubuntu系统下vscode字体显示异常(别扭)

修改办法 文件 》 首选项 》 设置 查找框中输入 Font 显示如下&#xff1a; 修改Font Family&#xff1a; 将&#xff1a;‘Droid Sans Mono’, ‘monospace’, Droid Sans Fallback’改为&#xff1a; monospace 如果windows和ubuntu是同一个账号&#xff0c;必须取消同步&…

vscode程序员推荐字体

今天推荐一款vscode字体:Anonymous-Pro 绝对的轻量 点击前往下载 GITHUB LIGHT Anonymous-Pro GITHUB LIGHT Anonymous-Pro GITHUB DARK Anonymous-Pro GITHUB DARK Anonymous-Pro 设置步骤: 1.打开vscode 2.依次到文件->首选项->设置 3.修改字体为 Anonymous P…