CBMI 2022 | 蒸馏细粒度对齐分数以实现高效的图文匹配和检索

CBMI 2022-《ALADIN》-蒸馏细粒度对齐分数以实现高效的图文匹配和检索

【写在前面】

在涉及视觉和语言的共同理解的任务中,图像-文本匹配正在发挥主导作用。此任务通常被用作预训练目标,以打造能够共同处理图像和文本的体系结构。尽管如此,它有一个直接的下游应用程序: 跨模态检索,它包括查找与给定查询文本相关的图像,反之亦然。解决此任务在跨模态搜索引擎中至关重要。许多最近的方法为image-text匹配问题提出了有效的解决方案,主要是使用最近的大型视觉语言 (VL) Transformer网络。但是,这些模型通常在计算上很昂贵,尤其是在推理时。这阻止了它们在大规模跨模态检索方案中的采用,在这种方案中,结果应几乎立即提供给用户。**在本文中,作者通过提出一个对齐和蒸馏网络 (ALADIN) 来填补有效性和效率之间的差距。**ALADIN首先通过在细粒度的图像和文本上对齐来产生高效的分数。然后,它通过提取从细粒度对齐中获得的相关性得分来学习共享的嵌入空间-可以在其中执行有效的kNN搜索。作者在MS-COCO上获得了显著的结果,表明本文的方法可以与最先进的VL Transformer竞争,同时速度几乎快90倍。

1. 论文和代码地址

ALADIN: Distilling Fine-grained Alignment Scores for Efficient Image-Text Matching and Retrieval

论文地址:https://arxiv.org/abs/2207.14757

代码地址:未开源

2. Motivation

随着深度学习方法的日益强大和大规模数据的可用性,多模态处理已成为最有前途的研究课题之一。特别是,大部分的重点放在图像和自然语言句子的联合处理上。通过理解文本和图像之间隐藏的语义联系,许多作品解决了具有挑战性的多模态问题,例如图像字幕或视觉问答。在这些任务中,image-text匹配具有至关重要的意义: 它包括为每个给定的 (图像,文本) 对输出相关性得分,其中如果图像与文本相关,则得分高,否则得分低。尽管此任务通常用作视觉语言预训练目标,但对于跨模态图像文本检索至关重要,它通常由两个子任务组成: 图像检索 (希望与给定文本相关的图像) 和文本检索,要求更好地描述输入图像的句子。在现代跨模态搜索引擎中,高效有效地解决这些检索任务具有重要的战略意义。

许多最先进的图像-文本匹配模型,如Oscar 或UNITER ,包括具有早期融合的大型和深度多模态视觉语言 (VL) Transformer,其计算成本很高,尤其是在推理阶段。实际上,在推理过程中,应通过多模态Transformer转发来自测试集的所有 (图像,文本) 对,以获得相关性得分。这在大型数据集中显然是不可行的,在大规模检索场景中是不可用的,因为系统延迟应该尽可能小。

为了实现这样的性能目标,文献中的许多方法都将图像和文本嵌入在一个共同的空间中,其中相似性是通过简单的点积来衡量的。这允许引入离线阶段,在该阶段中,所有数据集项都被编码和存储,在该阶段中,仅通过网络转发查询并与所有离线存储的元素进行比较。尽管这些方法非常有效,但它们通常不如使用大型VL Transformer进行早期模态融合的方法有效。

根据这些观察结果,在本文中,作者提出了一种对齐和蒸馏网络模型 (ALADIN),该模型利用大型VLTransformer获得的知识来构建有效而有效的图像文本检索模型。特别是,作者采用了后期融合方法,以便将两个视觉和文本管道保持分离,直到最终匹配阶段。第一个目标包括使用简单而有效的对齐头将图像区域与句子单词对齐。然后,通过使用学习到排名的目标从对齐头提取分数来学习常见的视觉文本嵌入空间。在这种情况下,将学习的对齐分数用作ground truth (教师) 分数。

作者表明,在广泛使用的ms-coco数据集上,对齐分数可以达到与大型联合视觉语言模型 (例如UNITER和OSCAR) 相当的结果,同时效率更高,尤其是在推理过程中。另一方面,用于学习公共空间的蒸馏分数可以击败相同数据集上以前的公共空间方法,从而为大规模检索开辟了基于度量的索引的道路。

