自训练Self-Training学习总结

news2024/11/27 10:42:25

一、自训练(Self-training)

Self-training是最简单的半监督方法之一,其主要思想是找到一种方法,用未标记的数据集来扩充已标记的数据集。算法流程如下:

  1. 首先,利用已标记的数据来训练一个好的模型(教师模型)
  2. 用学习到的模型预测未标记数据。
  3. 将生成的伪标签与原始的标记数据相结合,并在合并后数据上进行训练生成模型(学生模型)。
  4. 学生网络训练完成后变为教师模型再次训练下一个学生网络。
  5. 整个过程可以重复n次,直到达到收敛。

即首先用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(pseudo label)或软标签(soft label),挑选一定标准的伪标签样本用来迭代训练分类器。
在这里插入图片描述

使用场景:在现实生活中得到大量有标签数据需要大量时间经历,而自训练是有标签数据+无标签数据混合成的训练数据中使用的深度学习算法,可以利用自训练方法对无标记数据进行标记,实现己标记数据的扩充。

自训练可扩展性、通用性和灵活性,在每种条件设置下均能很好地发挥作用,无论是少数据状态、多数据状态、弱数据增强还是强数据增强。自训练不依赖于模型架构也不依赖于数据集

二、自训练主要问题

(1)自训练方法受标记样本分布和数量的限制。

①当初始标记样本不能代表整个数据分布时,用初始标记样本训练的分类器泛化性较低。这是因为构造的决策边界会偏离真实的决策边界,进而无法有效地归类数据。
② 当初始有标记样本数量不足时,很难构造有效的分类器。因为构造分类器通常需要足够的标记样本,否则会造成误标记。
③当初始有标记样本不足,且不能够代表整个数据集的分布时,就很难有效地发现高置信度无标记 样本。如果高置信度无标记样本被错误发现,就会造成误标记。
论文解决方法:
1.教师模型训练时尽量是数据量较大并进行数据过滤和数据平衡。具体地说,数据过滤用来过滤教师模型中置信度不高的数据,还需要平衡每个类的未标记图像的数量。这样使教师模型拟合能力更强,使错误标记的样本影响减小。
2.教师模型训练进行一致性正则化,使输出的模型不那么过拟合,从而减轻使用软伪标签学习的伪标签不正确或模糊所带来的误导效果。“Confidence Regularized Self-Training”

(2)很难有效地发现高置信度无标记样本。

在自训练过程中,高置信度的无标记样本更容易被预测正确。但如果错误地发现高置信度样本则会导致误标记,这些被错误发现的高置信度样本很难被正确预测。自训练方法中错误标记的样本被视为噪声样本,这会严重扭曲数据的分布。因此,自训练方法中错误标记的样本会降低学习模型的泛化能力。因此,在自训练算法中,如何有效地发现高置度无标记样本是一个关键问题。通常的策略是把基分类器的概率输出作为寻找高置信度样本的方法。然而对于一些经典分类器,比如最近邻、支持向量机等,它们没有概率值输出。

1.挑选伪标签样本的标准,利用不确定性增强伪标签的可信度,减少 noisy 带来的影响。

伪标签对于选出的每个伪标签的数据,我们可以将其传入 N 次,我们会得到不同的 N 个预测结果,将预测结果求平均就得到了预测标签。选取带伪标签数据的方式为Bayesian Active Learning by Disagreement(BALD)“Uncertainty-aware Self-training for Text Classification with Few Labels”

2.使用不同的方法给学生模型增加噪音。

生成伪标签时,教师并没有被噪声干扰。当同一个模型同时作为教师和学生使用时的情况,由于伪标签是使用相同的教师模型生成的,因此一个合理的假设是,在这种情况下,学生模型在未标记数据上的交叉熵损失将为零,那么,学生模型最终将不再学习新东西。而对学生加noisy,可以确保student model的任务更难完成,而不仅仅是学习teacher model的知识,这也是Noisy能够带来提升的一个原因。“Self-Training With Noisy Student Improves ImageNet Classification”

