Learning loss for active learning
这篇文章idea虽然很fancy,还是CVPR oral,但是在社区讨论中评价并不是很好,效果难以复现。
Motivation
主动学习的query方法大多都是为了特定的目标任务精心设计,泛化性差;要么就是计算效率差,主动学习作为一个框架应该是任务无偏的。
方法
模型是任何任务的模型都可以,如图(a)只需要附加一个Loss prediction module,这个Loss prediction module的输入是“主模型”内部的每一层的输出。因此实现了任务无偏。
训练整个模型用的是有标签数据,无标签数据是在训练更新参数之后传入模型输出Loss prediction,然后根据Loss prediction的大小,选出top-K个查询。
Loss Prediction Module
具体来看Loss prediction module是怎么实现的。
Loss prediction module的目标有两个:1、设计具体任务相关的不确定规则的工程量最小化。2、训练该模块的计算代价最小化。因此该模块有两个特点:1、比主任务模型小很多,2、和主任务模型同步学习,不需要额外的步骤。
Loss prediction module的结构如上图所示,主任务模型中的某些层的输出作为module的输入,分别经过GAP(global average pooling)、FC、ReLU,这样可以将特征降维到固定的维度(128),再将所有的特征链接起来,输入到一个全连接层中,得到Loss prediction。
作者提到,将这个模块做的更大更深表现差别不大。
Learning Loss
Loss Prediction Module和主任务模型一起在有标签数据上训练。
对于主动学习过程中第 T T T步训练阶段,有有标签数据集 L ( T + 1 ) K T L_{(T+1) K}^{T} L(T+1)KT和无标签数据集 U N − ( T + 1 ) K T U_{N-(T+1) K}^{T} UN−(T+1)KT,我们在这一步中的训练目标是为模型训练出目标模型和损失预测模块: { Θ target T , Θ loss T } \left\{\Theta_{\text {target}}^{T}, \Theta_{\text {loss}}^{T}\right\} { ΘtargetT,ΘlossT}。
整体Loss的计算过程如上图所示,对于任何一个训练数据 x ∈ L ( T + 1 ) K T x \in L_{(T+1) K}^{T} x∈L(T+1)KT,可以得到目标模型的预测值 y ^ \hat{y} y^,结合真实标签 y y y可以得到Target loss值 l = L t a r g e t ( y ^ , y ) l=L_{t a r g e t}(\hat{y}, y) l=Ltarget(y^,y);Loss Prediction Module得到预测损失值 l ^ \hat{l}