Deep Streaming Label Learning 论文阅读

news/2024/12/4 20:10:41/

  这篇论文发表在ICML 2020上,是一篇关于多标签学习的文章,文章提出了一种基于深度神经网络的新型框架,即深度流标签学习(DSLL),以有效地对带有新兴标签的实例进行分类。

1.Introduction

  在传统的监督学习中,单个实例仅具有一个标签。而在许多实际任务中,一个实例自然可以与多个标签相关联。例如,一个文档可能涉及多个主题;一张图像可以包含几个人的脸。 有学者提出并研究了多标签学习来处理这一类的任务。对于给定的实例x∈Rd,要预测y∈{0,1}m,其中m是标签的数量,d是输入实例的维数。
  现有的多标签学习研究集中于一组固定的标签,即所有标签都是一次给出的。但是,在现实世界中并不是这样。实际上,随着对数据的深入探索和理解,标签的数量逐渐增加。例如,当照片发布在Facebook或Twitter上时,正在浏览的用户将对照片进行连续且不同的标记,并且分类系统需要根据新标签准确更新。
  在这篇论文中,作者提出了一个基于DNN的新颖框架,即深度流标签学习(DSLL),以有效地对新兴的新标签进行建模,可以从过去的标签和历史模型中探索和吸收知识,以理解和发展新的标签。
  文章的总体结构如下。第2节总结了先前的相关工作;第三部分提出了问题并详细描述了所提出的模型;第四部分介绍了验证模型的实验结果。

2.Related work

2.1 Multi-label Learning

  多标签学习一般有两种方法:(1)探索和利用标签间的相关性,(2)通过将原始的高维标记向量嵌入低维表示来减少标记空间。特别是深度神经网络(DNN)提供了一种学习标签相关性和同时嵌入的好方法,大大优于传统方法。

2.2 Streaming Label Learning

  在2016年,流式标签学习(SLL)被提出,其目的是利用过去标签的知识。
  (1)标签被表示为其他标签的线性组合,
  (2)标签之间的关系(线性组合)可以由不同标签的分类器继承。
  受这些假设的约束,SLL会根据过去标签和新标签之间的关系训练新标签的线性分类器。但是,跨标签的线性表示会限制SLL性能,并且忽略了过去标签分类器的训练知识。

2.3 Knowledge Distillation

  知识蒸馏(KD)旨在将知识从现有的强大分类器(称为教师)转移到轻量级分类器(称为学生)。
  通过一步一步地使用一个较大的已经训练好的网络去教导一个较小的网络确切地去做什么。通过尝试复制大网络在每一层的输出(不仅仅是最终的损失),小网络被训练以学习大网络的准确行为。

3. Deep Streaming Label Learning

  这部分是文章的主体部分,主要介绍了DSLL算法的原理和组成部分。面对新出现的标签,传统的多标签学习面临以下困境:(1)整合过去的标签和新标签以重新训练新的多标签模型需要大量的计算资源;(2)独立学习新标签会忽略从过去的标签和历史模型中获得的知识。因此DSLL算法被提出以解决这些问题,DSLL的整体结构如图3.1所示。该框架由三个部分组成:
1)流式标签映射,用标签相关感知损失捕获新标签和过去标签之间的关系,其中硬为过去标签的ground truth,软为过去标签分类器(teacher)提供的预测;
2)流式特征蒸馏,将教师的知识转化为新标签分类器(学生),以教师中间层的输出作为提示引导学生的输出;
3)高年级学生网络,利用关系和知识最终建立新标签模型。红色虚线表示学习过程中的反向传播路径。
DSLL结构图

3.1 Streaming Label Mapping with Label-correlation Loss

  这部分主要是得到之前label和新加入label最接近的mapping。在前人论文中证明了探索和开发标签之间的关系对提高MLL性能是重要的。其中训练的时候会加入Hard label(GT的label)进行联合训练。旨在使流标签映射在学习标签之间的关系时更加健壮。一方面,过去的hard label与新到标签保持着未被打破的关系,另一方面,在测试过程中,硬标签是未知的,仅依赖于过去标签分类器提供的软标签。其输出下面公式所示。
