Deep Active Learning(深度主动学习)

article/2025/8/29 13:13:29

在深度学习时代,以监督学习为首的各项模型都取得了非常好的效果,但是这往往需要非常多的数据量来支撑。所以主动学习这一领域主要的目的就是为了让目标模型达到性能的前提下,尽可能的减少标准成本。
在这里插入图片描述

Active Learning(主动学习)
自主学习,可以理解为模型与人类专家之间的询问式学习,试图通过标记最少量的样本使得模型的性能收益最大化,这样可以减少很多人为的标定工作,只标模型需要的样本。具体怎么做呢?一图胜千言:
在这里插入图片描述
大概的意思是:如果模型遇到了迷惑的地方,就主动的询问专家(这也是为什么要叫主动学习),然后由专家标定完,将这个标定了的新样本纳入到样本集中,再一起训练,这样可能逐步改善模型的困惑,同时一些模型已经学的很好的样本就不需要再标定(这思路和SVM某种程度挺像的)。具体捕捉是:

  • 先把一小部分数据,由监督者进行标注,得到labeled training set L
  • 通过已标注的样本,建立一个初始的分类器模型
  • 由模型主动提出询问Q
  • 监督者(oracle,但是oracle 可能是一个专家,打标签准确率百分百;同时也可能是不同拥有专业知识的人,打标签不一定完全准确,比如众包)
  • oracle 根据 查询标准Q,在 unlabeled pool 没有标记的样本中,选取一些未标注的样本进行标注
  • 把标注后的样本重新加入L中,并回到第二步,以提升模型的表现,直至达到停止标准

举一个简单却又经典的例子:
在这里插入图片描述

  • 我们想得到一个能很好处理线性分类问题的模型,绿点和红点为已标记的点,假设现在已经得到几个模型了(图中蓝色的几条线)。
  • 此时当有一个新的样本进来(图示右上角的红圈标记),对于某两条线(图示红勾标记),这个新样本属于哪一类(红或绿)。
  • 此时当两条线得出的分类表现一致时(都分类为红点时),就不选择标记该点,随后再选择下一个样本。反之模型会提出Q(它已经困惑了),询问这个点应该被标记为什么,通过专家对这样的点进行标记的结果可以逐步的删除一些模型(或假设空间,因为在专家标记后,某些模型的表示如果是错误的,应该被删去),最终生成一个十分准确的模型。

