End-to-end novel visual categories learning via auxiliary self-supervision (Neural Networks 2021)
摘要
半监督学习在很大程度上缓解了深度学习对大量标注的强烈需求。然而,大多数方法都采用了一个共同的假设,即在同一类未标记的数据中总是有标记的数据,这是不切实际的,而且对于现实世界的应用程序是受限制的。在本研究工作中,我们关注的是当未标记数据和标记数据的类别彼此分离时的半监督学习。主要的挑战是,当标签数据彼此独立且不属于同一类别时,如何有效地利用标签数据和非标签数据中的知识。以前最先进的方法已经提出构造成对相似伪标签作为监测信号。然而,这些方法普遍存在两个问题:(1)以往的方法都是由多个训练阶段组成的,这使得很难以端到端方式训练模型。(2)对两两相似度伪标签质量的强烈依赖性限制了伪标签的性能,因为伪标签容易受到噪声和偏差的影响。因此,我们提出在模型训练中利用自我监督作为辅助任务,使有标记的数据和无标记的数据共享同一组替代标签,使整体监督信号具有较强的正则化。这样一来,该算法中的所有模块都可以同时进行训练,从而实现端到端学习,提高了算法的学习能力。此外,我们提出利用特征空间中的局部结构信息来构造成对伪标签,因为局部属性对噪声的鲁棒性更强。
策略
问题定义
假设给定一个图像数据集 X = { x 1 , x 2 , ⋯ , x N } X=\{x_1,x_2,\cdots,x_N\} X={x1,x2,⋯,xN},只知道部分对应的类别,记作 { X l , Y l } , Y l = { y 1 , y 2 , ⋯ , y l } \{X_l, Y_l\}, Y_l=\{y_1,y_2,\cdots,y_l\} {Xl,Yl},Yl={y1,y2,⋯,yl},其中 Y l Y_l Yl中类别的数量记作 c l c_l cl。对于 X X X中剩余的数据,则不知道对应的类别,记作 { X u , Y u } \{X_u, Y_u\} {Xu,Yu},其中 Y u Y_u Yu中类别的数量记作 c u c_u cu,假设已知 c u c_u cu已知。并且 Y u ∩ Y l = ∅ Y_u \cap Y_l = \varnothing Yu∩Yl=∅, X u X_u Xu中的标签和 X l X_l Xl中的标签是相互分开的。目标就是根据给定的 { X l , Y l } \{X_l, Y_l\} {Xl,Yl}尽可能正确的将 X u X_u Xu中的数据聚集到 c u c_u cu个类别上。
所提算法
在我们的算法中,我们将预测应用在图片上旋转变化的角度作为辅助自监督任务。三个不同的线性分类器被用来将数据点从特征空间映射到三个目标空间,例如两两相似度伪标签空间,分类标签空间以及自监督标签空间,这对应这我们算法中的三个模块。
两两相似度学习
没有进行任何的预训练或者微调,我们的算法直接从随机初始化的CNN网络开始训练。
X
X
X中的数据被传入网络,其线性层之后对应的特征向量
ϕ
i
\phi_i
ϕi对应每一个
X
u
X_u
Xu中的
x
i
x_i
xi被收集用于计算两两相似度。因为
X
u
X_u
Xu中没有标签信息,学习的特征空间容易受到噪声的影响。因此我们建议在特征空间中利用鲁棒的局部数据结构信息来减轻这种影响。我们使用对称SNE中提出的条件概率来表示
ϕ
i
\phi_i
ϕi和
ϕ
j
\phi_j
ϕj之间的相似度
s
i
j
s_{ij}
sij。
其中,
p
i
∣
j
p_{i|j}
pi∣j表示
ϕ
i
\phi_i
ϕi被选作
ϕ
j
\phi_j
ϕj邻居的条件概率,由以
ϕ
j
\phi_j
ϕj为中心的高斯分布计算得出。如果两个特征向量之间的距离不够近,那么概率将是无穷小的。温度系数T控制被考虑的邻居的数量。
在计算相似度
s
i
j
s_{ij}
sij后,就可以据此计算二元交叉熵损失,以增强网络对具有相似特征向量的图像数据给出相似预测。
其中
y
^
=
s
o
f
t
m
a
x
(
f
c
l
(
ϕ
i
)
)
∈
R
C
u
\hat{\boldsymbol{y}}=softmax(f_{cl}(\phi_i)) \in R^{C_u}
y^=softmax(fcl(ϕi))∈RCu,表示线性层
f
c
1
f_{c1}
fc1加一个softmax函数针对向量
ϕ
i
\phi_i
ϕi的输出。在我们提出的算法中,我们希望每一批次数据更新一次网络。因此,对一批图像数据计算
L
B
C
E
L_{BCE}
LBCE,
m
m
m为一批未标记数据的个数。类似地,
s
i
j
s_{ij}
sij的计算是针对每一批次数据,而不是整个数据集。如果认为两个图像数据
x
i
x_i
xi和
x
j
x_j
xj相似,即
s
i
j
s_{ij}
sij大于阈值
τ
\tau
τ,则
A
i
j
=
1
A_{ij} = 1
Aij=1。在此,我们用
y
^
i
\hat{\boldsymbol{y}}_i
y^i和
y
^
j
\hat{\boldsymbol{y}}_j
y^j之间的内积表示对图像数据
x
i
x_i
xi和
x
j
x_j
xj网络预测之间的相似度。
混合标签分类
除了针对无标签数据的两两i相似度学习之外,分类的区分性特征学习是必不可少的,因为
X
l
X_l
Xl知道标签信息。首先计算有标签数据的网络预测结果和真实标签之间的交叉熵损失
L
l
\mathcal{L}_l
Ll。而针对无标签数据集上的交叉熵损失
L
u
\mathcal{L}_u
Lu,通过在之前两两相似度学习中的网络模型生成的预测
f
c
1
(
ϕ
i
)
f_{c 1}\left(\phi_i\right)
fc1(ϕi)可以用来推理伪标签。因此,计算网络预测与
X
l
X_l
Xl的真标签和
X
u
X_u
Xu的伪标签之间的交叉熵损失,另一个线性层被添加到网络上用于将特征向量映射到
c
l
+
c
u
c_l + c_u
cl+cu维的标签空间上。
y
i
^
=
softmax
(
f
c
2
(
ϕ
i
)
)
∈
R
c
l
+
c
u
\widehat{\mathbf{y}_i}=\operatorname{softmax}\left(f_{c 2}\left(\phi_i\right)\right) \in R^{c_l+c_u}
yi
=softmax(fc2(ϕi))∈Rcl+cu是线性层
f
c
2
f_{c 2}
fc2加一个softmax函数对特征向量的输出。
y
i
y_i
yi表示真实标签,
λ
p
l
\lambda_{p l}
λpl表示对伪标签的权重因子,
p
i
p_i
pi表示无标签数据的伪标签,由以下公式定义:
伪标签
p
i
p_i
pi由第一线性层
f
c
1
f_{c1}
fc1加
c
l
c_l
cl的输出推断出来,作为伪标签混合真实标签计算损失,同时还加入了一致性约束来增强稳定性和鲁棒性。
自监督学习
两两相似度学习基于学习的特征空间建立了未标记数据之间的两两关系,主要受
X
l
X_l
Xl的监督。但是仅依赖由标签类别的数据提取的特征很有可能存在偏差,它对无标签数据的泛化能力将大打折扣。为了缓解该问题,我们建议提供除了标签信息意外的额外监督信息。在Gidaris的工作中,网络被训练用来预测应用在图像数据的旋转几何变换,扮演自监督的角色。我们在自身所提算法中联合基于旋转的自监督信息,通过迫使网络去同时区分图像类别和旋转变换。
每张图片
x
i
∈
X
x_i \in X
xi∈X被旋转KaTeX parse error: Expected 'EOF', got '}' at position 44: …ree,270\degree,}̲,并且旋转后的图像被传入相同的网络去获取特征向量。第三个线性层
f
c
3
f_{c3}
fc3被添加用于将旋转图片的特征向量映射到4维的代理标签空间。旋转损失通过i计算交叉熵获得:
总损失计算如下:
其中
λ
R
o
t
\lambda_{Rot}
λRot控制辅助自我监督信息与显式标签信息的相对重要性
β
\beta
β决定一致性损失的权重。
L
M
S
E
L_{MSE}
LMSE的形式决定了由于对概率分布的幂运算,损失的大小将是非常小的,这与其他三种损失项不同。此外,期望理想模型对输入数据
x
i
x_i
xi和其随机增广的对应对象
x
^
i
\hat{x}_i
x^i给出相同的预测,使
L
M
S
E
L_{MSE}
LMSE接近于零。因此,
β
\beta
β通常设置为一个较大的值,以平衡整体损失。本文算法的伪代码在算法1中总结。
emmm
第一、三个模块我觉得合理,第一个模块通过统计学的一些方式计算相似度给出两两相似度的伪标签的方式没啥问题,因为通过之前的一些工作可以看出通过预训练的神经网络在无标签数据集直接给出伪标签的效果没有通过数值分析以及一些统计学的方法得出的伪标签的性能好。
第三个模块则考虑到伪标签毕竟是含噪的,相当于比较靠谱的信息都要来自有标签数据集,所以想通过自监督的形式较少偏差。
但是第二个模块就感觉怪怪的了,在之前一些采用两两相似度的方法都是分阶段了,而且都表明这种比标签信息弱的两两相似度用于聚类不需要具体指定簇中心,如果用输出维度的索引表示类别,那同一张无标签的图像可能在不同的轮次属于不同的簇(类别),因为在训练过程中我们通过预先给定的两两相似度只决定是拉近或者推远,然后慢慢收敛至一起。但在这个算法中还要将输出向量作为多元分类的伪标签来计算交叉熵损失,那会不会出现一种矛盾的情况,初始阶段比如两个相同类别的图片的输出向量分别是 [ 0.1 , 0.9 ] , [ 0.9 , 0.1 ] [0.1,0.9],[0.9,0.1] [0.1,0.9],[0.9,0.1],那按照二元分类损失模型应该拉近两者距离,而按照多元分类损失,模型应该保持,并尽量优化输出结果为 [ 0.0 , 1.0 ] , [ 1.0 , 0.0 ] [0.0,1.0],[1.0,0.0] [0.0,1.0],[1.0,0.0],此时这个模型构建的总损失之间就是有矛盾的,而且我觉得这种情况在初始训练很有可能出现,然后模型一直训练不下去,因为论文强调了模型是随机初始化的,那也就是可以认为初期时不具备任何表征能力,输出结果时随机的。
我觉得如果还是采用分阶段更合理一点,先用两两相似度训练,再考虑加入多元伪标签分类损失,这个可能会减少上述情况。以上是根据论文内容提出的一种假设情况,具体是否这样还有待验证了。