软硬标签结合
代码如下所示,上面是将已有的分类模型导入,下面的是给的一个示例代码,将标签进行映射。
流标签映射代码
  在loss函数的选择上,这篇文章在常用的多标签损失函数MultiLabelSoftMarginLoss的基础上,提出了一个叫做correlation-aware loss的函数,定义如下(b一般取1):
correlation-aware loss
correlation-aware loss的代码实现如下:
correlation-aware loss

3.2 Streaming Feature Distillation

  DSLL模型的第二个部分是一种基于提示的流式特征提取方法,它将过去标签分类器(教师)的知识转化为新标签分类器(学生)的知识。教师的中间层引导学生的隐含层来模仿它的输出。由于所选择的提示层可能比引导层有更多的输出,因此我们在引导层之后添加了一个由WAdapt参数化的自适应矩阵来匹配提示层的输出大小。结构如下所示。上面是教师层,下面是学生层,中间通过loss反向传播进行学习,以得到更小更好的模型。
流式特征提取示意图
  这部分loss的公式如下所示,即提示层和引导层的均方差。
在这里插入图片描述
  其中RHint和RGuided分别表示提示层在teacher中的输出和引导层在student中的输出。最后,引导层之前的学生参数将作为预先训练的参数保存,并在以后的训练中以缓慢的学习速度进行微调。流特征蒸馏优于从零开始的训练,因为预先训练的模型已经提取了大量的特征级知识。
  这部分代码实现如下所示,loss函数直接使用pytorch的MSRLoss函数实现即可。
流式特征提取代码

3.3 Learning from the Past

  这部分是为了整合从过去的标签和历史分类器学习到的知识。高年级学生接收流标签映射和学生网络的输出作为输入,并生成对新标签的预测。在流标签映射后增加了一个隐含层作为非线性变换St,它可以将流标签映射的输出转换到更高的空间。总的来说,对高年级学生的训练可以看作是从实例xi到输出流标签映射到相应的新标签向量ynewi的过程。在学习阶段,通过最小化交叉熵损失,同时训练高年级学生的参数、变换St和学生(包括预先训练好的引导层)Loss如下:
在这里插入图片描述
  总体DSLL的代码实现如下所示,首先x输入蒸馏完成后的网络得到x_feature_kd,在流标签映射得到的y_mapping添加一个隐含层得到更高维的空间映射,最后综合两个部分输入到高年级学生网络中完成新标签的预测。
在这里插入图片描述
  最后,运行了一下官方github的代码示例(可能有错误,关于gpu和cpu的选择,调试一下就可以改正了),得到结果如下所示。
在这里插入图片描述

4. 实验数据和结果

  三个正常规模的数据集:Yeast、 MirFlickr和Delicious,两个大规模数据集:EURlex和 Wiki10。实验环境是64位的linux,内存为256GB,CPU是10核的Intel i7-6850K,显卡是4块Nvidia GTX 1080Ti。
  与之前方法的对比结果如下所示,第一个图的评价指标是mirco-AUC,第二个图的评价指标是Ranking-loss,前者越大越好,后者越小越好。可以看出,DSLL模型基本好于其他模型。

在这里插入图片描述
在这里插入图片描述
  其中micro-AUC是将多分类转换为多个二分类问题,然后将所有的二分类合并,变为统一的x轴和y轴,进行AUC的计算。与之相对的是marco-AUC,它是将所有的二分类的曲线进行平均得到最后结果。第二张图的评价指标Ranking loss的公式如下所示,它衡量了排序相反的比例,即不相关的标签排在相关标签之前。
在这里插入图片描述
  DSLL模型的自身对比结果如下所示。其中KD 代表knowledge distillation,即知识蒸馏,CE代表cross-entropy loss,LC代表label correlation-aware loss,St代表transformation layer。由Baseline开始,加上对应的结构,直到最后加上所有的结构的结果对比。可以看出,Ap值在上升,Coverage在下降。
