DecAug 论文阅读

609 阅读4分钟

0.论文信息

文章概述

  这篇论文主要讨论了一种新的方法,名为DecAug,它通过分解特征表示和语义增强来实现对分布偏移的泛化。具体来说,DecAug首先将输入数据的高级表示分解为两种类型的特征:类别相关特征和上下文相关特征。这样做是为了同时处理两种不同类型的分布偏移。然后,DecAug在上下文相关特征上执行基于梯度的语义增强,以消除此类分布偏移。

1.介绍

  在这个章节中 DecAug 将域的偏移进行了划分并分为如下两类

  • 关联偏移 (Correlation Shift): 这种偏移是指标签和环境之间存在相关性,并且这种关系在不同的环境中会发生变化。例如,在训练集中,数字5通常是绿色的,而数字4通常是红色的。然而,在测试集中,数字5倾向于是红色的,而数字4倾向于是绿色的。如果一个模型在训练时学习了“绿色”预测标签5,那么在测试时,它就会受到关联偏移的影响。

  • 多样性偏移 (Diversity Shift): 这种偏移是指来自不同领域的数据具有显著不同的风格。例如,在PACS数据集中,数据来自四个不同的领域:照片、艺术绘画、卡通和素描。在不同的领域中,数据的风格有显著的差异。通常,将一个领域的数据作为测试集,剩下的三个领域的数据作为训练集。在训练集上训练的模型在测试集上可能会受到多样性偏移的影响。

  以下通过图例进行说明。

图 1. 不同 OOD 研究领域数据集之间的二维 OOD 转换的图示,包括 Colored MNIST、PACS 和 NICO。大量实验表明,许多 OOD 方法只能处理 OOD 偏移的一个维度。

图 2. PACS 数据集上不同 domain 的图片,不同的 domain 之间存在着分布多样性偏移。

图 3. NICO 数据集上不同 domain 的图片,不同的 domain 之间存在着分布关联偏移。

2.方法论

图 4. DecAug 的概述 : 主干提取的输入特征 zz 通过正交正则化分解为与类别相关的和上下文相关的特征。然后在特征空间中对基于梯度的增强进行预训练以获得语义增强样本。

  下面给出 DecAug 算法的整体算法,具体技术细节在下面进行介绍。

2.1.特征分解

  如上图所示,DecAug 首先进行的任务是特征分解 : 即希望将特征分解为与类别相关的特征和上下文相关的特征。首先将输入数据的高级表示映射到特征空间,并将其分解为两个分支 : 类别分支上下文分支。具体来说,对于输入图像 xix_i,类别标签 yiy_i 和上下文标签 cic_i,让 zi=gθ(xi)z_i = g_{\theta}(x_i) 是由主干网络 gθg_{\theta} 提取的特征。对于类别分支,ziz_i 被类别特征提取器 fθ1f_{\theta^1} 分解为 zi1=fθ1(zi)z_i^1 = f_{\theta^1}(z_i),然后由分类器 hϕ1(zi1)h_{\phi}^1(z_i^1) 预测类别标签。对于上下文分支,ziz_i 被上下文特征提取器 fθ2f_{\theta^2} 分解为 zi2=fθ2(zi)z_i^2 = f_{\theta^2}(z_i),然后由分类器 hϕ2(zi2)h_{\phi^2}(z_i^2) 预测上下文标签。

  为了更好地将特征分解为类别相关特征和上下文相关特征,强制使类别损失 (hϕ1fθ1(zi),yi)\ell(h_{\phi^1} \circ f_{\theta^1}(z_i), y_i) 的梯度与上下文损失 (hϕ2fθ2(zi),ci)\ell(h_{\phi^2} \circ f_{\theta^2}(z_i), c_i) 的梯度相互正交,这样,改变类别损失最快的方向不会从 ziz_i 改变上下文损失,反之亦然。具体来说,让 Gi1(θ1,ϕ1)=zi(hϕ1fθ1(zi),yi)\mathcal{G}_i^1(\theta^1, \phi^1) = \nabla_{z_i}\ell(h_{\phi^1} \circ f_{\theta^1}(z_i), y_i)Gi2(θ2,ϕ2)=zi(hϕ2fθ2(zi),ci)\mathcal{G}_i^2(\theta^2, \phi^2) = \nabla_{z_i}\ell(h_{\phi^2} \circ f_{\theta^2}(z_i), c_i) 分别是类别和上下文损失关于 ziz_i 的梯度。为了确保正交性,最小化以下损失:

