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

本文主要是介绍Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pseduo-Label

  • 伪标签的介绍
  • 论文介绍
    • 核心思想
    • 相关流程
    • 相关函数
      • Denoising Auto-Encoder
      • 模型整体的目标函数
  • 伪标签有效的原因
    • 类间的低密度分离
    • 熵正则化
  • 实验结果
  • 读后感
    • 思考
    • 存在不足

论文地址:Pseduo-Label
从DAFomer溯源到的论文

伪标签的介绍

伪标签的介绍可以参考:伪标签(Pseudo-Labelling)——锋利的匕首,详细介绍了什么是伪标签方法以及伪标签方法的分类,本论文用到的方法就是上文中的 创新版伪标签的方法(将没有标签的数据的损失函数也加入进来,就是最后公式后边那一坨,具体如下图)
在这里插入图片描述

论文介绍

核心思想

Pseudo-Label 模型作为一个简单、有效的半监督学习方法早在 2013年就被提出,其核心思想包括两步:

  • 第一步:运用训练出的模型给予无标签的数据一个伪标签。方法很直接:用训练中的模型对无标签数据进行预测,以概率最高的类别作为无标签数据的伪标签
  • 第二步:运用 entropy regularization(熵正则化化) 思想,将无监督数据转为目标函数的正则项(如下文公式)。实际中,就是将拥有伪标签的无标签数据视为有标签的数据,然后用交叉熵来评估误差大小

相关流程

使用有标签数据和无标签数据同时以有监督的方式训练预训练网络。对于无标签的数据,在每次权值更新时重新计算的伪标签,被用于与监督学习任务相同的损失函数计算(即每次权值更新时,都重新计算伪标签,并将该伪标签当作真是标签用于计算损失函数)。

相关函数

Denoising Auto-Encoder

去噪自动编码器是一种无监督学习算法,基于使学习的表示对输入模式的部分破坏具有鲁棒性的思想。该方法可以用于训练自动编码器,这些微分代数方程组(DAE)可以堆叠起来初始化深度神经网络:

h i = s ( ∑ j = 1 d v W i j x ~ j + b i ) h_i=s(\sum_{j=1}^{d_v}W_{ij}\tilde x_j+b_i) hi=s(j=1dvWijx~j+bi)
x ^ j = s ( ∑ i = 1 d h W i j h i + a j ) \widehat x_j=s(\sum_{i=1}^{d_h} W_{ij}h_i+a_j) x j=s(i=1dhWijhi+aj)
x ~ j \tilde x_j x~j是第 j 个输入值的损坏版本
x ^ j \widehat x_j x j是第 j 个输入值的重构

自动编码训练在于最小化 x j x_j xj x ^ j \widehat x_j x j重构误差(error)。对于二分类输入值,常用的重构误差选择是交叉熵:
L ( x , x ^ ) = ∑ j = 1 d v − x j l o g x ^ j − ( 1 − x j ) l o g ( 1 − x ^ j ) L(x,\widehat x)=\sum_{j=1}^{d_v}-x_jlog \widehat x_j-(1-x_j)log(1-\widehat x_j) L(x,x )=j=1dvxjlogx j(1xj)log(1x j)

模型整体的目标函数

y i ′ = { 1 , if  i = a r g m a x i ′ f i ′ ( x ) 0 , otherwise y_i'= \begin{cases} 1, & \text{if $i=argmax_{i'}f_{i'}(x)$} \\[2ex] 0, & \text{otherwise} \end{cases} yi= 1,0,if i=argmaxifi(x)otherwise

L公式左边是评估有标签数据的误差交叉熵,右边是评估伪标签数据的误差交叉熵

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'^m, f_i'^m) L=n1m=1ni=1CL(yim,fim)+α(t)n1m=1ni=1CL(yim,fim)

n n n 是SGD中有标签数据的mini-batch大小
n ′ n' n 是SGD中无标签数据的mini-batch大小
f i m f_i^m fim 是有标签数据中 m 个样本的输出集合
y i m y_i^m yim 是有标签数据中 m 个样本的真实标签
f i ′ m f_i'^m fim 是无标签数据中 m 个样本的输出集合
y i ′ m y_i '^m yim 是无标签数据中 m 个样本的伪标签
α ( t ) \alpha(t) α(t) 是平衡它们的系数