本文的贡献如下:

1)作者使用两个预训练的VL Transformer实例作为主干来提取单独的视觉和文本特征。

2)作者采用一种简单而有效的对准方法来产生高质量的分数,而不是大型联合VL Transformer的可扩展性差的输出。

3)作者通过将问题框架为一个学习到排名的任务,并使用对齐头输出中的分数来提取最终分数,从而创建一个信息丰富的嵌入空间。

3. 方法

提出的体系结构由两个不同的阶段组成。第一阶段,称为骨干,由预训练的大型视觉语言转换器VinVL 的层组成,这是对强大的OSCAR模型的扩展 。在主干中,语言和视觉路径不会通过交叉注意机制进行交互,因此可以在推理时独立地提取两种模态中的特征。

相反,第二阶段由两个单独的头组成:** 对齐头匹配头**。对齐头用于预训练网络,以细粒度的方式有效地对齐视觉和文本概念,如TERAN 中所做的那样。不同地,匹配头用于构造信息交叉模态公共空间,该空间可用于有效地将图像和文本表示为固定长度向量,以用于大规模检索。使用来自对齐头的分数作为指导,提取来自匹配头的分数。总体架构如上图所示。

3.1 Vision-Language Backbone

作为特征提取的主干,作者使用VinVL中的预训练层,这是对大规模视觉语言OSCAR模型的扩展。作者的目标是为输入中的图像V和文本C获得合适的矢量表示。特别是,作者在图像文本检索任务上采用了预训练的模型。作者在输出序列的CLS token之上使用了二进制分类头,并对模型进行了训练,以预测输入图像和文本句子是否相关。

在本文的用例中,视觉和文本管道应分开,以便可以在推理时独立forward它们。因此,作者使用VinVL体系结构的两个实例,在共享权重配置中独立地转发这两个模态,如图上所示。

作者将从对象区域提取的视觉特征及其标签都用作视觉token,并且两个子序列由SEP token分隔。最后,解纠缠的VinVL架构的最后一层的输出是两个序列 V = { v c l s , v 1 , v 2 , … , v N } V=\left\{v_{\mathrm{cls}}, \boldsymbol{v}_{1}, \boldsymbol{v}_{2}, \ldots, \boldsymbol{v}_{N}\right\} V={vcls,v1,v2,,vN}表示图像V, C = { c c l s , c 1 , c 2 , … , c M } \boldsymbol{C}=\left\{\boldsymbol{c}_{\mathrm{cls}}, \boldsymbol{c}_{1}, \boldsymbol{c}_{2}, \ldots, \boldsymbol{c}_{M}\right\} C={ccls,c1,c2,,cM}表示文本C。在两个序列中,第一个元素是CLS token,用于收集整个图像或文本的代表性信息。

3.2 Alignment Head

对齐头包括相似度矩阵,其计算视觉token与文本token之间的细粒度相关性。然后将细粒度的相似性合并以获得图像和文本之间的最终全局相关性。特别是,作者使用类似于TERAN 中使用的配方。具体来说,主干输出中的特征用于计算视觉文本token对齐矩阵 A ∈ R n × m A \in \mathbb{R}^{n \times m} ARn×m ,构建如下:

A = a i j k l = cosine ⁡ ( v i , c j ) = v i T c j ∥ v i ∥ ∥ c j ∥ i ∈ g k , j ∈ g l A=a_{i j}^{k l}=\operatorname{cosine}\left(v_{i}, c_{j}\right)=\frac{v_{i}^{T} c_{j}}{\left\|v_{i}\right\|\left\|c_{j}\right\|} \quad i \in g_{k}, j \in g_{l} A=aijkl=cosine(vi,cj)=vicjviTcjigk,jgl

其中, g k g_{k} gk是来自第𝑘图像的区域特征的索引集合,而 g l g_{l} gl是来自第𝑙个句子的单词的索引集合。此时,图像k和字幕l之间的相似度 s k l s_{k l} skl通过适当的汇集函数汇集相似度矩阵𝑨沿维度(𝑖,𝑗)来计算。

