简介
这是一篇来自2021年CVPR的论文。文章的主要贡献就是通过给每个样本加权,来消除掉虚假关联,使得模型更加关注与分类结果有因果关系的discriminative features。举一个简单的例子,下图是传统的resnet18网络和作者的stableNet对图片中不同特征的关注差异,stableNet会更关注狗本身的特征,它是与标签dog有因果关系的特征,而resnet的关注点还会有背景,如水,它把水也作为dog的特征(因为使用的训练集大部分是以水为背景的),而文章的目标就是消除这样的虚假关联。
那么文章的题目叫做for out-of-distribution generalization,它主要是应用在泛化任务中,即训练数据集和测试数据集分布有迁移shift。分布发生转移,与标签有因果关系的特征是不会变的,如下图中狗的特征,造成泛化任务识别准确率降低的原因是不同分布伪相关特征confounder的不同,如背景水。这两类特征都会对预测结果产生影响,并且它们相互纠缠,作者提出的一系列方法就是让这两类特征独立,然后让网络学习到哪些特征与预测结果是因果关系以及它们对结果影响的大小,那么无论分布怎么转移,网络都能做出稳定预测了。强烈建议先看一下文末视频,肯定要比我讲得清楚。
网络架构
下图是论文中的网络结构图。结构图下面一路就是常规的分类网络,可以是resnet18可以是densenet都可以,那么它与常见的分类网络唯一的不同之处在于上面一路为每个样本加权,先通过RFF方法增广Feature Map,然后通过LSWD一套算法为每个样本学习一个权重,这个权重就加在网络输出的预测和标签的交叉熵上,最后对每个样本的交叉熵累加作为损失函数。(常规损失函数每个样本交叉熵的权值可以看作是1)
关键部分
样本加权
要消除不同特征之间的关联,为什么要给每个样本加权?我最初也有这样的疑惑。按照作者的解释,确实应该给特征向量的每一维都加权,每一个样本也要加权,才能保证把特征的任一维作为‘实验组’,其他‘对照组’服从相同分布,但这样一来会有 k ∗ N k*N k∗N个参数( k k k为特征维度, N N N为样本数),计算开销太大,其次没有相应理论支撑。于是作者做了一个让步,只对样本加权,实验证明效果也挺好,所以可能就这样了。。。
Independence testing statistics
这就是使用核方法为两个变量的独立性提供一种度量,后面把这种度量发展成为了文章的损失函数。根据作者给出的参考文献顺藤摸瓜,就会发现这类方法研究内容也比较相似,发表时间大多在04-08年,比较理论比较数学,暂时不展开了,后面必要再补充。那么大概的过程是这样的:参考文献【14】最先给出了互协方差因子的定义: < h A , Σ A B ⋅ h B > = E A B [ h A ( A ) ⋅ h B ( B ) ] − E A [ h A ( A ) ] ⋅ E B [ h B ( B ) ] <h_A,\Sigma_{AB}\cdot h_B>=E_{AB}[h_A(A)\cdot h_B(B)]-E_A[h_A(A)]\cdot E_B[h_B(B)] <hA,ΣAB⋅hB>=EAB[hA(A)⋅hB(B)]−EA[hA