【学习日记week11】不完备的多模态哈希方法,基于对比学习的跨模态检索

首先先进行一篇基于GCN的不完备多模态哈希的方法的学习,关于多模态哈希以及Incomplete问题可以看我之前的专栏记录。


重要的东西写在前面

用一行最大最大的字来记录一下自己终于发现的一个误区:多模态哈希和跨模态哈希并不是一回事,且区别也不是说多模态哈希是跨模态的哈希的拓展。多模态的意思是在查询集query中有多个模态的数据,特征融合在编码前,通过两个数据的融合生成一个哈希码,从而在数据库中搜寻样!本!对!而跨模态哈希其实重点在“跨”字上,是从一个模态检索另一个模态,每个模态可以哈希码不同(当然也可以相同)。也就是说多模态哈希中是没有i2t和t2i的mAP的,因为这是跨模态检索的玩意!!!当然,跨模态检索依旧是“多模态”领域下的重要研究!


Graph Convolutional Incomplete Multi-modal Hashing MM '23

多模态哈希(MMH)旨在弥合多模态数据,将其统一到潜在的哈希空间,这样可以进行非常高效的哈希检索。现存的MMH方法大部分是在完备数据上进行训练的,但这样的话会限制实际应用的训练,因为互联网数据存在大量的模态缺失问题。

motivation & contribution

在motivation的部分,讲了一下现有的非完备的MMH方法APMH,这也是基于矩阵分解的浅层方法,能够学习完备模态和非完备模态分别的哈希码。但是在深度方法中还是有一定的空缺,本文提出了GCIMH,可以通过弥合不完备的多模态数据来进行哈希学习。具体的词,本文的方法将autoencoder和GCN结合到了一起,来实现一个重建模型。
总体的,本工作的Contribution可以概括如下:

  1. 提出了深度MMH的方法。
  2. 提出了一种基于GC的自编码器,这可以有效的将AE的知识和标签网络,通过知识蒸馏的方法,使其协助多模态哈希网络的学习。
  3. 做了大量实验在三个数据集上,表示了GCIMH能够显著的在complete和incomplete场景下进行有效学习。

方法提出

基本的变量定义:

X = [ X c , X u ] , Y = [ Y c , Y u ] \textbf{X}=[\textbf{X}_c,\textbf{X}_u],\textbf{Y}=[\textbf{Y}_c,\textbf{Y}_u] X=[Xc,Xu],Y=[Yc,Yu] 表示两个模态的完整数据以及单独的数据(即另一个模态缺失原本导致的模态独立的样本)
维度有 d x , d y , c d_x,d_y,c dx,dy,c 表示不同模态和类标签的维度(本工作是有监督的跨模态哈希
样本数量有 n = n c + n x u + n y u n=n_c+n_{xu}+n_{yu} n=nc+nxu+nyu
哈希码最终有 B ∈ { 0 , 1 } n × d \textbf {B}\in\{0,1\}^{n\times d} B{0,1}n×d

基本架构

GCIMH
整个GCIMH包括了三个部分:第一部分是一个GCAE,第二部分是一个类似proxy的标签网络,第三部分是一个MMH的专门哈希网络。

GCAE(基于图卷积网络的自编码器)

首先,缺失模态的数据会通过均值 x ‾ , y ‾ \bf \overline x,\overline y x,y填充起来,这样的话原本的多模态数据样本数可以统一到 X ~ = [ X c , X u , X ‾ ] , Y ~ = [ Y c , Y u , Y ‾ ] \tilde{\textbf{X}}=[\textbf{X}_c,\textbf{X}_u,\overline{\textbf X}],\tilde{\textbf{Y}}=[\textbf{Y}_c,\textbf{Y}_u,\overline{\textbf Y}] X~=[Xc,Xu,X],Y~=[Yc,Yu,Y]

在这里插入图片描述
然后基于此构建一个关系图:

  • 首先,定义一个语义矩阵 W ∈ R n ∗ n \textbf{W}\in \mathbb R^{n*n} WRnn,来表示相似性(直接用标签矩阵内积来进行构建)。
  • 对于缺失样本做聚合会带来大量的重建损失,因此这些样本对于autoencoder的重建训练没法带来积极作用,于是从语义相似矩阵又构建了一个亲和图 A ∈ R n × n A i j = W i j ζ j \textbf A\in\mathbb R^{n\times n}\qquad A_{ij}=W_{ij}\zeta_j ARn×nAij=Wijζj,其中当第j个样本是模态完全的时候有 ζ j = 1 \zeta_j=1 ζj=1,否则为 0 0 0
  • 在图神经网络中,会出现“over-smoothing”的问题

    over-smoothing 是什么:这是图卷积神经网络(GCN)中的常见问题。在深度学习尤其是CNN方法中,出现了残差结构后,神经网络呈现出一个“深度越深,效果越好”的特点,然而在图神经网络中并不是这样。
    这是因为图神经网络中的接受域的概念
    接受域
    接受域是指在学习过程中,能够接受的邻居信息范围。随着层数增加,图神经网络每个节点所接受的邻居的阶数也增加。如上图所示,三层的GNN几乎接受域就覆盖了所有的节点。由于节点的嵌入是取决于其接受域的,所以如果层数太深的进行GNN的堆叠,会出现节点嵌入高度相似的问题,这就是over-smoothing的问题。
    更具体的可以看这篇文章中的可视化:https://www.zhihu.com/question/346942899

本文为了避免over smoothing的问题,采用了如下加权策略:
加权策略

也就是说所有亲和矩阵的元素会放缩到其他相邻节点(完备数据)的边权重和的大小后,再乘以一个参数 p p p
。训练的时候,首先会将补齐的模态数据以及加权邻接矩阵一起送到encoder网络中: T G = f E ( A ~ , [ γ X ~ , Y ~ , Θ E ] ) \textbf{T}^G=f_E(\tilde{\textbf A},[\gamma\tilde{\textbf X},\tilde{\textbf {Y}},\Theta_E]) TG=fE(A~,[γX~,Y~,ΘE]),其中, γ \gamma γ是表示两个模态相关性的超参数, T G ∈ R n × d T \textbf T^{G}\in\mathbb R^{n\times d_T} TGRn×dT表示的是经过encoder的潜在空间特征向量。decoder则有 [ γ X ^ , Y ^ ] = f D ( A ~ , T G , Θ D ) [\gamma\hat{\textbf X},\hat{\textbf Y}]=f_D(\tilde{\textbf {A}},\textbf T^G,\Theta_D) [γX^,Y^]=fD(A~,TG,ΘD)来从原本的潜在空间特征向量,结合邻接矩阵来生成对于X和Y的预测。
前向过程每层网络有: H ( l + 1 ) = σ ( A ~ H ( l ) Θ ( l ) ) \textbf{H}^{(l+1)}=\sigma(\tilde{\textbf A}\textbf H^{(l)}\Theta^{(l)}) H(l+1)=σ(A~H(l)Θ(l)),其中H代表每层的输入和输出。
最后的损失通过均方误差MSE和二值的交叉上损失BCE共同构造,具体的,CGAE的损失函数有:
LG


Cross-Modal Retrieval with Partially Mismatched Pairs TPAMI '23

摘要与背景

这篇工作和上篇都是在数据存在缺陷的条件下进行学习的跨模态检索方法。上一篇工作是不完备问题,这篇问题是不匹配问题,即在跨模态检索的学习过程中,会有图文不匹配的情况出现,即部分不匹配问题(Partially Mismatched Pairs,PMPs)问题。具体而言,在现实世界的场景中,大量的多媒体数据(例如Conceptual Captions数据集)是从互联网中收集的,因此难免会错误地将一些无关的跨模态配对视为匹配。毫无疑问,这种PMP问题会显著降低跨模态检索性能。为了解决这个问题,作者提出了一个统一的理论鲁棒跨模态学习框架RCL,其中包含一个无偏估计的跨模态检索风险来提升模型对PMPs的鲁棒性。

具体地,由非配对问题会引出过拟合问题,而RCL采用一种互补对比学习范式来解决过拟合和欠拟合问题。一方面,RCL在学习的过程中仅仅使用负样本信息,相比于正样本信息,负样本信息的错误率是很低的(作为错误匹配样本的错误率)这可以防止过拟合问题。然而,这些鲁棒性策略可能引起欠拟合问题,从而使训练模型更加困难。

所以为了解决由于弱监督引起的欠拟合问题,作者提出利用所有可用的负对来增强负样本信息中包含的监督。此外,为了进一步提高性能,他们提出了最小化风险上界,让学习过程更加关注难样本。

Motivation & Contribution

首先,本文提出了PMP的概念,是指学习的过程中有很多的不匹配的数据对。在跨模态学习过程中研究mismatch的问题的工作并不多,与之相近的是标签噪声的问题,为了避免噪声标签的影响,提出了各种的方法:如基于相关性的方法,基于适应学习的方法, 基于半监督的方法等(这里不展开调研)。这些方法虽然都取得了不错的效果,他们都是在单模态上进行分类的训练中取得了比较好的效果。在多模态数据下的工作中,这个问题会更复杂,以往的单模态工作考虑的是分类问题中的错误,而PMP中关注的是两个不同模态的样本不匹配问题

解决这个问题的一个基本思路是将跨模态的检索问题转化成跨模态分类问题,然后用标签去噪的思路去做。为了能够实现这个转化,每个样本需要和所有模态中的所有训练样本来进行比较,但这样显然是很耗内存以及计算资源的,在大规模数据上这么做并不行得通。解决PMP问题,需要综合考虑噪声监督(可能导致标签错误)、大的“类别”规模(这里指的是伪的类)以及跨模态差异(模态之间的不同表达),这增加了跨模态模型优化的挑战性。

于是提出了RCL的方法,大致上来说,传统的CL方法会收到mismatch的影响,于是提出了一个能够解决这个问题的,带有对于检索风险的无偏估计器的互补对比学习模块。更具体的,和CL不同的是,CCL方法利用了负样本的信息而不是正样本的信息来进行训练,如下图所示:

在这里插入图片描述
显然,互补的信息很难提供错误的ground-truth(和其他样本匹配的概率什么的应该很低吧很低吧很低吧!)举例的话,假设noise和pair selection是服从正态分布的,那么如果选择了N个pair,按照对比学习的思想,其中就包含了1个正对和N-1个负对。现在定义视觉样本 V \bf V V有错误标注下有对应的文本 T \bf T T(其中标注错误的概率为 p p p),于是能够得到V和T能够被正确标注成不匹配的概率为 1 − p ( N − 1 ) 2 ≈ 1 1-\frac{p}{(N-1)^2}\approx 1 1(N1)2p1。而正确标注成正样本的概率为 1 − p 1-p 1p,显然要低得多。

互补学习:NLNL: Negative Learning for Noisy Labels ICCV '19

笔者发现如果需要快速理解这里的思路,需要先学习一下基于互补学习的标签去噪的相关基础工作,而补标签学习的思路是Learning from Complementary Labels (NIPS '17)这篇工作提出的。但具体的学习算法的完善,可以直接看NLNL这篇工作。
NLNL基本思想

摘自知乎文章(侵删)https://zhuanlan.zhihu.com/p/358815761Complementary label的意思是当前训练图片不属于该标签。举个例子,一张狗的图片,它的正确标签是狗,噪声标签是汽车,而补标签是鸟(这张图片不属于鸟)。虽然补标签不是真正的标签,但确实在前期训练中能为模型提供有用的信息。那么怎么训练呢?
首先看传统分类网络中采用的交叉熵损失函数:
L ( f , y ) = − ∑ k = 1 c y k log ⁡ p k \mathcal L(f,y)=-\sum\limits_{k=1}^{c}\boldsymbol y_k\log\boldsymbol p_k L(f,y)=k=1cyklogpk

如果改成补标签,则有交叉熵损失函数可以写为 L ( f , y ‾ ) = − ∑ k = 1 c y ‾ k log ⁡ p k \mathcal L(f,\overline y)=-\sum\limits_{k=1}^{c} \overline {\boldsymbol {y}}_k\log\boldsymbol p_k L(f,y)=k=1cyklogpk

即“补标签的预测越错越好”。但仅仅对补标签的学习是不够的,因为正确的标签带来的信息比补标签要大很多(这很显然的吧!仅仅学会排除一些错误选项是考不了满分的吧!)

于是NLNL提出了一种Negative Learning的噪声标签学习框架
首先第一阶段是生成补标签:
在这里插入图片描述
然后基于补标签的学习过程如下在这里插入图片描述

简单解释一下上面的算法框架,其中Eq.1和Eq.2分别表示正样本学习交叉熵和负学习交叉熵损失。
算法主要分为了三个部分:NL,SelNL和SelPL,其中“Sel”表示“selective”,即学习过程中的样本是经过选择的。这个选择的方法是很简单的,就是通过正负样本的两个阈值来进行筛选(这里的阈值暂时是超参数,但是后期的工作可以将其进行一个学习)

基于这个算法框架,可以进行后续的RCL的学习。

在多模态和跨模态场景下如何用NL来进行学习?

直接在跨模态场景下是没办法用NL的,而把跨模态检索任务转化为跨模态分类任务的计算量也是很大的。此外,如果用很直接的学习负样本的思想来做检索任务的学习,很容易会导致欠拟合以及不收敛的问题。直观的想,传统的CCL(互补对比学习)是对一个Negative pair进行拉远,这样会让学习的时候的移动过程很不稳定(因为周围都是)
于是本文提出了一种由流体中的分子运动启发而来的改进的对比学习过程,每次学习的时侯一个个的进行拉远会导致类似布朗运动的结果,所以需要考虑所有“分子”但作用,从而根据整体的“合力”进行学习。
在这里插入图片描述
此外还用了优化风险的upper bounds的方法来解决欠拟合的问题。

contribution

可以总结如下三点:

  1. 首先提出了一个跨模态对比学习(CMCL)的框架,对于噪声的过拟合问题,采用了CCL策略来防止过拟合。
  2. 本文的CCL经过了改进,不再是仅对单个样本进行学习,而是在学习的过程中尽量考虑多的负样本。
  3. 进行了多模态数据集上的大量实验。

方法提出

本方法的基本框架如下:
在这里插入图片描述
这里解释一下整体的框架图,首先通过两个编码器,将本身模态的数据编码成各自的向量,然后计算出两个模态的特征的相似性矩阵S。然后通过CMCL模块来计算不同模态的匹配概率,但是这都是对所有样本做的操作,所以存在不匹配样本对的存在,不匹配样本对会带来不准确的概率估计。于是本文提出了一种面向错误样本的CCL(Complementary Contrastive Learning)学习方法来解决这个问题。具体的,仅用Y=0的样本来进行学习(Y=1不进行任何操作),就可以收敛并且有鲁棒的效果。

其实有种摆烂的感觉,如果正对都有噪声的话那干脆直接学习所有负对好了!

符号定义

懒得写了,这里直接贴图
在这里插入图片描述
比较不同的是这里的 Y \mathcal Y Y,用于表示样本之间是否匹配。注意到,这里的不匹配问题还涉及到没有相关匹配的问题,也就是说可以经过一些简单转换,应用在不完备数据集上。(不完备数据集可以通过构造 N t ≠ N v N_t\neq N_v Nt=Nv来实现)

CMCL

首先本方法还是基于CMCL来做的,所以首先会学习两个模态个字的编码器神经网络 f V ( ⋅ , Θ I ) , f T ( ⋅ , Θ T ) f_V(\cdot,\Theta_I),f_T(\cdot,\Theta_T) fV(,ΘI),fT(,ΘT)。然后通过一个映射函数g来学到相似矩阵: S j k = g ( f V ( V j ) , f T ( T k ) , Θ g S_{jk}=g(f_V(\textbf V_j),f_T(\textbf T_k),\Theta_g Sjk=g(fV(Vj),fT(Tk),Θg(这里的g可以是参数化的也可以是非参数的)

这段内容其实和大部分做跨模态的对比学习的方法是差不多的,首先可以将匹配概率表示为:在这里插入图片描述
在这里插入图片描述
这里的 h ( V i , T j ) h(\textbf V_i, \textbf T_j) h(Vi,Tj)可以看做是 h ( V i ) h(\textbf V_i) h(Vi)的第j项,反之亦然。原文突然说这句话很突兀,但表达的意思其实是,这里的h实际上是个综合了两个模态的选择函数,是从一个模态的数据到另一个模态中的匹配数据的一个映射。但是这是一个从所有数据到所有数据的映射,这要是直接计算的话会非常复杂的,于是本文采用了一种蒙特卡洛抽样的算法:
在这里插入图片描述
其中 Z i = ∑ l = 1 N t e S i l / τ Z_i=\sum_{l=1}^{N_t}e^{S_{il}/\tau} Zi=l=1NteSil/τ是前面两个概率的分母,也就是说分母上的计算不在所有的样本里面计算而是在抽样的N个数据点上进行计算。
(如果每次在一个大小为N的mini-batch上做,应该能够有差不多的效果?)这样的话就可以重新表示为
在这里插入图片描述

可以由此得到学习的目标有:
在这里插入图片描述
也就是让 h ( V i ) h(\textbf V_i) h(Vi) Y i ⋅ \textbf Y_{i\cdot} Yi尽量一致。同样的,在一个batch中就有
在这里插入图片描述
把原本的 L \mathcal L L改为正负对形式的交叉熵,则有
在这里插入图片描述
这里作者还提到了一点,就是在有噪声的情况下,采用对比学习的鲁棒性会比采用三元组损失max-margin loss来的好一些。(但这里没太看明白)

CCL

虽然CMCL能够进行训练,但是噪声依旧会带来过拟合的问题。如上面公式(8),这对难样本的优化效果很明显(相似度低/相似概率低导致loss很大),但如果是mismatch的样本,优化效果甚至更明显,这就导致了过拟合的存在。

所以本文采取了complementary learning的思想,来通过负样本的学习对训练过程进行监督。然而互补的监督信息对于模型训练来说还是太弱了。所以本文采用了多个负样本对来增强互补学习对于本方法的监督效果,具体的可以将其分为两个部分。

引理1:对于任何的分布 D \mathcal D D和基于前文中的选择函数 h h h的互补分布 D ‾ \overline{\mathcal D} D有如下的变形:
在这里插入图片描述
R ‾ \overline R R是互补标签的风险, L ‾ \overline{\mathcal L} L是一个互补损失。
在这里插入图片描述
说实话这里的维度根本对不齐啊!!!!怎么算的??????这篇文章的y的各种表示属实是有点乱。。我只能勉强自己理解一下了:在每次学习的时候,选取一个大小为N的batch,这样可以构建一个N*N的匹配矩阵然后拿这部份的结果和用h算出来的匹配的每个位计算loss,最后在计算匹配矩阵之外的loss。
在这里插入图片描述
同样的能够算出一个估计
在这里插入图片描述
这份直接用平均绝对误差来带入损失函数,最终可以算得
在这里插入图片描述
这里的Z是一个常数,而 α = 2 ( N − 1 ) C \alpha = \frac{2(N-1)}{C} α=C2(N1),其中 C = ∣ V ‾ k ∣ = ∣ T ‾ k ∣ C=|\overline{\mathcal V}_k|=|\overline{\mathcal T}_k| C=Vk=Tk代表选择的负样本数量。优化上述公式可以写为如下的损失函数:
L m a e = 1 N ∑ k = 1 N ∑ p ∈ P ‾ k p \mathcal L_{mae}=\frac 1N \sum_{k=1}^N\sum_{p\in\overline{\mathcal P}_k}p Lmae=N1k=1NpPkp
在这里插入图片描述
即计算所有的互补样本的匹配概率和作为损失函数,从loss来看倒是很平凡,就是直接让所有的不匹配样本对的匹配概率尽可能低。但是TPAMI的论文注重公式推理,所以先从学习目标一步步推理过来了。
但如果仅用mae损失,整个的学习过程中,会失去学习重点,基于深度神经网络的方法也很难直接进行学习,所以还需要从一些难样本来进行着重学习。为了解决这个问题,本文从如下不等式入手: x ≤ − log ⁡ ( 1 − x ) , x ≤ e − ( 1 − x ) , x ≤ 1 q ( 1 − ( 1 − x ) q ) , x < tan ⁡ x x\leq-\log(1-x),x\leq e^{-(1-x)},x\leq\frac 1q(1-(1-x)^q),x<\tan x xlog(1x),xe(1x),xq1(1(1x)q),x<tanx,直接建立了好几个全新的loss
在这里插入图片描述
在这里插入图片描述

实际的实现以及模型分析

首先,本文提出的其实是一个训练过程的损失范式,但是并不是直接用来做完整的监督的,而是结合其他的image-text matching的方法(反映在之前的目标函数中其实就是 g ( ⋅ ) g(\cdot) g()函数)来进行学习,通过图卷积网络等网络来学习一个图和匹配得分,然后改用CCL进行学习的监督(所以contribution就是一个loss和若干的缺陷条件的实验)。

eg. RCL+GSMN中,先通过一个Visual Graph和Texual Graph,对图像和文本的匹配进行一个匹配度计算和相似性评分,然后用CCL来进行学习。
对于GSMN,有基本框架如下:
GSMN
在代码实现的过程中,大部份结构都得到了保留,但是原本的GSMN是通过双流结构都图进行基于triplet loss的对齐,本文将其改成了基于CCL的损失,这样该方法能够更加鲁棒。并且本方法还应用在了七个不同的模型上,都取得了不错的效果。并且可以在文本-视频检索等其他跨模态检索任务上同时进行。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值