作者使用 “最大区域总和” 策略,该策略计算以下最终相似性得分:

S ( a ) = s k l ( a ) = ∑ j ∈ g l max ⁡ i ∈ g k A i j S^{(\mathrm{a})}=s_{k l}^{(\mathrm{a})}=\sum_{j \in g_{l}} \max _{i \in g_{k}} A_{i j} S(a)=skl(a)=jgligkmaxAij

用于计算公式中𝑨的点积相似度类似于视觉token和文本token之间的交叉注意的计算。区别归结为视觉和文本pipeline之间的交互,这种交互仅发生在整个结构的最后。这种后期的交叉关注使得序列 V和C可缓存,无需forward
每当向系统发出新的查询 (视觉或文本) 时,整个体系结构。仅涉及简单的非参数运算的的计算非常高效,可以在GPU上轻松实现以获得高推理速度。用于强制此网络为每个 (图像,文本) 对产生合适的相似性的损失函数是hinge-based triplet ranking loss:

L triplet  = ∑ k , l max ⁡ l ′ [ α + s k l ′ − s k l ] + + max ⁡ k ′ [ α + s k ′ l − s k l ] + , \mathcal{L}_{\text {triplet }}=\sum_{k, l} \max _{l^{\prime}}\left[\alpha+s_{k l^{\prime}}-s_{k l}\right]_{+}+\max _{k^{\prime}}\left[\alpha+s_{k^{\prime} l}-s_{k l}\right]_{+}, Ltriplet =k,llmax[α+sklskl]++kmax[α+sklskl]+,

其中 s k l s_{k l} skl是在图像𝑘和字幕𝑙之间估计的相似性,以及 [ x ] + ≡ max ⁡ ( 0 , x ) [x]_{+} \equiv \max (0, x) [x]+max(0,x);值𝑘‘,𝑙’是在mini-batch中找到的图像和字幕难例的索引,𝛼是定义正负对之间应该保持的最小间隔的margin。

鉴于对齐头直接连接到主干,在此新的对准目标上对主干进行了微调。

3.3 Matching Head

匹配头部使用从主干给出的相同序列𝑽和𝑪,并使用它们来产生用于图像V的特征 u ~ ∈ R d \tilde{u} \in \mathbb{R}^{d} u~Rd和用于字幕C的 c ~ ∈ R d \tilde{\boldsymbol{c}} \in \mathbb{R}^{\boldsymbol{d}} c~Rd。这些表示被强制放置在相同的𝑑维嵌入空间中。在这个空间中,可以使用度量空间方法或倒排文件高效地计算𝑘-nerest-Neighbor搜索,以便在给定文本查询的情况下快速检索图像,反之亦然。具体地说,通过2层Transformer编码器(TE)forward 𝑽和𝑪:

V ˉ = TE ⁡ ( V ) ; C ˉ = TE ⁡ ( C ) \bar{V}=\operatorname{TE}(V) ; \quad \bar{C}=\operatorname{TE}(C) Vˉ=TE(V);Cˉ=TE(C)

TE在两个通道之间共享权重,编码整个图像和字幕的最终向量是从TE层输出的CLS token: v ~ = V ˉ [ 0 ] = v ˉ c l s \tilde{v}=\bar{V}[0]=\bar{v}_{\mathrm{cls}} v~=Vˉ[0]=vˉcls c ~ = C ‾ [ 0 ] = c ‾ c l s \tilde{\boldsymbol{c}}=\overline{\boldsymbol{C}}[0]=\overline{\boldsymbol{c}}_{\mathrm{cls}} c~=C[0]=ccls。最终的相关度被简单地计算为来自第𝑘个图像(M)的向量 v ~ k \tilde{\boldsymbol{v}}_{k} v~k和来自第𝑙个句子的 s ~ l \tilde{\boldsymbol{s}}_{l} s~l之间的余弦相似性: S ( m ) = s k l ( m ) = cosine ⁡ ( v ~ k , s ~ l ) S^{(\mathrm{m})}=s_{k l}^{(\mathrm{m})}=\operatorname{cosine}\left(\tilde{v}_{k}, \tilde{\boldsymbol{s}}_{l}\right) S(m)=skl(m)=cosine(v~k,s~l)

