Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method--论文笔记

论文笔记

资料

1.代码地址

https://github.com/iBelieveCJM/pseudo_label-pytorch

2.论文地址

3.数据集地址

论文摘要的翻译

本文提出了一种简单有效的深度神经网络半监督学习方法。基本上,所提出的网络是以有监督的方式同时使用标记数据和未标记数据来训练的。对于未标记的数据,只要选取具有最大预测概率的类别,就可以使用伪标签,就好像它们是真标签一样。这实际上等同于熵正则化。它支持类之间的低密度分离,这是半监督学习通常假设的先验条件。在MNIST手写数字数据集上,利用去噪自动编码器和丢弃,这种简单的方法在标签数据非常少的情况下优于传统的半监督学习方法。

1背景

所有训练深度神经网络的成功方法都有一个共同点:它们都依赖于无监督学习算法。大多数工作分两个主要阶段进行。在第一阶段,无监督预训练,所有层的权重通过这种分层的无监督训练来初始化。在第二阶段,微调,在有监督的方式下,使用反向传播算法用标签全局地训练权值。所有这些方法也都以半监督的方式工作。我们只需要使用额外的未标记数据来进行无监督的预训练。
我们提出了一种更简单的半监督方式训练神经网络的方法。基本上,所提出的网络是以有监督的方式同时使用标记数据和未标记数据来训练的。对于未标记的数据,只需选取每次权重更新具有最大预测概率的类,就像使用真标签一样使用伪标签。该方法原则上可以结合几乎所有的神经网络模型和训练方法。
这种方法实际上等同于熵正则化(Granvalet等人,2006年)。类概率的条件熵可用于类重叠的度量。通过最小化未标记数据的熵,可以减少类概率分布的重叠性。它支持类之间的低密度分离,这是半监督学习的常见先验假设。

2论文的创新点

3 论文方法的概述

3.1 思路