3.将自训练与其他算法结合:

  1. 协同训练和自训练相结合,若每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样。
  2. 结合主动学习和置信度投票策略的集成自训练方法。一方面,该方法用置信度投票的策略选取可靠的机器标注样本,减少了自训练方法误标记样本;另一方面,该方法用 QBC 主动学习策略人工标记异构分类器分类差异大的无标记样本,提高了置信度低样本利用率,也同时提高了分类器的性能。实验证明,该方法得到较好的分类结果。
  3. 基于近邻密度和半监督 KNN 的集成自训练方法。该方法用“近邻密 度”策略选取初始化分类器有标记样本,使初始化分类器的少量的有标记样本所含信息量尽可能大。然后用半监督 KNN 作为数据剪辑技术的基分类器来过滤掉自训练方法误标记的无标记样本。实验证明,该方法相比对比算法,有较好的分类结果。
  4. 半监督聚类和数据剪辑的自训练方法。该方法用半监督聚类辅助自训练方法选取信息量大的无标记样本,同时利用半监督数据剪辑技术,过来掉自训练方法误标记的无标记样本。实验结果表明,相比对比算法,该方法有较好的性能

(3)虽然目前已有较多半监督自训练算法,但这些算法所使用的基分类器都有自身的弱点。

现有对半监督自训练算法的理论分析虽然揭示了自训练方法的一些内在机理,但是很多分析都建立在一些较强的假设条件上。发现高置信度无标记样本的方法都严重依赖于参数,导致算法表现不稳定且应用困难。如何在更一般、更接近真实情况条件下如何进行自训练学习是一个问题。论文解决方法:

(4)自训练一般需要有标注样本与无标签样本的性质差异不能太大。

(5)自训练需要迭代多次,且几乎所有的发现高置信度无标记样本的方法都需要排序置信度值,排序过程增加了计算时间,所以计算时间会较长。

标准自训练在分布偏移条件下的技术挑战及根因。我们发现在无分布偏移条件下,伪标签分布和真标签分布几乎相同,然而在有分布偏移条件下,两者差异很大。即使采用置信度、信息熵等不确定性阈值来筛选,筛选机制的可靠性仍将因为分布偏移而显著下降,最终使得标准自训练在领域自适应问题中失效。之前的工作采用可信度阈值(Confidence Threshold)来筛选可靠的伪标签或者给可靠的伪标签更大的权重,然而这类方法不但需要对不同的任务大量调节阈值,而且仍然无法保证分布偏移条件下伪标签的可靠性。我们的分析表明,有效的自训练方法必须显式建模分布偏移条件下的泛化性。本文提出的循环自训练(Cycle Self-Training, CST),从理论上克服了标准自训练在分布偏移条件下的局限性(见图1)。与以前使用筛选伪标签的方法不同,CST能够学习跨领域泛化的伪标签。具体而言,CST在如下两个步骤中循环:
5. Inner Loop: 使用目标领域伪标签训练目标分类器;
6. Outer Loop: 更新共享表征使目标分类器在源领域中表现良好。
该度量在不手动设定或调整可信度阈值的情况下即可自适应地最小化伪标签不确定性。大量实验表明,循环自训练算法(CST)具有简单通用有效三大优点,在计算机视觉、自然语言处理的典型任务中表现优异,多个任务达到SOTA效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ch04-损失优化

ch04-损失优化0.引言1.权值初始化1.1. 梯度消失与爆炸1.2. Xavier 初始化1.3. Kaiming 初始化1.4. 常用的权值始化方法1.5. nn.init.calculate_gain1.6. 总结2.损失函数 (一)2.1. 损失函数的概念2.2. 交叉熵损失函数 nn.CrossEntropyLoss2.3. NLL/BCE/BCEWithLogits Loss2.4. 总…

什么原因导致了儿童自闭症?跟父母养育有关吗?

导致儿童自闭症的原因是什么?这和父母的抚养有关吗?学习教育孩子的方法,让孩子快乐健康地成长,是家庭和孩子生活中的一件重要事情。不良的环境和错误的教育会导致儿童自闭症,这是真的吗?自闭症,…

1、vscode搭建C++开发环境及一些配置文件的含义

文章目录一、vscode搭建开发环境1、下载和配置MinGW-w64 编译器套件2、安装到电脑中3、配置环境变量4、测试是否安装成功5、vscode上安装C/C插件二 、配置编译环境时各个文件的含义1、task.json:此文件告诉VS代码如何构建(编译)程序&#xff…

如何利用 IP 归属地查询 API 精准锁定用户位置

引言 在互联网时代,IP 地址扮演着非常重要的角色,它可以帮助我们追踪网站访问者、优化网络服务等等。而 IP 归属地则更进一步,它可以帮助我们精确地定位 IP 地址所在的地理位置,为数据分析、网络安全、市场调研等领域提供了极大的…

「业务架构」需求工程——需求验证(第4部分)