Query Strategy Framework
这个理论其实就是Query-By-Committe,是Query Strategy Framework的一种,即模型通过什么样的规则来选出样本交由专家进行标记。流行的处理方法主要有:

  • Uncertainty Sampling。即将模型“最易混淆”的样本挑选出来,即找hard sample,这种方法是目前用的最多的,实现方式主要有三种 Least Confident,margin sampling和entropy。 Least Confident认为模型预测该样本的概率值较低的样本是“易错”的样本,即 X L C = a r g m a x 1 − P ( y ′ ∣ x ) , y ′ = a r g m a x P ( y ∣ x ) X_{LC}=argmax 1-P(y'|x), y'=argmax P(y|x) XLC=argmax1P(yx),y=argmaxP(yx)其中y’是预测类别,x是模型最不确定的样本,python代码也很简单
def query(self, n):idxs_unlabeled = np.arange(self.n_pool)[~self.idxs_lb]probs = self.predict_prob(self.X[idxs_unlabeled], self.Y[idxs_unlabeled])U = probs.max(1)[0] #拿到最大概率的样本return idxs_unlabeled[U.sort()[1][:n]] #返回

但该方法只考虑了模型预测概率最大但是依旧“可信度”较低的样本,对于那些概率较小的样本,其并未考虑。因此margin sampling出现 x M = a r g m a x P ( y 1 ′ ∣ x ) − P ( y 2 ′ ∣ x ) x_M=argmax P(y_1'|x)-P(y_2'|x) xM=argmaxP(y1x)P(y2x)即预测最大的和第二的概率差值最小的样本

def query(self, n):idxs_unlabeled = np.arange(self.n_pool)[~self.idxs_lb]probs = self.predict_prob(self.X[idxs_unlabeled], self.Y[idxs_unlabeled])probs_sorted, idxs = probs.sort(descending=True)U = probs_sorted[:, 0] - probs_sorted[:,1] #计算差值return idxs_unlabeled[U.sort()[1][:n]]

最后是直接用entropy衡量,即直接信息熵 x H = a r g m a x − ∑ P ( y ∣ x ) l o g P ( y ∣ x ) x_H=argmax -\sum P(y|x)log P(y|x) xH=argmaxP(yx)logP(yx)代码同样也很简单

def query(self, n):idxs_unlabeled = np.arange(self.n_pool)[~self.idxs_lb]probs = self.predict_prob(self.X[idxs_unlabeled], self.Y[idxs_unlabeled])log_probs = torch.log(probs) #只是把prob概率的计算变了而已U = (probs*log_probs).sum(1)return idxs_unlabeled[U.sort()[1][:n]]

下图是三个方法的比较。三角形的三个角即代表三种不同的类别,因此越靠近Corner其“不确定度”越小,越靠近中心其“不确定度”越大,可以看到entropy倾向于较高的uncertainty,而least confident其倾向于较小的uncertainty。
在这里插入图片描述

  • Query-By-Committe。这个是我们开头举例子所用的策略,思路就是模型的集成和投票实现的,对产生疑惑的样本(所有模型争议性最大的样本)发出请求。
  • Expected Model Change。对模型“改变”最大的标记样本是最重要的。通过梯度来衡量 x e g l = a r g m a x ∑ P ( y ∣ x ) ∣ ∣ ∇ l ( L , < x , y > ) x_{egl}=argmax \sum P(y|x)||\nabla l(L, <x,y>) xegl=argmaxP(yx)l(L,<x,y>)即某样本 <x,y>的增加使得模型梯度的改变最大。类似的还有Expected Error Reduction,样本的增加使loss减小最多。Variance Reduction,使variance最小。

主动学习的分类
在这里插入图片描述
上面是介绍模型怎么选择样本去询问,但是他/她从哪里选呢?基于此,可以分为三个类别:

  • membership query synthesis:图中第一行,全由模型自己生成新的样本instance,然后送去打标签。

  • stream-based selective sampling:图中第二行,先从数据流得到一个一个的未标记样本,由模型来决定是否进行标记。这和我们人类获取的信息源方式是一样的,更贴近实际。

  • pool-based sampling:图中第三行,已经有大量的unlabeled data数据在池中,模型可以从池中选择未标记样本进行标记。这个和刚刚介绍的场景是类似的,也是目前最常见的方式。

主动学习与半监督学习的区别
两者都是从未标记数据中选择价值最高的样本,然后补充进到数据集中优化性能。但半监督学习的标签补充往往是自己预测得到,不需要人工参与,而主动学习的特点就是挑选出有价值的样本进行人工更精准的标注。

早期主动学习的缺点

  • 无法处理多分类。这样进行选择的时候很容易受到其他类的干扰。
  • 孤立样本点。一般如果同时考虑样本的代表性和不确定性的话,可以避免这一点。
  • 样本冗余。通过计算样本差异性可以解决。

深度主动学习

  • DL:在高维数据处理以及自动特征提取方面有着强大的学习能力
  • AL:在有效降低标注成本方面也有着巨大的潜力。

因此,一种显而易见的想法是将DL与AL进行结合,这将极大的拓展它们的应用潜力。DAL正是考虑结合二者优势互补的特性而被提出的,相关的研究也被研究人员寄予厚望。尽管AL关于查询策略的研究已经相当丰富,但是想要直接将这种策略应用到深度学习中仍然是相当困难的。这主要是由于:

  • 标签样本的数据不足。主动学习往往只依赖于少量的标记样本数据就可以实现学习和更新模型,而DL往往对数据有很强的贪婪性,经典AL方法所提供的标记训练样本不足以支持传统DL的训练。此外,在主动学习中常用的one by one样本查询方式在深度学习中也是不适用的。
  • 模型不确定性问题。基于不确定性的查询策略是主动学习的一个重要方向。在分类任务当中,尽管深度学习可以使用softmax layer来获得标签上的概率分布,然而事实表明它们过于自信。最终输出的softmax 分数作为置信度度量方法是不可靠的,这种方法的性能甚至会比随机采样的效果更差。
  • 处理管道不一致。AL和DL的处理管道是不一致的。大多数AL算法主要关注于分类器的训练,各种查询策略的很大程度上都是基于固定的特征表示。而在DL中,特征学习和分类器的训练是共同优化的。仅在AL框架中对DL模型进行微调或者将它们视作两个独立的问题可能会引起分歧问题。

针对第一个问题,研究者考虑使用生成网络来进行数据增强或者为高置信度样本分配伪标签等方式来扩充标记训练集。也有研究者考虑在跨AL周期上同时使用标记数据和未标记数据集进行监督训练与半监督训练的结合,也有用GAN进行样本生成的工作。此外,基于启发式的AL查询策略已经被证明在应用于CNN时是无效的。因此,针对经典AL中one-by-one的查询策略,许多研究者聚焦于batch样本的查询策略的改进, 在批量的样本中同时考虑样本的信息量以及多样性。

为了解决深度学习对模型不确定性的忽视,一些研究者借助贝叶斯深度学习来处理主动学习语境下高维但查询数量较少的mini-batch样本,从而有效的缓解了DL模型对输出结果过于自信的问题。

对于处理管道不一致的问题,研究者考虑修改AL和DL的结合框架,使提出的DAL模型尽可能通用,方便可以拓展到各个应用领域。这对DAL的推广有着重要的意义。例如,A将主动学习的思想嵌入深度学习提出了一个与任务无关的架构设计。

以上深度主动学习内容来自2020的综述,感兴趣的朋友可以拜读:https://arxiv.org/pdf/2009.00236.pdf​arxiv.org


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

相关文章

主动学习入门

文章目录 1.介绍1.1 监督学习、半监督学习、非监督学习1.2 主动学习1.2.1 主动学习介绍1.2.2 主动学习与半监督学习异同1.2.3 主动学习流程 2. 基本思想2.1 图示2.2 策略 3. 算法3.1 基于流、基于池3.2 类别3.3 算法(这里只介绍基本的)3.3.1 基于不确定性3.3.2 多样性(一般与不…

主动学习(active learning)

背景 在现实应用场景中&#xff0c;训练一个有效的深度模型依赖大量已标注样本&#xff0c;而准确标注大规模数据往往耗时耗力且代价高昂。为降低模型对数据的依赖&#xff0c;相继提出无监督学习&#xff0c;半监督学习以及弱监督学习等领域的学习方法。在这些方法中&#xf…

主动学习(Active Learning,AL)综述

目录 1. 基本概念2. 基于不确定性的主动学习方法3.基于最近邻和支持向量的分类器的方法3.1 NNClassifier3.2 RBF network Gradient Penalty 4 基于特征空间覆盖的方法5 基于对抗学习的方法5.1 VAAL5.1.1 核心思想5.1.2 网络结构5.1.3 主动学习策略5.1.4 模型特点 5.2 SRAAL5.3…

主动学习(Active Learning) 概述、策略和不确定性度量

主动学习是指对需要标记的数据进行优先排序的过程&#xff0c;这样可以确定哪些数据对训练监督模型产生最大的影响。 主动学习是一种学习算法可以交互式查询用户(teacher 或 oracle)&#xff0c;用真实标签标注新数据点的策略。主动学习的过程也被称为优化实验设计。主动学习的…

主动学习(Active Learning,AL)的理解以及代码流程讲解

为什么要使用主动学习(Active Learning&#xff0c;AL) 针对有监督的学习任务&#xff0c;存在标记成本较为昂贵且标记难以大量获取的问题。 在此问题背景下&#xff0c;主动学习&#xff08;Active Learning, AL&#xff09;尝试通过选择性的标记较少数据而训练出表现较好的模…

主动学习(Active learning)简介

文章目录 Labeling faster vs. labeling smarter1. 什么是主动学习&#xff1f;2. 主动学习如何运行&#xff1f;2.1 Stream-based Active Learning2.2 Pool-based Active Learning2.3 Membership Query Synthesis 3. 主动学习与强化学习的不同&#xff1f;4. 不确定性度量1&am…

哪本书适合推荐给 Java 初学者?

之前写过一篇文章叫《假如时光倒流&#xff0c; 我会这么学习Java》&#xff0c; 希望对你有帮助&#xff1a; ----------------------------------------------------------------------- 回头看看&#xff0c; 我进入Java 领域已经快15个年头了&#xff0c; 虽然学的也一般…

Java程序员必看的20本书,从入门到精通!收藏

推荐的20本学习 Java 必看书&#xff0c;记得点收藏哈~ 基础核心 1、《Java核心技术卷2&#xff1a;高级特性&#xff08;原书第9版&#xff09;》 豆瓣评分: 8.7 推荐指数&#xff1a;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; 2、《图解 HTTP》 讲漫画一样的…

Java入门到进阶推荐书籍

Java学习中推荐的书籍 第一本&#xff0c;《Head First JAVA》 小白学习JAVA的入门书籍&#xff0c;这本书和其他专业书籍相比多了一些趣味性&#xff0c;让人能够读下去&#xff0c;知识点比较全面&#xff0c;但是也没有讲的很深。 第二本&#xff0c;《JAVA核心技术卷1》 …

【书籍学习】史上最全的Java进阶书籍推荐

学习Java&#xff0c;书籍是必不可少的学习工具之一&#xff0c;尤其是对于自学者而言。废话不多说&#xff0c;下边就给大家推荐一些Java进阶的好书。 第一部分&#xff1a;Java语言篇 1.《Java编程规范》 适合对象&#xff1a;初级、中级 介绍&#xff1a;这本书的作者是被…

java 入门书籍(java7)

一、Java从入门到精通 《Java从入门到精通(第3版)》从初学者角度出发&#xff0c;通过通俗易懂的语言、丰富多彩的实例&#xff0c;详细介绍了使用Java语言进行程序开发需要掌握的知识。 《Java从入门到精通(第3版)》编辑推荐&#xff1a;“软件开发视频大讲堂”丛书系清华社…

Java从入门到进阶书单推荐|必收藏

关于Java从入门到进阶的书单推荐 一、入门基础类 如果是0基础学习&#xff0c;入门阶段千万不要选择太难的书&#xff0c;首先太难的你也看不懂&#xff0c;而且会打击信心&#xff0c;所以建议选择通俗易懂的就行&#xff0c;先领进门&#xff08;注意&#xff1a;基础一定要…

零基础学Java有哪些必看书?推荐这5本

零基础学Java初学者&#xff0c;想要入门&#xff0c;应该多看一些关于Java的书&#xff0c;先充实理论基础。然而Java的技术知识是海量的&#xff0c;市面上关于Java的书令人眼花缭乱&#xff0c;零基础的小白完全不知道该看哪本书。那么&#xff0c;零基础学Java有哪些必看书…

MySQL启动1053错误之解决方法

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。https://blog.csdn.net/qq_42680327 创建mysql服务时&#xff0c;系统已提示创建服务成功&#xff0c;但是net start mysql命令提示启动失败&#xff0c;并在services.msc中提示1053错误 解决办法1…

解决phpstudy mysql启动不了

之前的电脑上下了mysql&#xff0c;phpstudy自带一个mysql&#xff0c;目测是本来的mysql进程占用端口。 1、按winR键&#xff0c;输入 services.msc 找到mysql服务,关闭 2、再以管理员身份运行 一定要用管理员身份运行&#xff0c;我的问题这种方法解决了&#xff0c;其他的…

phpstudy mysql启动不了,问题已解决

首先讲一下我遇到的问题&#xff0c;安装好phpStudy v8.1之后&#xff0c;MySQL无法无法启动&#xff0c;出现错误的原因大概是phpStudy与原先下载的MySQL冲突了&#xff0c;随后在网上找了一些教程&#xff0c;进行了一系列操作&#xff1a;&#xff08;有些朋友成功了&#x…

MySQL启动与关闭的3种方式

MySQL启动与关闭的3种方式 在这里大概记述一下MySQL最常用的3种启动与关闭的方式 文章目录 MySQL启动与关闭的3种方式一、第一种方式二、第二种方式三、第三种方式总结 一、第一种方式 直接搜索“服务”或者搜索“service”&#xff0c;再点击服务 找到MySQL57&#xff0c;…

Linux查看mysql是否启动+mysql启动(全)

整理一下Linux下启动mysql服务的命令。 目录 1.使用命令 # service mysqld status 2、使用命令# ps aux|grep mysqld 3、使用命令# pidof mysqld 4、使用命令# ps -ef|grep mysqld 5、使用# systemctl list-unit-files 命令&#xff0c;q退出 一、查看mysql是否启动——…

MySQL启动报错:mysql拒绝访问错误5

使用命令net start mysql启动数据库服务时候&#xff0c;出现如下错误&#xff1a; 原因是当前用户的权限过低导致的。 解决mysql拒绝访问错误5 1、win x 打开一个面板如下&#xff0c;选择命令提示符&#xff08;管理员&#xff09;【 解决办法&#xff1a;在系统搜索cmd&…

Mysql启动之报错:The server quit without updating PID file

一、问题描述 某次一线报某业务网站门户登录验证码获取失败&#xff1b;因该验证码是代码里通过验证码函数实现存入数据库&#xff0c;登录时再读取数据库里的验证码来实现包包里破解登录的&#xff1b;因此本次故障极大可能出现在数据库服务器故障。类似报错信息如下&#xff…