Towards Unsupervised Domain Generalization 论文阅读

473 阅读6分钟

0.论文信息

1.文章提出的背景

传统的域泛化方法都需要标签,而自监督学习中的对比学习不能很好地处理域泛化的情况。

2.文章中使用的方法

2.1 无监督的域泛化

X\mathcal{X} 为特征空间,Y\mathcal{Y}为类别标签空间,D\mathcal{D}为域标签空间。因此,我们使用 X,Y,DX,Y,D 表示在 X,Y,D\mathcal{X},\mathcal{Y},\mathcal{D} 中的值的随机变量。一个数据集S包含NSN_S个样本{Xi,yi,di}i=1NS\left\{X_i,y_i,d_i\right\}_{i=1}^{N_S}。令 PXS,PYS,PDSP_X^S,P_Y^S,P_D^S 表征 PSP^S 在 X,Y,D 上各自的边际分布。令 Supp()\text{Supp}(\cdot) 表征分布的支集 (在数学中,一个定义在集合 X 上的实值函数 f 的支撑集,或简称支集,是指 X 的一个子集,满足 f 恰好在这个子集上非0)。

当类别标签可使用而其他标签不可使用时,我们称这个数据集是标注的。我们旨在学习一个可以推广到任何未知测试分布的数据集的泛化模型。从主体讲,问题可进行如下定义:

问题2.1 (无监督的域泛化 UDG)

SUL={Xi,di}i=1NULS_{UL}=\left\{X_i,d_i\right\}_{i=1}^{N_{UL}} 是含有 NULN_{UL} 个服从 PSULP^{S_{UL}} 分布的无标签数据集,同时 SL={Xi,yi}i=1NLS_L=\left\{X_i,y_i\right\}_{i=1}^{N_L} 是含有 NLN_{L} 个服从 PSLP^{S_{L}} 分布的有标签数据集。同时存在服从未知分布 PStestP^{S_{test}} 的测试集满足

Supp(PDStest)(Supp(PDSUL)Supp(PDSL))=Supp(PYStest)=Supp(PYSL) \text{Supp}\left(P_D^{S_{test}}\right)\cap\left(\text{Supp}\left(P_D^{S_{UL}}\right)\cup \text{Supp}\left(P_D^{S_{L}}\right)\right)=\emptyset \\ \text{Supp}\left(P_Y^{S_{test}}\right)=\text{Supp}\left(P_Y^{S_{L}}\right)

其中式子 (1) 表征训练集与测试集分布之间的差异: 希望其不具有重叠,式子 (2) 则表征不管在训练集还是测试集中,标签都具有相同的含义。在给出 SUL,SLS_{UL},S_L 和损失函数 l(X,Y;θ)\mathcal{l}(X,Y;\theta),我们希望能够学习得到模型中的参数 θ\theta^* 使得其在测试集上 PStestP^{S_{test}} 有着最好的性能表现。

θ=arg minθE(X,Y,D)PStest[l(X,Y;θ)] \theta^*=\argmin_{\theta}\mathbb{E}_{(X,Y,D)\sim P^{S_{test}}}\left[\mathcal{l}(X,Y;\theta)\right]

UDG 设定

依据于无标记的 PSULP^{S_{UL}} 数据和有标记的 PSLP^{S_L} 数据,我们专门描述了支持无监督域概括 (UDG) 的所有可能的4个设定: 全相关性域相关性类别相关性非相关性

全相关性

当数据进行部分而随机的标记时,未标记的数据与标记的数据是同源的,因此在类别和域空间之间会有重叠。一般而言,Supp(PDSUL)=Supp(PDSL)\text{Supp}(P_D^{S_{UL}})=\text{Supp}(P_D^{S_{L}})Supp(PYSUL)=Supp(PYSL)\text{Supp}(P_Y^{S_{UL}})=\text{Supp}(P_Y^{S_{L}})

域相关性