原则上,可以使用hinge-based triplet ranking loss来优化公共空间。鉴于对齐头的良好有效性和效率折衷,作者提出使用先前学习的 S ( a ) S^{(a)} S(a)作为老师来学习的分布 S ( m ) S^{(\mathrm{m})} S(m)

具体地说,作者把从 S ( a ) S^{(\mathrm{a})} S(a)中提取 S ( m ) S^{(\mathrm{m})} S(m)的分布作为一个学习排序问题。作者使用在ListNet方法中开发的数学框架,该框架对给定所有对象的分数的情况下一个对象被排在最前面的概率进行建模。与这个框架不同,这里需要针对两个不同的纠缠分布进行优化:当句子用作查询时,文本-图像相似度的分布,以及当将图像用作查询时,图像-文本相似度的分布。具体地,在给定文本查询𝑘和图像查询𝑙的情况下,图像𝑖和文本𝑗分别相对于𝑺(A)成为第一元素的概率是:

P S ( a ) ( i ) = exp ⁡ ( s i k ( a ) ) ∑ t = 1 B exp ⁡ ( s t k ( a ) ) ; P S ( a ) ( j ) = exp ⁡ ( s l j ( a ) ) ∑ t = 1 B exp ⁡ ( s t j ( a ) ) P_{S^{(\mathrm{a})}}(i)=\frac{\exp \left(s_{i k}^{(\mathrm{a})}\right)}{\sum_{t=1}^{B} \exp \left(s_{t k}^{(\mathrm{a})}\right)} ; P_{S^{(\mathrm{a})}}(j)=\frac{\exp \left(s_{l j}^{(\mathrm{a})}\right)}{\sum_{t=1}^{B} \exp \left(s_{t j}^{(\mathrm{a})}\right)} PS(a)(i)=t=1Bexp(stk(a))exp(sik(a));PS(a)(j)=t=1Bexp(stj(a))exp(slj(a))

其中𝐵是batch大小,因为学习过程仅限于当前batch中的图像和句子。因此,在训练期间,只使用查询𝑘检索𝐵个图像,而使用查询𝑙检索𝐵个文本元素。类似地,可以在 S ( m ) S^{(\mathrm{m})} S(m)上定义类似的概率:

P S ( m ) ( i ) = exp ⁡ ( τ s i k ( m ) ) ∑ t = 1 B exp ⁡ ( τ s t k ( m ) ) ; P S ( m ) ( j ) = exp ⁡ ( τ s l j ( m ) ) ∑ t = 1 B exp ⁡ ( τ s t j ( m ) ) P_{S^{(\mathrm{m})}}(i)=\frac{\exp \left(\tau s_{i k}^{(\mathrm{m})}\right)}{\sum_{t=1}^{B} \exp \left(\tau s_{t k}^{(\mathrm{m})}\right)} ; P_{S^{(\mathrm{m})}}(j)=\frac{\exp \left(\tau s_{l j}^{(\mathrm{m})}\right)}{\sum_{t=1}^{B} \exp \left(\tau s_{t j}^{(\mathrm{m})}\right)} PS(m)(i)=t=1Bexp(τstk(m))exp(τsik(m));PS(m)(j)=t=1Bexp(τstj(m))exp(τslj(m))

其中𝜏是补偿 S ( m ) S^{(m)} S(m)在[0,1]范围内的温度超参数。实验发现,𝜏=6.0时在实践中效果很好。对于图像到文本和文本到图像的情况,最终的匹配损失都可以表示为 P S ( a ) P_{S^{(a)}} PS(a) P S ( m ) P_{S^{(m)}} PS(m)概率之间的交叉熵。

L distill  = − ∑ i = 1 B P s ( a ) ( i ) log ⁡ ( P s ( m ) ( i ) ) − ∑ j = 1 B P s ( a ) ( j ) log ⁡ ( P s ( m ) ( j ) ) \mathcal{L}_{\text {distill }}=-\sum_{i=1}^{B} P_{s^{(\mathrm{a})}(i)} \log \left(P_{s^{(\mathrm{m})}}(i)\right)-\sum_{j=1}^{B} P_{s^{(\mathrm{a})}(j)} \log \left(P_{s^{(\mathrm{m})}}(j)\right) Ldistill =i=1BPs(a)(i)log(Ps(m)(i))j=1BPs(a)(j)log(Ps(m)(j))

