[论文阅读] Learning Loss for Active Learning

论文地址:https://arxiv.org/abs/1905.03677
发表于:CVPR’19

Abstract

深度神经网络的性能随着更多的标注数据而提高。问题是用于标注的预算是有限的。解决这个问题的方法之一是主动学习,即模型要求人工对其认为不确定的数据进行标注。最近提出了多种方法来将主动学习应用于深度网络,但其中大多数方法要么是针对其目标任务设计的,要么是对大型网络来说计算效率低下。在本文中,我们提出了一种新的主动学习方法,这种方法简单并且与任务无关,还能有效地与深度网络一起工作。我们在目标网络上附加了一个小的带参数模块,名为"损失预测模块",并学习它来预测未标注的输入的目标损失。然后,这个模块可以提醒目标模型有可能产生错误预测的样本。这种方法是不分任务的,因为无论目标任务如何,网络都是从单一损失中学习的。我们通过图像分类、目标检测和人体姿态估计,用最近的网络架构严格验证了我们的方法。结果表明,我们的方法在这些任务中始终优于以前的方法。

I. Motivation

本文的思路非常有意思。对于主动学习来说,选择的是有价值的样本。而在理想情况下,最简单(并且也最有效)的方法就是拿预测结果与真值比较,如果模型把这个样本给预测错了,那自然该样本就有价值;问题在于实际上是没有标注的。

本文的做法是,既然我们要的只是预测结果与真实结果的差距,那么直接去预测这个差距本身(loss)就好,此即为标题所提到的"Learning Loss":
在这里插入图片描述
从更宏观的角度讲,以前我们得设计各种各样或启发式或非启发式的算法来判断一个样本的信息量,现在直接单独设计一个小的深度网络模块就可以搞定了。

接下来将介绍损失预测模块的设计。

II. Loss Prediction Module

在这里插入图片描述
单纯从结构上来看,“非常简单”,总的思想在于把模型中间层的特征给抽出来进行进一步处理。具体来说,对于中间特征图,利用全局平均池化(GAP)提取其核心特征,然后再通过FC进行学习,最后将各处理后的中间特征concat后经FC得到最终的预测分数。

真正的难点在于拿什么东西去监督这个损失预测模块。

III. Learning Loss

这一节我们讲上节提到的监督问题:
在这里插入图片描述
首先是"拿什么监督"。其实这也非常直观,因为我们训练的时候是有真实的Loss的,那么这个Loss就是真值。现在要解决的是最后一个问题,怎么去设计"Loss的损失函数"。

最简单的方式是上MSE。但是由于随着训练的进行,Loss的真值本身就会快速下降,导致梯度剧烈波动,此时模型学到的实际上是Loss的波动,因此不能直接用。具体来说,本文的loss如下: L l o s s ( l p ^ , l p ) = max ⁡ ( 0 , − A ( l i , l j ) ⋅ ( l ^ i − l ^ j ) + ξ )  s.t.  A ( l i , l j ) = { + 1 ,  if  l i > l j − 1 ,  otherwise  \begin{aligned} L_{\mathrm{loss}}\left(\hat{l^{p}}, l^{p}\right)=\max \left(0,-\mathbb{A}\left(l_{i}, l_{j}\right) \cdot\left(\hat{l}_{i}-\hat{l}_{j}\right)+\xi\right) \\ \text { s.t. } \quad \mathbb{A}\left(l_{i}, l_{j}\right)= \begin{cases}+1, & \text { if } l_{i}>l_{j} \\ -1, & \text { otherwise }\end{cases} \end{aligned} Lloss(lp^,lp)=max(0,A(li,lj)(l^il^j)+ξ) s.t. A(li,lj)={ +1,1, if li>lj otherwise  其思路略微复杂,感兴趣的读者可以阅读原文相应部分进行理解。

猜你喜欢

转载自blog.csdn.net/qq_40714949/article/details/120976929#comments_20988940