Deep Active Learning(深度主动学习)

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值