Collaborative Learning of Label Semantic and Deep Label-Specific Features for Multi-Label Classification笔记整理
首先这篇文章的介绍按照8部Idea总结法来进行阅读,培养自己的逻辑思维能力
背景
这篇论文的背景是Label-specific feature的方法来解决传统的多标签问题。其所用的数据集不是MS-COCO这种纯图片数据,而是MULAN这种Text数据。
一个具体的研究问题
大部分解决多标签的方法都是将每一个实例的特征集合看作是相同的,而这种策略是suboptimal因为他不能够计算每个类标签不同的特征。
因此作者举例来说明这个问题,比如在识别飞机这个类别的时候,关于形状的这些特征更加重要。
而在识别天空这些类别的时候,颜色基于的特征更加重要。
Note:
1.对于这些特征的重要性,让人联想到的一个关键技术就是Attention,能否将Attention纳入进来给这些特征具体的重要度。
其他文章是如何做的以及别人方法存在问题是什么
AB:Most existing approaches exploit the
semantic relations among labels as immutable prior knowledge, which may not be appropriate to constrain the learning process of label-specific features.
意思是说目前的Label-specific feature方法都是先探索标签之间语义关系,然后利用这些关系再去进行特征的表示学习。也就是一个分步的过程。作者说,这样不好,因此这会限制标签具体的特征的学习过程,也就是降低表示学习的质量。
IN:More specifically, these approaches calculate the similarity between pairwise labels and incorporate these similaritybased label correlations into model training, where constraints are imposed to share more features [9], [16], [17] or similar predictions [10] among strongly correlated labels.
其实这段话的意思是AB中内容的一个重复,还是说一个预定义的标签相关性不好。并且说了一点,就是这样做会限制在那些强相关的标签之间去共享更多的特征和相似的预测。----其实这一点我不太理解,大概是将标签相关性纳入?
IN:
LIFI [8]执行聚类分析在每一个标签的正样本和负样本,并且通过查询原始的实例和聚类中心的距离来获得标签具体的特征。
其他的文章后续再看
Insight
Learn label semantics and label-specific features in a collaborative way.
在摘要中,作者点出其最主要的Insight是利用协同学习的方式共同学习标签和标签具体的特征。
Note:协同学习是否可以应用在领域?
当两个things共同学习的时候,是否可以互相帮助去解决呐?
Co-training和Collaborative Learning之间的关系是什么?两者之间能擦出什么火花呐?
方法中真正的挑战是什么
如何进行标签语义关系的提取?
如何提取标签具体的特征?
如何将两者以协同的方式联合起来
为了克服挑战,具体的设计是什么
AB:
(1)作者利用Graph autoencoder去encoding语义关系
(2)作者利用了一个tailored feature-disentanging module来提取标签具体的特征。
(3)利用Graph autoencoder所学习到的语义guide mining标签具体的的特征,并且propagate label-specific discriminative properties来学习标签的语义----以一种协同的方式
导致的结果-
The learning of label semantics and label-specific features interact and facilitate with each other so that label semantics can provide more accurate guidance to label-specific feature learning.
IN:
具体地说,利用来自标签空间的标签语义,积极指导为每个类标签寻找最具判别性的特征,而基于这些特征的判别过程 标签特定特征反过来又影响标签语义的学习过程,使标签语义为标签特定特征学习提供更准确的指导。
基本上是对AB中内容的一个重复
可以看到,从Abstract中,基本可以作者的整体的逻辑梳理的十分清晰了,因此这是一篇逻辑很清晰的文章。
Method
在梳理完作者的总体Idea后,我们来看具体方法
Label Semantic Encoding
这一步作者主要根据标签之间的共现关系(co-occurrence)构建了一个关系图。具体来说就是根据以下公式来构建:
其中
l
j
l_{j}
lj和
l
i
l_{i}
li是相应的标签,
P
P
P是概率表示。需要注意的是,这个矩阵的对角元素值皆为0。
def sym_conditional_prob(self, y):
#标签矩阵求内积
adj = torch.matmul(y.t(), y)
#求标签分布,即在所有的y_train中,每个标签的个数
y_sum = torch.sum(y.t(), dim=1, keepdim=True)
#防止系数标签的情况,如果某个标签没有被选中一次,则置为1e-6而不是无穷小
y_sum[y_sum<1e-6] = 1e-6
#归一化--考虑在标签分布这个条件下的概率
adj = adj / y_sum#非对称矩阵
#将对角线置为0
for i in range(adj.size(0)):
adj[i,i] = 0.0
#对应于论文中的公式
adj = (adj + adj.t()) * 0.5
return adj
14306 61430–> 61430 * 14306–>66
66矩阵的第一行,第二列的含义,第一个标签的1430个样本的选中情况乘以第二个标签1430个样本选中的情况。
但这一点其实不是作者的原创内容,因为在ML-GCN[2]中,其作者已经提出了这种构建标签矩阵的做法。且ML-GCN中作者考虑了标签和标签之间long-tail分布的问题。因此通过一个阈值来过滤掉这种标签。
因此这一点属于其他论文的创新点。
之后作者利用了GIN这个图神经网络去提取label embedding的拓扑关系。
其实到这里都是很自然的过程,但有一点需要注意的是,这里的label embedding不是像ML-GCN一样通过Gover或者Bert一类的预训练模型来预先提取,而是直接将label embedding初始化(可以是高斯分布,可以是任何合理的分布)为一个
然后经过GIN结合标签共现矩阵A来更新H的值。在经过多层GIN后,label embedding就获取了标签相关性信息。
另外一点和ML-GCN不同的是,作者使用了GIN进行标签语义的编码而不是GCN,其实这一点也不是什么创新点。
然后作者提出了一个decoder loss来解决以下问题,这里直接摘抄英文内容:
GIN is able to embed labels with strong co-occurrence relationship to nearby locations in the label semantic space. However, the embeddings of weakly
correlated labels cannot be effectively pushed away from each other, as the neighborhood aggregation scheme of GIN does not ensure increased distinction between two nonadjacent labels.
其实意思就是说GIN聚合的模式导致了其只能聚合领域信息而不能将那些weakly correlated labels或者非连接的label embedding push away。其实这一点我会从两个地方来找到作者的Insight。
我们首先看这个公式:
emb_norm = emb.norm(dim=1, keepdim=True)
emb_norm = emb / (emb_norm + 1e-6)
adj_pred = torch.matmul(emb_norm, emb_norm.t())
loss = torch.mean(torch.pow(adj - adj_pred, 2))
首先这是一个pairwise的损失,因为考虑的是一个成对标签的关系。然后cos实际上求的是一个label embedding的相似度关系,如果说两个label emebdding之间的cos值很大,意味着其相似度很高,但是如果Aij的值很低,这意味着这两个label embedding的实际上是一个weakly correlated的标签,这不符合作者最终的诉求,因此loss的值就会很大,也就是说这里隐式的拉开了两个weakly correlated的label embedding的距离。
OK,我们回看ML-GCN中label和label之间的tail-distribution问题—即某些虽然相连了,但是仅出现过很少的这种次数,这是不是和weakly correlated的含义是一样的。
我们来看ML-GCN是如何解决的:
ML-GCN中,作者通过一个阈值来将条件概率矩阵进行筛选,如果说两个标签贡献的概率小于一个阈值,我们就将其置为0。
2.这个decoder loss在异质图场景下的应用
在SimP-GCN[]中,作者也提出了一个相似的损失函数,其insight也是说GNN聚合只能将相似的节点,而不能将不相似的节点push away。
S
i
j
S_{ij}
Sij是构建的KNN图,而
f
w
f_{w}
fw是一个线性的mapping function,
H
i
H_{i}
Hi,
H
j
H_{j}
Hj是成对标签关系。
embeddings0 = embeddings[node_pairs[0]]
embeddings1 = embeddings[node_pairs[1]]
embeddings = self.linear(torch.abs(embeddings0 - embeddings1))
loss = F.mse_loss(embeddings, self.pseudo_labels, reduction='mean')
所以将不相似的节点push away就是一个insight。
Note:
1.能否利用metric learning的思想来度量这个关系。
Semantic-Guided Feature-Disentangling
其实这一步就是如何将特征信息和标签信息联系在一起的过程了,首先作者通过MLP将原始特征映射到另一个维度:
虽然只是一层MLP,但是作者对其采用了重定位,给其一个合理的解释,这一点其实可以学习。值得注意的是,作者对特征的映射采用的是leakyRelu
The latent representation can be optimized to benefit the subsequent element-wise selection process of the pertinent features for each class label.
意思就是说映射到潜在空间的表示向量有利于下面对于每个类标签的选择有利的特征,而且是element-wise的选择。这点后面会解释。
之后,作者将标签向量也映射到了同一维度,但是利用了sigmoid函数,因为sigmoid函数可以将其映射到(0,1),因此作者将其解释为attention的过程:
1.Then, an attention-like mechanism is designed to
utilize label semantics to guide selecting the pertinent and
discriminative features for each class label.
2. σ denotes the sigmoid function which can generate multiple peaks to keep consistency with the fact that there might be multiple pertinent features for each class label.
意思就是说这个sigmoid的性质很重要,因为其可以将14个特征的每一个维度都映射到(0,1)之间,这意味着每一个标签可以选择多个最重要的特征。
接下来就是如何选择的问题了
作者通过将映射到同一维度的label embedding和feature embedding进行哈达玛积,然后再通过MLP。
#x是特征向量,y是标签向量
#x为batch_size*in_feature--->NN--->batch_size*hidden_feature
#y是经过GIN后的标签向量,14*256
x = self.NN1(x) # b1 x h
y = self.NN2(y).sigmoid_() # b2 x h
#1000*1*512 * 1*14*512 --->1000*14*512
output = x.unsqueeze(1) * y.unsqueeze(0) # b1 x b2 x h
这里涉及到一个三维张量的运算,其实就是一个三维的哈达吗积。
1000* 1 * 512
⊙
\odot
⊙ 1 * 14 * 512 的计算pytorch会先广播为
1000* 14 * 512
⊙
\odot
⊙ 1000 * 14 * 512 ,然后再计算。
我们可以理解为1000个样本,每个样本都有14个label embedding,然后将14个label embedding与14份特征进行积。最后就是每个样本的每个特征都复制了标签个数的次数,然后这些特征都是不同的,与不同特征交互的。
Classification
到此为止,我们终于获得了 Label-specific features,然后将其经过一层fully connected layer变为batch_size*label的维度即可
作者这里使用的是一层Conv1d
self.cls_conv = nn.Conv1d(configs['num_classes'], configs['num_classes'],512, groups=configs['num_classes'])
最后分类经过一层sigmoid即可,以0.5为阈值即可。
[1] M.-L. Zhang and L. Wu, “LIFT: Multi-label learning with labelspecific features,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 37, no. 1, pp. 107–120, 2015.
[2] Chen Z M , Wei X S , Wang P , et al. Multi-Label Image Recognition With Graph Convolutional Networks[C]// 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2019.
[3]Jin W , Derr T , Wang Y , et al. Node Similarity Preserving Graph Convolutional Networks[C]// WSDM '21: The Fourteenth ACM International Conference on Web Search and Data Mining. ACM, 2021.