基于自注意力机制(Self-Attention)的跨模态检索算法详解
字数 3016 2025-12-16 23:05:59
基于自注意力机制(Self-Attention)的跨模态检索算法详解
题目描述
在自然语言处理与计算机视觉交叉的领域,跨模态检索是一项核心任务,其目标是在不同模态的数据(如文本和图像)之间建立语义关联,实现“以文搜图”或“以图搜文”。传统的跨模态检索方法通常依赖手工设计的特征和浅层对齐模型,效果有限。本题目将详细讲解一种基于自注意力机制的跨模态检索算法。该算法利用自注意力机制分别捕捉文本和图像内部的细粒度语义结构,再通过跨模态注意力实现模态间的对齐,从而学习到更具判别性的联合表示,显著提升检索精度。
解题过程
我们以“图文检索”为典型场景,将算法分解为以下步骤:
第一步:问题定义与模型输入
- 目标:给定一个查询(Query,例如一段文本描述),从候选库(Gallery,例如一堆图片)中找出语义最相关的内容,反之亦然。
- 模型输入:
- 文本模态:一段文本描述,通常被转换为词序列,每个词用一个预训练词向量(如Word2Vec、GloVe)表示。假设输入文本有
n个词,则文本输入为矩阵T ∈ R^(n×d_t),其中d_t是词向量维度。 - 图像模态:一张图片,首先通过一个预训练的卷积神经网络(CNN,如ResNet)提取其高层特征。通常取CNN最后一个卷积层的特征图(Feature Map),将其视为一系列视觉区域的特征集合。假设特征图大小为
h × w × c,可以将其重塑为m = h × w个区域,每个区域是一个c维向量。图像输入为矩阵V ∈ R^(m×d_v),其中d_v是视觉特征维度。
- 文本模态:一段文本描述,通常被转换为词序列,每个词用一个预训练词向量(如Word2Vec、GloVe)表示。假设输入文本有
第二步:模态内特征编码与自注意力建模
此步骤的核心是分别用自注意力机制增强文本和图像的特征表示,使其能关注各自内部的重要元素及其相互关系。
-
文本自注意力(Intra-Modal Self-Attention for Text):
- 目的:让文本中的每个词都能“看到”文本中所有其他词的信息,从而得到包含全局上下文信息的词表示。例如,在描述“一只黑色的猫在追红色的球”时,通过自注意力,“黑色”能更明确地与“猫”关联,“红色”与“球”关联。
- 过程:
a. 对文本特征矩阵T,通过三个不同的线性变换,生成查询(Query)矩阵Q_t、键(Key)矩阵K_t和值(Value)矩阵V_t。
b. 计算注意力分数矩阵:A_t = softmax( (Q_t * K_t^T) / sqrt(d_k) ),其中d_k是K_t的维度,softmax按行进行。A_t的第i行第j列表示第i个词对第j个词的注意力权重。
c. 计算加权和:T‘ = A_t * V_t。得到的T’就是经过自注意力增强后的文本特征,每个词向量都融合了整句的语义信息。 - 多头机制:为了捕捉不同的语义子空间关系,通常会使用“多头自注意力”,即将上述过程并行执行多次(多个“头”),然后将结果拼接并线性变换,得到最终的增强文本特征
H_t ∈ R^(n×d)。
-
图像自注意力(Intra-Modal Self-Aattetion for Image):
- 目的:让图像中的每个局部区域(例如猫的头部、尾巴、球体)能够交互,从而整合出更具语义完整性的图像表示。例如,模型可以学会将“猫眼”、“猫耳”、“胡须”等区域的特征关联起来,形成“猫”的全局概念。
- 过程:与文本自注意力完全对称。对图像特征矩阵
V,同样进行线性变换得到Q_v, K_v, V_v,然后计算注意力分数A_v和加权和V’。通过多头机制,最终得到增强图像特征H_v ∈ R^(m×d)。 - 统一维度:通常会将文本和图像的特征映射到同一隐空间维度
d,方便后续跨模态交互。
第三步:跨模态注意力与特征对齐
这是算法的关键,旨在建立文本和图像之间的细粒度语义关联。
-
计算跨模态注意力:
- 目的:计算文本的每个词对图像所有区域的注意力,以及图像的每个区域对文本所有词的注意力。这实现了“词-区域”级别的软对齐。
- 文本到图像的注意力:以文本为查询(Query),图像为键和值(Key, Value)。
- 查询来自增强文本特征
H_t,键和值来自增强图像特征H_v。 - 计算注意力分数:
A_t2v = softmax( (H_t * H_v^T) / sqrt(d) ),形状为n×m。A_t2v[i, j]表示第i个词对第j个图像区域的关注度。 - 加权求和:
C_t = A_t2v * H_v,得到每个词基于图像内容“被关注”后的新特征C_t ∈ R^(n×d)。
- 查询来自增强文本特征
- 图像到文本的注意力:对称地,以图像为查询,文本为键和值,计算
A_v2t和C_v ∈ R^(m×d)。
-
特征融合与池化:
- 将原始增强特征与经过跨模态注意力调整后的特征进行融合(如拼接、相加或门控融合),得到最终的文本感知图像表示和图像感知文本表示。
- 对融合后的特征序列(
n个词表示,m个区域表示)进行全局池化(如最大池化、平均池化或自注意力池化),得到固定维度的全局文本向量g_t和全局图像向量g_v。这些向量是模态间对齐后的联合语义表示。
第四步:目标函数与训练
为了使学到的联合表示可用于检索,需要定义一个损失函数来拉近匹配的图文对,推远不匹配的图文对。
- 相似度度量:通常使用余弦相似度
sim(g_t, g_v) = (g_t · g_v) / (||g_t|| * ||g_v||)来衡量文本和图像向量的相关性。 - 损失函数:常用三元组损失(Triplet Loss) 或InfoNCE损失。
- 三元组损失:对于一个“锚点”(如一段文本),与其匹配的图片是“正例”,不匹配的图片是“负例”。损失函数要求锚点与正例的距离小于锚点与负例的距离至少一个边界值(margin)。
- InfoNCE损失(更常用):将跨模态检索视为一个多类分类问题。对于一个批次的N个图文对,将每个文本与所有N个图像计算相似度,视匹配的图为正类,其他N-1个为负类,通过交叉熵损失优化。对图像查询文本的任务对称处理。最终的损失是双向损失的和。这鼓励匹配对的相似度得分远高于不匹配对。
第五步:检索与推理
模型训练完成后,即可用于检索:
- 离线建库:将整个图片库中的所有图片输入模型,得到其全局图像向量
g_v,存入数据库。 - 在线查询:
- 以文搜图:用户输入一段文本,模型计算其全局文本向量
g_t。然后在数据库中计算g_t与所有g_v的余弦相似度,按相似度从高到低返回对应的图片。 - 以图搜文:过程对称,用查询图片的
g_v去匹配所有文本的g_t。
- 以文搜图:用户输入一段文本,模型计算其全局文本向量
总结
基于自注意力机制的跨模态检索算法,通过模态内自注意力增强了文本和图像各自的特征表示能力,再通过跨模态注意力实现了细粒度的语义对齐。最后,在统一的语义空间中使用对比学习目标进行优化。这种方法能够有效捕捉图文之间复杂的、非局部的语义对应关系,从而在各种跨模态检索基准(如MS-COCO、Flickr30k)上取得了当时的最优性能。其核心思想——利用注意力机制建模序列内部及序列间的复杂依赖——也成为后续更先进的跨模态理解模型(如ViLBERT、UNITER等)的基础。