需要准确且密集的教师分数才能获得对教师分布 P s ( a ) ( i ) P_{\boldsymbol{s}^{(\mathrm{a})}}(i) Ps(a)(i) P s ( a ) ( j ) P_{\boldsymbol{s}^{(\mathrm{a})}}(j) Ps(a)(j)的良好估计。这在一定程度上促使选择首先研究一种有效和高效的对准头部,该对准头部可以输出分数作为匹配头部的ground truth。

3.4 Training

在训练阶段,遵守以下限制:(A)只有在训练对准头时才对主干进行微调,(B)梯度不会向后流过 S ( a ) S^{(\mathrm{a})} S(a)当训练匹配头时(如上图中通过停止梯度指示所示)。限制(B)是基于分数 S ( a ) \boldsymbol{S}^{(\mathrm{a})} S(a)用作教师分数。因此,不应该修改主干的权重,因为假设主干已经用对齐头进行了训练。考虑到这些限制,作者分两步训练网络。首先,通过使用 L triplet  \mathcal{L}_{\text {triplet }} Ltriplet 更新骨干权重来训练对齐头。然后,冻结了主干,并通过使用 L distill  \mathcal{L}_{\text {distill }} Ldistill 更新二层Transformer编码器的权值来学习匹配头。

4.实验

上表展示了本文方法在MS-COCO 1K上的检索实验结果,在测试时,除了本文的模型之外,所有报告的模型都需要按 O ( n 2 r ) O\left(n^{2} r\right) O(n2r)的顺序计算网络forward步骤的数量,其中𝑛是图像的数量,𝑟是与每个图像关联的句子数量。

作者使用类似的方法将本文的匹配头创建的公共空间与其他解缠方法进行比较。结果如上表所示。如上所述,为了比较,作者还报告了使用hinge-based triplet loss直接训练的匹配头。而不需要从对齐头中提取分数。

为了更好地显示本文的模型在计算时间方面的优势,在图上中,作者绘制了与其他方法相比本文方法的有效性与效率的关系图。

5. 总结

本文提出了一种高效的视觉-文本跨模态检索体系结构。具体来说,作者提出了使用最先进的VL Transformer作为主干,通过独立forward视觉和文本管道来了解对齐分数。然后,使用对齐头产生的分数来学习视觉-文本公共空间,该公共空间可以容易地产生可索引的定长特征。具体地说,使用学习排序蒸馏目标来解决这个问题,该目标实验性地证明了它比hinge-based triplet ranking loss优化公共空间的有效性。在MS-COCO上进行的实验证实了该方法的有效性。结果表明,该方法弥补了效率和效率之间的差距,使该系统能够部署在大规模的跨通道检索场景中。

【项目推荐】

面向小白的顶会论文核心代码库:https://github.com/xmu-xiaoma666/External-Attention-pytorch

面向小白的YOLO目标检测库:https://github.com/iscyy/yoloair

面向小白的顶刊顶会的论文解析:https://github.com/xmu-xiaoma666/FightingCV-Paper-Reading

“点个在看,月薪十万!”
“学会点赞,身价千万!”