一个更具挑战性但常见的设定是,未标记和标记的数据共享相同的域空间,而未标记和标记数据的类别空间之间没有重叠。Supp(PDSUL)=Supp(PDSL)\text{Supp}(P_D^{S_{UL}})=\text{Supp}(P_D^{S_{L}})Supp(PDSUL)Supp(PDSL)=\text{Supp}(P_D^{S_{UL}})\cap\text{Supp}(P_D^{S_{L}})=\emptyset

类别相关性

类似于域相关性设定,此设定假定未标记和标记的数据共享相同的类别空间,而未标记和标记数据的域空间之间没有重叠。Supp(PDSUL)Supp(PDSL)=\text{Supp}(P_D^{S_{UL}})\cap\text{Supp}(P_D^{S_{L}})=\emptysetSupp(PDSUL)=Supp(PDSL)\text{Supp}(P_D^{S_{UL}})=\text{Supp}(P_D^{S_{L}})

非相关性

当来自同一源(域)作为标记数据的额外数据不可用时,未标记的数据和标记数据的类别和域空间之间可能没有重叠。Supp(PDSUL)Supp(PDSL)=\text{Supp}(P_D^{S_{UL}})\cap\text{Supp}(P_D^{S_{L}})=\emptysettextSupp(PDSUL)Supp(PDSL)=text{Supp}(P_D^{S_{UL}})\cap\text{Supp}(P_D^{S_{L}})=\emptyset

2.2 域无关的无监督学习

现引入域感知表示学习 (Domain-Aware Representation Learn-ING DARLING 这都是什么鬼名字) 算法用来进行无监督域的概括,并提前对其进行预训练。

SUL={Xn,dn}n=1NS_{UL}=\left\{X_n,d_n\right\}_{n=1}^N 是包含域标签的 N 张无类别标签的数据集,传统的对比学习可以将其表示为

P(YX)=n=1Np(ynXn)=n=1Nexp(vynTfn/τ)i=1nexp(viTfn/τ) P(Y|X)=\prod_{n=1}^Np(y_n|X_n)=\prod_{n=1}^N\frac{\exp(\vec{v}_{y_n}^T\vec{f}_n/\tau)}{\sum_{i=1}^n\exp(\vec{v}_i^T\vec{f}_n/\tau)}