伪标签是未标记数据的目标类,就好像它们是真标签一样。我们只选取对每个未标记样本具有最大预测概率的类别。
y i ′ = { 1 if  i = argmax i ′ f i ′ ( x ) 0 otherwise y_i^{\prime}=\begin{cases}1&\text{if }i=\text{argmax}_{i'}f_{i'}(x)\\0&\text{otherwise}\end{cases} yi={10if i=argmaxifi(x)otherwise我们在Dropout的微调阶段使用伪标签。用标记和未标记的数据同时以有监督的方式训练预先训练的网络。对于未标记的数据,每次权值更新重新计算的伪标签被用于相同的监督学习任务的损失函数。
由于有标签数据和无标签数据的总数有很大不同,并且它们之间的训练平衡对网络性能非常重要,因此总体损失函数为 L = 1 n ∑ m = 1 n ∑ i = 1 C L ( y i m , f i m ) + α ( t ) 1 n ′ ∑ m = 1 n ′ ∑ i = 1 C L ( y i ′ m , f i ′ m L=\frac{1}{n}\sum_{m=1}^{n}\sum_{i=1}^{C}L(y_{i}^{m},f_{i}^{m})+\alpha(t)\frac{1}{n'}\sum_{m=1}^{n'}\sum_{i=1}^{C}L(y_{i}^{\prime m},f_{i}^{\prime m} L=n1m=1ni=1CL(yim,fim)+α(t)n1m=1ni=1CL(yim,fim
其中n是SGD的已标记数据中的批次数, n ′ n\prime n用于未标记数据, f i m f^m_i fim是已标记数据中 m m m个样本的输出单位, y i m y^m_i yim是标签, f i ′ m f^{\prime m}_{i} fim用于未标记数据, y i ′ m y^{\prime m}_{i} yim是未标记数据的伪标签, α ( t ) \alpha(t) α(t)是平衡它们的系数。
α ( t ) \alpha(t) α(t)的合理调度对网络性能非常重要。如果 α ( t ) \alpha(t) α(t)太高,即使对于已标记的数据,也会干扰训练。而如果 α ( t ) \alpha(t) α(t)太小了,我们就不能利用未标记数据的好处。此外, α ( t ) \alpha(t) α(t)缓慢增加的确定性退火过程有望帮助优化过程避免较差的局部极小值,从而使未标记数据的伪标签尽可能类似于真实标签。 α ( t ) = { 0 t < T 1 t − T 1 T 2 − T 1 α f T 1 ≤ t < T 2 α f T 2 ≤ t \alpha(t)=\begin{cases}0&t<T_1\\\frac{t-T_1}{T_2-T_1}\alpha_f&T_1\leq t<T_2\\\alpha_f&T_2\leq t\end{cases} α(t)= 0T2T1tT1αfαft<T1T1t<T2T2t α f {\alpha}_f αf=3、 T 1 T_1 T1=100、 T 2 T_2 T2=600的情况下,不进行预训练;在DAE的情况下, T 1 T_1 T1=200、 T 2 T_2 T2=800。

3.2 Pseudo-Label为什么有效?

半监督学习的目标是利用未标记的数据来提高泛化性能。聚集学习假设指出,决策边界应位于低密度区域,以提高泛化性能。
最近提出的使用流形学习训练神经网络的方法,如半监督嵌入和流形切线分类器,都利用了这一假设。半监督嵌入使用基于嵌入的正则化来提高深度神经网络的泛化性能。由于数据样本的邻居通过嵌入惩罚项与样本具有相似的激活,因此高密度区域的数据样本更有可能具有相同的标签。流形切线分类器鼓励网络输出对低维流形方向的变化不敏感。因此,同样的目的也达到了。

3.3 Entropy Regularization

在最大后验估计的框架下,熵正则化是一种从未标记数据中获益的方法。该方案通过最小化未标记数据的类概率的条件熵来支持类之间的低密度分离,而不需要对密度进行任何建模。 H ( y ∣ x ′ ) = − 1 n ′ ∑ m = 1 n ′ ∑ i = 1 C P ( y i m = 1 ∣ x ′ m ) log ⁡ P ( y i m = 1 ) H(y|x')=-\frac{1}{n'}\sum_{m=1}^{n'}\sum_{i=1}^{C}P(y_{i}^{m}=1|x'^{m})\operatorname{log}P(y_{i}^{m}=1) H(yx)=n1m=1ni=1CP(yim=1∣xm)logP(yim=1)
其中 n ′ n^\prime n是未标记数据的数目, C C C是类数, y i m y^m_i yim是第 m m m个未标记样本的未知标记, x ′ m x^{\prime m} xm是第m个未标记样本的输入向量,熵是类重叠的一种度量。随着类重叠的减少,决策边界上的数据点密度变得更低。
MAP估计被定义为后验分布的最大值: C ( θ , λ ) = ∑ m = 1 n log ⁡ P ( y m ∣ x m ; θ ) − λ H ( y ∣ x ′ ; θ ) C(\theta,\lambda)=\sum_{m=1}^n\log P(y^m|x^m;\theta)-\lambda H(y|x';\theta) C(θ,λ)=m=1nlogP(ymxm;θ)λH(yx;θ)
其中n是标记数据的数目, x m x^m xm是第 m m m个标记样本, λ λ λ是平衡两项的系数。通过最大化已标记数据(第一项)的条件对数似然和最小化未标记数据(第二项)的熵,可以获得更好的泛化性能。
图1示出了t-SNE 在MNIST测试数据(未包括在未标记数据中)的网络输出的2D嵌入结果。神经网络用600个已标记数据以及60000个未标记数据和伪标签进行训练。虽然在两种情况下训练误差为零,但通过使用未标记数据和伪标签进行训练,测试数据的网络输出更接近于1-OFK码,换言之,(17)的熵被最小化。
在这里插入图片描述
表2显示了(17)的估计熵。虽然两种情况下已标记数据的熵都接近于零,但通过伪标签训练,未标记数据的熵变低,另外,测试数据的熵也随之降低。这使得分类问题变得更容易,甚至对于测试数据也是如此,并且使得决策边界处的数据点密度更低。根据聚类假设,我们可以得到更好的泛化性能。
在这里插入图片描述

3.4 Training with Pseudo-Label as Entropy Regularization

我们的方法通过对未标记数据和伪标签的训练,鼓励预测的类别概率接近K中的1-of-code,从而使公式(17)的熵最小。因此,我们的方法等价于熵正则化。(18)的第一项对应于(15)的第一项,(18)的第二项对应于(15)的第二项,α对应于λ。

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

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

相关文章

加法器的基本操作

基本单元 与门(AND) 全1为1&#xff0c;有0为0 或门(OR) 全0为0&#xff0c;有1为1 非门(NOT) 为1则0&#xff0c;为0则1 异或门(XOR) 两个输入端&#xff0c;相同为0&#xff0c;不同为1 与非门(NADD) 全1为0&#xff0c;有0为1 或非门(NOR) 全0为1&#xff0c;有1为0。刚…

redis 如何使用 scan, go语言

建议用方案乙 文章目录 场景方案方案甲方案乙 拓展 场景 redis 中存在大量 key。 其中有一部分是用户登陆的 session_id&#xff0c; 结构是 &#xff1a; session_id:1session_id:2session_id:3需求&#xff1a; 有多少用户在线 方案 方案甲 keys session_id:*这种方式简…

第一次面试的经历(java开发实习生)

面试官的问题 我想问一下你这边有做过什么项目吗?你方便讲一下你做过的那些项目吗&#xff0c;用了什么技术栈&#xff0c;包括你负责开发的内容是什么&#xff1f;&#xff08;项目经验&#xff09;八大基本数据类型是什么&#xff1f;&#xff08;基础&#xff09;你说一下…

安徽医学期刊

《安徽医学》&#xff08;月刊&#xff09; 主管单位&#xff1a;安徽省卫生健康委员会 主办单位&#xff1a;安徽省医学情报研究所 承办单位&#xff1a;安徽省医学会 收录情况&#xff1a;中国科技论文统计源期刊&#xff08;中国科技核心期刊&#xff09;、中国核心期刊&…

项目部署_持续集成_Jenkins

1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从检出代码、 编译构建…

SQL FOREIGN KEY

SQL FOREIGN KEY 简介 SQL(Structured Query Language)是用于管理关系数据库管理系统(RDBMS)的标准编程语言。在SQL中,FOREIGN KEY是一个重要的概念,用于建立和维护数据库中不同表之间的关系。本文将详细介绍SQL FOREIGN KEY的概念、用途、以及如何在SQL中实现和使用FO…

数据结构——单向循环链表

文章目录 1. 概念 2. 区别 2.1 结构区别 2.2 访问方式区别 2.3 优缺点对比 3. 流程 4. 基本操作 5. 代码示例 1. 概念 单向循环链表是一种特殊的单链表&#xff0c;其中最后一个节点的后继指针指向头节点&#xff0c;形成一个环。单向循环链表适合用于需要循环访问数据…

Spring Boot集成jacoco实现单元测试覆盖统计

1.什么是jacoco&#xff1f; JaCoCo&#xff0c;即 Java Code Coverage&#xff0c;是一款开源的 Java 代码覆盖率统计工具。支持 Ant 、Maven、Gradle 等构建工具&#xff0c;支持 Jenkins、Sonar 等持续集成工具&#xff0c;支持 Java Agent 技术远程监控 Java 程序运行情况…

【鸿蒙学习笔记】Stage模型工程目录

官方文档&#xff1a;应用配置文件概述&#xff08;Stage模型&#xff09; 目录标题 FA模型和Stage模型工程级目录模块级目录app.json5module.json5程序执行流程程序基本结构开发调试与发布流程 FA模型和Stage模型 工程级目录 模块级目录 app.json5 官方文档&#xff1a;app.j…

STM32学习历程(day3)

通过GPIO点灯 首先先创建工程 这步比较繁琐 可以去参考江协科技[3-2]章节 想要驱动LED灯 要先使能时钟、然后再初始化、GPIO模式、引脚、以及输出速率 可以查看RCC的头文件 能看到三个使能函数 使能AHB、APB2、APB1 &#xff0c;GPIO用APB2这个函数、 通过看RCC库函数的源码…

Memcached跨数据中心复制:高效数据同步的艺术

标题&#xff1a;Memcached跨数据中心复制&#xff1a;高效数据同步的艺术 Memcached是一个高性能的分布式内存缓存系统&#xff0c;广泛用于提升大规模Web应用的性能。在多数据中心的环境中&#xff0c;跨数据中心的数据复制是确保数据一致性和高可用性的关键技术。本文将深入…

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分&#xff0c;实时&#xff0c;准确的监控&#xff0c;将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana&#xff0c;嘿你别说 这俩兄弟配合的相当完美&#xff0c;Prometheus负责数据采集&…

【MySQL系列】VARCHAR 类型详解及其使用策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL---事务管理

1.关于事务 理解和学习事务&#xff0c;不能只站在程序猿的角度来理解事务&#xff0c;而是要站在使用者&#xff08;用户&#xff09;的角度来理解事务。 比如支付宝转账&#xff0c;A转了B100块前&#xff0c;在程序猿的角度来看&#xff0c;是两条update操作&#xff0c;A …

ChatGPT对话:按ESC键退出Python程序

问&#xff1a;python&#xff0c;这条语句if keyboard.is_pressed(‘Esc’):会阻塞程序&#xff0c;等待按键吗&#xff1f; ChatGPT&#xff1a; if keyboard.is_pressed(Esc): 这条语句不会阻塞程序&#xff0c;它只是检查在执行这条语句时 Esc 键是否被按下。如果 Esc 键…

浅谈反射机制

1. 何为反射&#xff1f; 反射&#xff08;Reflection&#xff09;机制指的是程序在运行的时候能够获取自身的信息。具体来说&#xff0c;反射允许程序在运行时获取关于自己代码的各种信息。如果知道一个类的名称或者它的一个实例对象&#xff0c; 就能把这个类的所有方法和变…

react之错误边界

错误边界实质是指什么 实际上是组件 错误边界捕获什么时候的错误 在渲染阶段的错误 错误边界捕获的是谁的错误 捕获的是子组件的错误 错误边界不能捕获什么错误 1、不能捕获异步代码 2、不能捕获事件处理函数 3、不能捕获服务端渲染 4、不能捕获自身抛出的错误 错误…

百度amis vue3引入减少包提体积

不用amis的包 , 在index.html引入代码如下,要在main上面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><link rel"icon" href"/favicon.ico" media"print"/><meta http…

【贪心 堆 优先队列】502. IPO

本文涉及知识点 贪心 堆 优先队列 LeetCode502. IPO 假设 力扣&#xff08;LeetCode&#xff09;即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司&#xff0c;力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限&#xff0c;它只能在 IPO 之前完成最多 k…

ORB-SLAM3源码分析(案例分析)

一、ORB-SLAM3简介 ORB-SLAM3 (Oriented FAST and Rotated BRIEF SLAM 3) 是一种视觉SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;同时定位与地图构建&#xff09;系统&#xff0c;用于机器人和计算机视觉领域。它是ORB-SLAM系列的第三个版本&#xff…