<think>嗯,用户想了解知识蒸馏中与token处理相关的实现方法。首先,我需要回忆一下知识蒸馏的基本概念,然后结合具体的应用场景,比如自然语言处理中的token处理。记得知识蒸馏主要是教师模型指导学生模型,通过软标签传递知识。 用户提到的引用里,特别是引用[3]中的BGE M3-Embedding论文,提到了自知识蒸馏框架,其中不同token的嵌入用于不同的检索任务。比如,[CLS]嵌入用于密集检索,其他token的嵌入可能用于稀疏或多向量检索。这应该是一个关键点。 接下来,我需要整理知识蒸馏中常见的token处理方法。首先,token级别的蒸馏,比如DistilBERT的做法,可能是在每个transformer层中对齐隐藏状态或注意力矩阵。然后是多头注意力蒸馏,比如TinyBERT,可能对多个注意力头进行蒸馏。 另外,自知识蒸馏框架中提到不同token的功能划分,比如CLS其他token的处理,这可能涉及到如何将不同token的输出整合为教师信号。还有动态权重分配,根据token的重要性调整蒸馏的权重,这需要考虑如何计算重要性,比如梯度或注意力分数实现步骤方面,可能需要分阶段:首先设计教师模型学生模型的token对齐策略,比如是否每个token都需要对应;然后是损失函数的设计,包括预测分布中间层的损失;最后是批处理优化策略,比如大批量处理数据增强。 可能还要考虑数据集的构建,如引用[3]提到的多源数据整合,这对训练效果的影响。此外,蒸馏过程中的参数调整,比如温度参数如何影响软标签的生成,也是一个需要注意的点。 用户可能的应用场景是模型压缩或跨语言任务,所以实现方法需要兼顾效率效果。可能需要举一些例子,如BERT到TinyBERT的蒸馏,或者M3-Embedding中的自蒸馏方法,来具体说明token处理的技术。 最后,要确保回答结构清晰,分点列出方法、实现步骤案例,并正确引用提供的参考文献。还要生成相关问题,帮助用户进一步探索。</think>### 知识蒸馏中Token处理的实现方法 在知识蒸馏中,**Token处理**是优化学生模型对输入序列局部特征理解的关键环节。以下是具体实现方法及技术要点: --- #### 1. **Token级别的知识传递** - **核心思想**:通过教师模型学生模型的Token嵌入(Embedding)或隐藏状态(Hidden State)对齐,传递细粒度语义信息[^3]。 - **实现方式**: - **隐藏状态对齐**:例如在DistilBERT中,学生模型的每个Transformer层需匹配教师模型对应层的隐藏状态,损失函数通常为均方误差(MSE): $$L_{hidden} = \frac{1}{T} \sum_{t=1}^T \| h_t^{teacher} - h_t^{student} \|^2$$ 其中$T$为序列长度。 - **注意力矩阵对齐**:在TinyBERT中,通过强制学生模型模仿教师模型的注意力分布(如多头注意力概率矩阵),增强局部依赖关系的建模能力[^2]。 --- #### 2. **异构Token功能划分** - **自知识蒸馏框架**(如BGE M3-Embedding): - **功能划分**:将不同Token的嵌入用于不同任务。例如: - `[CLS]`嵌入用于密集检索(全局语义表示); - 其他Token的嵌入用于稀疏检索(关键词匹配)或多向量检索(局部语义表示)。 - **集成学习优化**:通过教师模型融合不同Token的预测结果(如相关性分数),生成统一的“教师信号”指导学生模型训练。 --- #### 3. **动态Token权重分配** - **重要性感知蒸馏**:根据Token的重要性动态调整蒸馏权重。例如: - **基于注意力分数**:教师模型中注意力权重高的Token(如关键词)分配更高的蒸馏权重。 - **基于梯度敏感度**:通过梯度反向传播分析Token对任务损失的贡献度,优先传递重要Token的知识。 --- #### 4. **实现步骤示例** ```python # 伪代码示例:Token隐藏状态对齐蒸馏损失计算 def token_distillation_loss(teacher_hidden, student_hidden, mask): # teacher_hidden: [batch_size, seq_len, hidden_dim] # student_hidden: [batch_size, seq_len, hidden_dim] # mask: [batch_size, seq_len](忽略padding部分) loss = 0 for t in range(teacher_hidden.size(1)): if mask[:, t].any(): diff = teacher_hidden[:, t, :] - student_hidden[:, t, :] loss += torch.mean(diff ** 2) return loss / teacher_hidden.size(1) ``` --- #### 5. **经典案例** - **BERT → TinyBERT**:通过层间隐藏状态对齐注意力矩阵蒸馏,压缩模型规模的同时保留90%以上的性能。 - **BGE M3-Embedding**:利用自知识蒸馏框架联合训练密集检索、稀疏检索多向量检索功能,提升多语言嵌入质量[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值