在这里插入图片描述
  Coverage公式如下所示,该评价指标用于考察在样本的类别标记排序序列中,覆盖所有相关标记所需的搜索深度情况,即越小越好。
在这里插入图片描述
  Ap公式如下所示,该评价指标用于考察在样本的类别标记排序序列中,排在相关标记之前的标记仍在相关标记的情况,即越大越好。
在这里插入图片描述

5.总结

  本文提出了一个新颖的框架,即深度流标签学习(DSLL),以解决带有新标签的多标签学习问题。该多标签分类器包含三个部分:流式标签映射,流式特征蒸馏和高年级学生。DSLL从过去的标签及其分类器中提取知识,以有效地对新兴标签进行建模,而无需重新培训整个多标签分类器。


http://www.ppmy.cn/news/460575.html

相关文章

单龙芯3A3000-7A1000PMON研究学习-(29)撸起袖子干-再来一杯代码10-内存初始化2

接着上篇的代码来。 1.上代码 PRINTSTR("PCI space open: 0x80000000 - 0x8FFFFFFF\r\n") //打印信息//config high memory windowsGET_MC_SEL_BITSbeqz a1, 84f //不跳转nop /* Assume MC0_ONLY */GET_MC0_MEMSIZE //a1 16move t5, a1GET_MC1_ONL…

Linux curl命令参数详解

一、Linux curl用法举例: 1. linux curl抓取网页: 抓取百度: 1 curl http://www.baidu.com 如发现乱码,可以使用iconv转码: 1 curl http://iframe.ip138.com/ic.asp|iconv -fgb2312 iconv的用法请参阅:…

龙芯软件开发(10)--龙芯2E指令

每个CPU都有自己独特的指令,比如X86结构的CPU有INTEL的指令系统,MIPS的CPU也有自己的指令系统,当然龙芯CPU也不例外,有自己的指令系统。指令是控制CPU怎么样工作的接口,每条指令都会让CPU做出响应的。如果发送一条不是…

计组实验2 mips简单乘法器模拟实验

目录 前言加法原理忽略溢出的乘法器溢出提示的乘法器完整代码 前言 上一次做了 MIPS实验1:阴间指令集MIPS简介:汇编,IO,过程调用与冒泡排序,如果对mips的IO等等操作还有不懂的可以康康。。。 那么今天来记录一下计组…

计组实验---流水线冒险

文章目录 前言实验内容实验说明一、 调整指令序列二、 Forwarding功能开启三、 结构相关优化要求指令序列调整方案 实验中修改后的高效率代码数据冒险结构冒险 选做题 前言 看了龙哥的blog,感觉实验报告的内容变了一点,这里就更新一下 龙哥的blog 实验内…

计算机体系结构 第2章 指令系统的设计(2)

文章目录 第2章 指令系统的设计2.4 指令系统的发展和改进2.4.1 沿CISC方向发展和改进指令系统2.4.1.1 面向目标程序增强指令功能2.4.1.2 面向高级语言的优化实现来改进指令系统(缩小高级语言与机器语言的语义差距)2.4.1.3 面向操作系统的优化实现改进指令…

高级数据分析师工作的基本职责(合集)

高级数据分析师工作的基本职责1 职责: 1. 负责出行平台层面司乘用户分析,给平台相关业务及策略建设输入洞察和方法; 2. 形成天、周和月度的分析报告,传递给公司管理层并进行定期汇报; 3. 可独立完成针对特定问题的分析解读,支持临…

如何把一个 Git 仓库的分支加入另一个无关的 Git 仓库

文章目录 笔者需要将两个无关的 Git 仓库合并,也就是把一个 Git 仓库的分支加入另一个无关的 Git 仓库。笔者琢磨了一下之后就实现了。方法如下。 笔者的运行环境: git version 2.37.0.windows.1 TortoiseGit 2.11.0.0 IntelliJ IDEA 2023.1.1 (Ultima…