为了平衡有标签和无标签之间的损失引入了 α ( 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, & \text{$t<T_1$} \\ \frac{t-T_1}{T_2-T_1}\alpha_f, & \text{$T_1\leq t < T_2$} \\ \alpha_f, & \text{$T_2 \leq t$} \end{cases} α(t)= 0,T2T1tT1αf,αf,t<T1T1t<T2T2t
α f = 3 , T 1 = 100 , T 2 = 600 \alpha_f =3, \quad T_1=100, \quad T_2=600 αf=3,T1=100,T2=600

伪标签有效的原因

类间的低密度分离

在这里插入图片描述
这个世界是非黑即白的,什么是非黑即白?

假设现在有一大堆的data,有标注数据,有非标注数据,在两个类别之间会有一个明显的鸿沟。给一些标注数据,可以把边界分在上图右边的线,也可以把边界分在上图左边的线。但是考虑非标注数据,那么左边的边界会好一点,在边界处,两个类别的密度是低的(不会出现data)。

熵正则化

熵正则化是在最大后验估计框架中受益于无标签数据的一种手段。该方案通过最小化无标签数据的类别概率的条件熵,支持类间的低密度分离,而无需对密度进行任何建模。

H ( y ∣ x ′ ) = − 1 n ′ ∑ m = 1 n ′ ∑ i = 1 C P ( y i m = 1 ∣ x ′ m ) l o g P ( y i m = 1 ∣ x ′ m ) H(y|x')=-\frac{1}{n'}\sum_{m=1}^{n'}\sum_{i=1}^{C}P(y_i^m=1|x'^m)logP(y_i^m=1|x'^m) H(yx)=n1m=1ni=1CP(yim=1∣xm)logP(yim=1∣xm)
n ′ n' n 是无标签数据的数目
C C C 是类别数目
y i m y_i^m yim是第 m 个无标签样本的未知标签
x ′ m x'^m xm 是第 m 个无标签样本的输入向量
这个熵用于度量类间的重叠。随着类间重叠的减少,决策边界上的数据点密度降低。

MAP估计被定义为后验分布的最大化:
C ( θ , λ ) = ∑ m = 1 n l o g P ( y m ∣ x m ; θ ) − λ H ( y ∣ x ′ ; θ ) C(\theta ,\lambda)=\sum_{m=1}^nlogP(y^m|x^m;\theta)-\lambda H(y|x';\theta) C(θ,λ)=m=1nlogP(ymxm;θ)λH(yx;θ)
● n 是有标签数据的数目
x m x^m xm 是第 m 个有标签样本
λ \lambda λ 是平衡两项的系数
通过最大化有标签数据的条件对数似然(第一项),并最小化无标签数据的熵(第二项),我们可以利用无标签数据获得更好的泛化性能。

就如上文相关流程中所说: pseudo label多是先用标注数据训练模型,然后在未标注样本上预测,筛选高置信的未标注样本再训练新模型,训练多轮直到模型效果不再提升,而这篇文章的实现其实是把未标注样本作为正则项的一部分。因为预测label和预测概率是相同模型给出的,因此最小化预测label的交叉熵,也就是最大化预测为1的class对应的概率值,和MinEnt直接最小化未标注样本交叉熵的操作一样。(在思考模块详细讲解个人想法)

实验结果

在实验中,研究人员用 MNIST 数据集进行了实验验证,并尝试了在有标签数据仅为100、600、1000和3000时的结果入下图所示:
在这里插入图片描述
DROPNN、PL 和 PL+DAE 分别是实验中的 baseline 模型、baseline 模型+Pseudo-Label 方法 以及 baseline 模型+Pseudo-Label 方法+ DAE 预训练方案。

这里我们主要关注Pseudo-Label 方法的效果,其结果如表中倒数第二行所示。从表中可以看出,当有标签数据仅为 600 条时,Pseudo-Label 方法相对于其他公开模型,可以达到最佳的效果。但在其他实验条件下,只能实现相对较好的表现。不过相对于 baseline,此方法在所有情况下均能实现一定的提升。有标签数据量越少,这一提升越明显。这说明 Pseudo-Label 方法确实可以在一定程度上从无标签数据中提取有效信号。

进一步,研究人员通过降维可视化的方式展示了 Pseudo-Label 模型使用前后的效果,实验数据包含 600 有标签数据 + 60000 无标签数据:
在这里插入图片描述
对比上面左右两张图可以看出来, Pseudo-Label 模型相对于单独的有监督模型,可以有效改善各类别数据在空间中的聚集密度。

读后感

思考

在这里插入图片描述
熵正则化的目的是为了让相同类别的分布更加集中,减少class overlap;而降低预测值和伪标签的交叉熵,也就是最大化预测为1(或者一个类的概率非常接近1,可以近似等于1?)的class对应的概率值,也就是让最有可能的预测结果最大,这样的话信息熵自然就很小。

存在不足

Pseudo-Label 方法只在训练时间这个维度上,采用了退火思想,即采用时变系数α(t)。而在伪标签这个维度,对于模型给予的预测标签一视同仁,这种方法在实际中存在明显问题。很显然,如果模型对于一个样本所预测的几个类别都具有相似的低概率值,如共有十个类别,每个类别的预测概率值都接近 0.1,那么再以最大概率值对应的类别作为伪标签,是不合适的,将会引入很大的错误信号。(概括一下也就是:Pseudo-Label 方法,以最大概率值对应的类别作为伪标签这个操作是不太合适的(考虑到每个类别的预测概率值都接近 0.1,每个类别的预测结果都很差))

本文内容参考如下:
伪标签(Pseudo-Labelling)——锋利的匕首

我们真的需要那么多标注数据吗?半监督学习技术近年来的发展历程及典型算法框架的演进

[论文笔记]Pseudo-Label:The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks

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

Pseudo-Label 代码

这篇关于Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308466

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个