这其中每个数据点 XnX_n 分配了独特的代理标签 yn{1,2,...,N}y_n\in\{1,2,...,N\}vyn\vec{v}_{y_n},同时通过将图像 XnX_n 传递到两个编码器网络 fθ,fθf_\theta,f_{\theta'} 来给出 vyn\vec{v}_{y_n}fn\vec{f}_nτ\tau 是控制浓度水平的温度超参数。

等式5给出的条件概率4造成了标准的对比学习的损失值。特别是,MoCo 通过如下的负样本学习条件概率4的InfoNCE 损失值 (式子5为 InfoNCE loss 的计算公式,式子6为计算结果,其中5式子中 i 为一个batch中的样本,S()为相似函数,分子是正例对的相似度,分母是正例对+所有负例对的相似度)。

LInfoNCE(i)=log(eS(zi,zi+)/τj=0keS(zi,zj)/τ)L(θ,θ)=1Nn=1Nlogexp(vnTfn/τ)exp(vnTfn/τ)+k=1Kexp(qkTfn/τ) \mathcal{L}_{InfoNCE}(i)=-\log\left(\frac{e^{S(z_i,z_i^+)/\tau}}{\sum_{j=0}^ke^{S(z_i,z_j)/\tau}}\right) \\ \mathcal{L}(\theta,\theta')=-\frac{1}{N}\sum_{n=1}^N\log\frac{\exp\left(\vec{v}_n^T\vec{f}_n/\tau\right)}{\exp\left(\vec{v}_n^T\vec{f}_n/\tau\right)+\sum_{k=1}^K\exp\left(\vec{q}_k^T\vec{f}_n/\tau\right)}

这里,qRK×d\vec{q}\in\mathbb{R}^{K\times d} 是一个存储了 fθf_{\theta'} 中大小为K的先前嵌入的负样本队列。

然而,传统的对比学习无法对于域信息进行建模。特别地,分类器 P(YX)P(Y|\mathbf{X}) 在不同域标签 DD 下可能会不一致,进而导致模型的错误分类。

接下来,我们给出两个条件概率的具体形式,则 y 的生成

P(ynXn,D=d)=exp(vyn,dTfn/τ)iNdexp(vi,dTfn/τ)=exp(vynTfn/τ)iNdexp(viTfn/τ)P(y_n|X_n,D=d)=\frac{\exp\left(\mathbf{v}_{y_n,d}^T\mathbf{f}_n/\tau\right)}{\sum_{i\in N_d}\exp\left(\mathbf{v}_{i,d}^T\mathbf{f}_n/\tau\right)}=\frac{\exp\left(\mathbf{v}_{y_n}^T\mathbf{f}_n/\tau\right)}{\sum_{i\in N_d}\exp\left(\mathbf{v}_{i}^T\mathbf{f}_n/\tau\right)}

其中 NdN_d 是属于域d的训练样本指标集合,因为我们进一步假设字典向量 vi,dv_{i,d} 是与域无关的,即 vi,d=viv_{i,d}=v_i

D的生成过程如下:

P(D=dXn)=softmax(h(Xn;Φ))d P(D=d|X_n)=\text{softmax}(h(X_n;\Phi))_d

其中h可以表示为一个可学习的卷积神经网络,参数为 Φ\Phi。如图2所示,编码器浅层的特征输出被送入一堆额外的卷积网络和相似度预测器中,学习输入的域相似度。我们采用交叉熵作为相似性损失。

因此,将式 (7)(8) 合并即有

P(ynXn)=EDP(DXn)P(ynXn,D)=dP(D=dXn)P(ynXn,D=d)  =dwn,dexp(vynTfn/τ)iNdexp(viTfn/τ)  \begin{aligned} P(y_n|X_n)=\mathbb{E}_{D\sim P(D|X_n)}P(y_n|X_n,D)=\sum_dP(D=d|X_n)P(y_n|X_n,D=d)\ \ \\ =\sum_dw_{n,d}\frac{\exp\left(\mathbf{v}_{y_n}^T\mathbf{f}_n/\tau\right)}{\sum_{i\in N_d}\exp\left(\mathbf{v}_i^T\mathbf{f}_n/\tau\right)}\ \ \end{aligned}

这里 wn,d=P(D=dXn)w_{n,d}=P(D=d|X_n) 由式子 (8) 给出。注意到 wn,dw_{n,d} 意味着每个样本的域之间的相似性,因此式子 (9) 通过重新加权不同域的损失来消除域的相关性。

我们保持 K 个负样本 q1,q2,...,qKq_1,q_2,...,q_K,并将它们依据于域分成 D 部分 Q1,Q2,...,QDQ_1,Q_2,...,Q_D。设 ek[D]e_k\in[D] 表示负样本 qkq_k 的定义域。则 Qd(d[D])Q_d(\forall d\in[D]) 可以写成 {qkek=d}\{q_k|e_k = d\}。因此,类似于式 (6),我们将损失函数写成:

L(θ,θ)=1Nn=1Nlogdwn,dexp(vnTfn/τ)exp(vnTfn/τ)+qQdexp(qTfn/τ) \mathcal{L}(\theta,\theta')=-\frac{1}{N}\sum_{n=1}^N\log\sum_d\frac{w_{n,d}\cdot\exp\left(\mathbf{v}_n^T\mathbf{f}_n/\tau\right)}{\exp\left(\mathbf{v}_n^T\mathbf{f}_n/\tau\right)+\sum_{q\in Q_d}\exp\left(\mathbf{q}^T\mathbf{f}_n/\tau\right)}

在优化的过程中,我们首先通过式子 (8) 学习 Φ\Phi。在一个给定的 Φ\Phi 下,我们通过最小化式子 (11) 来优化 θ\theta 直到收敛。

2.3 域特异性的负样本

我们提出了一种具有对抗性更新方式的域特定负样本生成机制,以密切跟踪每个域表示的变化。我们的目标可以认为是:

θ,Q1,...,QD=arg minθmaxQ1,...,QDL(θ,Q1,...,QD) \theta^*,Q_1^*,...,Q_D^*=\argmin_\theta \max_{Q_1,...,Q_D}\mathcal{L}(\theta,Q_1,...,Q_D)

具体迭代如下所示

{θθηθL(θ,Q1,...,QD)θ  qkqk+ηNL(θ,Q1,...,QD)qk  \left\{ \begin{aligned}\theta\leftarrow\theta-\eta_\theta\frac{\partial\mathcal{L}(\theta,Q_1,...,Q_D)}{\partial\theta}\ \ \\ \mathbf{q}_k\leftarrow\mathbf{q}_k+\eta_\mathcal{N}\frac{\partial\mathcal{L}(\theta,Q_1,...,Q_D)}{\partial\mathbf{q}_k}\ \ \end{aligned} \right.

其中 k=1,2,...,Kk=1,2,...,K 为负样本的指标,ηθ\eta_\thetaθN\theta_\mathcal{N} 分别为网络权重和负样本的学习率。

为了简化负样本的计算,这里我们压缩了 wn,d=I[dn=d]w_{n,d}=\mathbb{I}[d_n= d],因此给定的样本只有助于从同一域产生负样本。在这种情况下,式子 (11) 中的损失函数如下

L(θ,θ)=1Nn=1Nlogexp(vnTfn/τ)exp(vnTfn/τ)+qQdnexp(qTfn/τ) \mathcal{L}(\theta,\theta')=-\frac{1}{N}\sum_{n=1}^N\log\frac{\exp\left(\mathbf{v}_n^T\mathbf{f}_n/\tau\right)}{\exp\left(\mathbf{v}_n^T\mathbf{f}_n/\tau\right)+\sum_{\mathbf{q}\in Q_{d_n}}\exp\left(\mathbf{q}^T\mathbf{f}_n/\tau\right)}

L\mathcal{L} 在更新负样本 qk\mathbf{q}_k 时的导数为

Lqk=1Nτn=1Nsnkfn \frac{\partial\mathcal{L}}{\partial\mathbf{q}_k}=\frac{1}{N_\tau}\sum_{n=1}^Ns_{nk}\cdot\mathbf{f}_n

其中

snk={exp(qkTfn/τ)exp(vnTfn/τ)+qQdnexp(qTfn/τ)  ,if ek=dn  0  ,otherwise  s_{nk}=\left\{ \begin{aligned} \frac{\exp\left(\mathbf{q}_k^T\mathbf{f}_n/\tau\right)}{\exp\left(\mathbf{v}_n^T\mathbf{f}_n/\tau\right)+\sum_{\mathbf{q}\in Q_{d_n}}\exp\left(\mathbf{q}^T\mathbf{f}_n/\tau\right)}\ \ ,\text{if}\ e_k=d_n\ \ \\ 0\ \ ,\text{otherwise}\ \ \end{aligned} \right.

3.个人感想

和作者之前 StableLearning 有异曲同工之妙的是,这篇论文也是通过调整权重来完成对于不同情况的学习。以及时常感觉到自己读论文并没有完全去读细读精,所以之后所有读的好论文我都希望能够自己先对其进行阅读笔记,过一段时间再回来看看,再进行一些修正和补充。

以及因为掘金上的markdown不支持 \begin{align} 的模块,在上传过程中我进行了删除导致了本来标号的缺失,希望掘金的开发者大大给孩子更一下这块,真的还挺好用的。