确保规定要求满足客户需求的过程。需求验证它是一个确保特定需求满足客户需求的过程。它关心的是找到需求中的问题。当这些问题在后期发现时,或者在系统投入使用后,这些问题会导致大量的返工成本。通过系统变更来修复需求问题的成本通常比修复设计或代码…

如何选择 O2OA (翱途) 开发平台的部署架构?

O2OA (翱途) 开发平台 [下称 O2OA 开发平台或者 O2OA] 支持公有云,私有云和混合云部署,也支持复杂的网络结构下的分布式部署。本篇主要介绍 O2OA (翱途) 开发平台支持的部署环境以及常用的集群部署架构。 软硬件环境说明 支持的云化平台: …

微信小程序-组件化

微信小程序-组件化 自定义组件 业务描述:代码中有多处需要引用同一段代码,需要把他封装成一个组件 流程 在根目录创建components用于存放通用组件在创建组件文件夹选择新建components 会自动生成4个文件json文件 会出现"component": true,…

Talk预告 | 浙江大学乔硕斐:语言模型提示推理综述

本期为TechBeat人工智能社区第480期线上Talk! 北京时间3月9日(周四)20:00,浙江大学计算机科学与技术硕士——乔硕斐的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “语言模型提示推理综述 ”,届时将分享对语言…

知识点学习登记备份信息

知识点记录 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ovilnIi-1681441105895)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211228090433836.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…

计算机网络 实验三

⭐计网实验专栏,欢迎订阅与关注! ★观前提示:本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 理解路由器转发分组的机制。 理解路由表的作用、基本结构。 掌握静态路…

Redis常见命令

Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:1. Redis通用命令 通用指令是部分数据类型的,都可以使用的指令,常见的有: - KEYS:查看符合模板的所有key- KEYS…

cm-14.1 Android系统启动过程分析(2)- init进程的启动之前的那些事(偏嵌入式方向)

声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的。本文参考了一些书籍的若干章节本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译…

Golang每日一练(leetDay0038) 二叉树专题(7)

目录 112. 路径总和 Path Sum 🌟 113. 路径总和 II Path Sum II 🌟🌟 114. 二叉树展开为链表 Flatten Binary Tree to Linked-list 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 …

Nacos作为注册中心和配置中心

Cloud依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><sco…

圣戈班Saint-Gobain EDI需求分析

圣戈班Saint-Gobain&#xff08;以下简称&#xff1a;圣戈班&#xff09;是一家总部位于法国的跨国公司&#xff0c;成立于1665年。它是全球领先的建筑和高性能材料解决方案提供商之一&#xff0c;产品包括玻璃、陶瓷、管道、密封材料等&#xff0c;在欧洲、北美、亚洲和南美等…

【软件测试】可以写进简历的项目巨真实

昨天逛帖子&#xff0c;看到有自学软件测试的同学苦恼于看书学习之后&#xff0c;学过的知识转瞬即忘&#xff0c;并且没有上手的测试项目&#xff0c;不管是知识巩固还是面试求职&#xff0c;都比较艰难。 其实&#xff0c;初次接触技术工作&#xff0c;遇到这样的困难是正常…

【数据结构】二叉树链式结构

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;初阶数据结构 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对…

【Linux】CentOS7.6 升级 gcc/g++

CentOS 7.6 升级 gcc/g的方法&#xff0c;不一定适用于其他linux系统 1.查看版本 g -v gcc -v当前查看版本&#xff0c;发现是4.8.5&#xff0c;这已经是2015年的旧版本了&#xff0c;对c11的支持不是很完善&#xff0c;为了方便学习和编写新版本的代码&#xff0c;升级一下还…

使用python采集分享119个PHP江湖论坛源码,总有一款适合您

分享119个PHP江湖论坛源码&#xff0c;总有一款适合您 119个PHP江湖论坛源码下载链接&#xff1a;https://pan.baidu.com/s/1Zz-GiS6WT3i16dZMz-5rvQ?pwdr416 提取码&#xff1a;r416 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 我的博客地址&#xff1a;…

【Unity URP】探讨描边方案 自定义后处理Volume

写在前面 本篇内容实现了在URP下获取深度、法线实现描边的后处理描边之前做的工作&#xff0c;包括讨论描边方案&#xff0c;以及写shader之前的自定义renderFeature和Volume组件的过程。 由于是想复刻《SCHiM》游戏里的画面风格&#xff0c;所以本篇文章的需求很明确&#x…