这篇文章非常有意思,在代表自监督领域的对比学习方法中提出了有监督的对比学习框架。
Introduction
交叉熵损失函数有缺乏对嘈杂标签鲁班性,差边距等缺点,但是很多替代方案始终不能泛用地替代它。此工作中提出了一种监督学习的损失,通过利用标签信息建立对比自监督信息。在将不同实例拉开的同时还使来自同一类的更紧密地结合在一起。看图一目了然:
左边是传统的自监督,可以看到在嵌入空间内同类样本也被拉开了,理论上我们希望同类的特征应该紧靠一起,这就是作者要这么做的原因把。
有监督对比学习的正负实例的选择策略也不同:正样本是从与锚点相同类别的样本中提取的而不是像自监督学习中所做的是锚点的数据增强。每个锚点使用多个正实例和多个负实例,无需进行负例的选择探究。作者还分析了所设置的两种自监督损失函数的效果。
Method
给定一批输入数据,首先应用两次数据增强以获得该批的两个副本。两个副本都通过编码器网络前向传播,以获得 2048 维的归一化嵌入。在训练期间,该表示通过投影网络进一步传播,该投影网络在推理时被丢弃。在投影网络的输出上计算监督对比损失。与监督学习的不同之处在于,在分类头之前,划分了一个阶段用于优化对比损失。而与自监督学习不同的是,选取的正负例是根据是否同类来区分的。如下图:
Data Augmentation :
对于每个输入样本 x,生成两个随机增强, x = A u g ( x ) x = Aug(x) x=Aug(x) ,每个都代表数据的不同视图。
Encoder Network:
这个模块主要用于将x编码为一个表示向量,两个增强样本分别输入到同一个编码器,产生一对表示向量。 r = E n c ( x ) r = Enc(x) r=Enc(x)
Projection Network:
将表示向量r映射到一个投影空间: z = P r o j ( r ) z = Proj(r) z=Proj(r)。
Loss function
对于一个批次内的样本、标签对 { x k , y k } k = 1 … N \left\{
{x}_{k}, {y}_{k}\right\}_{k=1 \ldots N} {
xk,yk}k=1…N , 在训练时将其扩充为 2 N 2N 2N对 { x ^ 2 k , y ^ 2 k } k = 1 … N \left\{\hat{x}_{2k}, \hat{y}_{2k}\right\}_{k=1 \ldots N} {
x^2k,y^2k}k=1…N
{ x ^ 2 k −