Liorth (θ1,ϕ1,θ2,ϕ2)=(Gi1(θ1,ϕ1)Gi1(θ1,ϕ1)Gi2(θ2,ϕ2)Gi2(θ2,ϕ2))2(1)\mathcal{L}_i^{\text {orth }}\left(\theta^1, \phi^1, \theta^2, \phi^2\right)=\left(\frac{\mathcal{G}_i^1\left(\theta^1, \phi^1\right)}{\left\|\mathcal{G}_i^1\left(\theta^1, \phi^1\right)\right\|} \cdot \frac{\mathcal{G}_i^2\left(\theta^2, \phi^2\right)}{\left\|\mathcal{G}_i^2\left(\theta^2, \phi^2\right)\right\|}\right)^2\tag{1}

2.2.语义增强

  首先计算上下文损失相对于 z2iz_{2i} 的梯度 Giaug=zi2(hϕ2(zi2),ci)\mathcal{G}^{\text{aug}}_i = \nabla_{z_i^2} \ell(h_{\phi^2}(z_i^2), c_i)。然后,随机从 [0,1][0, 1] 中采样 αi\alpha_i,并按照以下方式增强上下文相关特征 :

z~i2=zi2+αiϵGiaugGialg(2)\tilde{z}_i^2=z_i^2+\alpha_i \cdot \epsilon \cdot \frac{\mathcal{G}_i^{\mathrm{aug}}}{\left\|\mathcal{G}_i^{\mathrm{alg}}\right\|}\tag{2}

  其中 ϵ\epsilon 是一个超参数,决定了增强向量的最大长度。这种基于梯度的语义增强方法可以有效地改善模型对于上下文相关特征的处理,从而提高模型的泛化能力。

  增强上下文相关特征后,将 z~i2\tilde{z}_i^2 与类别相关特征 zi1z_i^1 连接起来进行最终的预测 hϕ([zi1,z~i2])h_{\phi}([z_i^1, \tilde{z}_i^2]),其中 hϕh_{\phi} 是一个分类器,[zi1,z~i2][z_i^1, \tilde{z}_i^2] 是将两个特征拼接起来。仍然使用标准的交叉熵损失 Liconcat(θ,θ1,θ2,ϕ)=(hϕ([zi1,z~i2]),yi)L^{\text{concat}}_i(\theta, \theta^1, \theta^2, \phi) = \ell(h_{\phi}([z_i^1, \tilde{z}_i^2]), y_i) 来优化相应的参数。最终的损失函数定义为 :

Li(θ,θ1,ϕ1,θ2,ϕ2,ϕ)=Liconcat (θ,θ1,θ2,ϕ)+λ1Li1(θ,θ1,ϕ1)+λ2Li2(θ,θ2,ϕ2)+λorth Liorth (θ1,ϕ1,θ2,ϕ2)(3)\begin{aligned} \mathcal{L}_i\left(\theta, \theta^1, \phi^1, \theta^2, \phi^2, \phi\right) & =\mathcal{L}_i^{\text {concat }}\left(\theta, \theta^1, \theta^2, \phi\right) \\ & +\lambda^1 \cdot \mathcal{L}_i^1\left(\theta, \theta^1, \phi^1\right)+\lambda^2 \cdot \mathcal{L}_i^2\left(\theta, \theta^2, \phi^2\right) \\ & +\lambda^{\text {orth }} \cdot \mathcal{L}_i^{\text {orth }}\left(\theta^1, \phi^1, \theta^2, \phi^2\right) \end{aligned}\tag{3}

3.实验

  略

4.总结

  这篇工作很久之前便听别人提起过,最近希望重新了解更多具体操作细节便细读了一遍。总的来说思路还是比较直接明了的,与我所想的不一样的是在输入数据的同时也输入了相应的上下文标签,即本质还是借助于上下文标签来进行性能增强 (但是 PACS 这种数据集的 domain 我觉得更倾向于是分布,虽然和上下文标签也有较强相关性)。简单来说就是将向量拆分为主体特征与上下文标签特征,然后对于上下文标签特征进行处理,更加突显主体特征,很有意思的一个思路。