【CVPR2020 Oral】只需一行代码就可提升迁移性能

2020-06-10 16:28:43 浏览数 (1)

作者:Hassassin 知乎链接:https://zhuanlan.zhihu.com/p/121507249 本文仅供学习参考,如有侵权,请联系删除!

只需要一行代码,立刻提升迁移性能。

这就是我们出的新方法:批量核范数最大化(Batch Nuclear-norm Maximization)。

本文中我们通过理论推导和分析,发现类别预测的判别性与多样性同时指向批量响应矩阵的核范数,这样就可以最大化批量核范数来提高迁移问题中目标域的性能。

在迁移任务中,目标域由于没有标签,常常导致分界面附近混淆较多的数据。而我们基于这一现象,分析了批量类别响应组成的批量矩阵A,并希望从判别性和迁移性进行优化。

判别性

所谓判别性,指的是预测类别的过程是否坚定。比如对于二类问题的响应

  • [0.9,0.1]判别性较高,
  • [0.6,0.4]判别性较低。

常见的方法采用最小化熵来得到较高的判别性。我们发现矩阵A的F范数与熵有着相反的单调性,从而可以通过最大化A的F范数来提升判别性。

多样性

多样性可以近似表达为批量矩阵中预测的类别数量,即预测的类别数量多则响应多样性大。

考虑不同类别响应的线性相关性,如果两个响应属于不同类别,那么响应会差别较大线性无关,如果属于相同类别则近似线性相关。

  • [0.9,0.1]与[0.1,0.9]线性无关,
  • [0.9,0.1]与[0.8,0.2]近似线性相关。

那么预测类别数也就是矩阵中最大的线性无关向量数,即矩阵的秩。

BNM

核范数是矩阵奇异值的和,在数学上有两点结论

  • 核范数与F范数相互限制界限,
  • 核范数是矩阵秩的凸近似。

所以类别预测的判别性与多样性同时指向矩阵的核范数,我们可以最大化矩阵核范数(BNM)来提升预测的性能。

比如上图中,如果使用熵最小化(EntMin)和BNM来优化,当熵相同的时候,使用BNM优化更容易使得核范数更大,从而正确预测绵羊的样本(保障类别比重较少的数据有利于提高整体的多样性)

实现

在常用的框架Pytorch与Tensorflow中,均可通过一行代码实现BNM

Pytorch:

代码语言:javascript复制
L_BNM = -torch.norm(A,'nuc')

Tensorflow:

代码语言:javascript复制
L_BNM = -tf.reduce_sum(tf.svd(A, compute_uv=False))

应用

我们将BNM应用到三个标签不足的场景中,半监督学习,领域适应和开放域物体识别。实验表明,在半监督学习中可以提升现有方法,在领域适应中BNM约束明显优于EntMin,并且单一的BNM约束可以达到与现有方法相近的性能,如下图:

在开放域物体识别中单一的BNM约束超过有着冗杂损失函数的UODTN,达到SOTA性能,如下图:

同时在开放域物体识别中,我们统计了随机采样的批量响应中未知类所占比例,如图:

我们发现BNM确实可以保持未知类所占比例,从而保障整体预测的类别数量与准确性,从而保持多样性。

值得一提的是,我们的方法主要针对的是缺少标签场景下分界面附近数据密度较大的问题,对于迁移相关的任务有着较为普遍的改善价值。

传送门

  • 论文地址:https://arxiv.org/pdf/2003.12237.pdf
  • 代码地址:https://github.com/cuishuhao/BNM

0 人点赞