好的,我们来看看组合来自不同模态信息的另一种方法:中间层次的合并。这种策略介于原始数据合并(早期合并)和独立决策组合(后期合并)之间。在中间层次的合并中,每种数据,比如文本或图像,首先会独立进行处理,以提取有意义的特征。可以将这些视为每个输入的浓缩概要。只有在进行这种初始处理之后,这些概要,或者说特征表示,才会被合并。“先处理,后合并”的理念中间层次合并的核心理念是,让每种模态在信息被组合之前,进行一些初始的、专门的处理。它通常这样运作:单独特征提取:每种模态(例如,文本、图像、音频)被输入到其各自的专用模型或操作集合中,旨在提取相关特征。对于文本,这可能涉及将单词转换为数值向量(嵌入),然后处理这些嵌入的序列以获取句子或段落的含义。输出是一个文本特征向量。对于图像,卷积神经网络(CNN)可能会处理像素以识别形状、纹理和物体,从而生成一个图像特征向量。对于音频,原始声波可能会被转换为频谱图,然后由另一个神经网络进行处理,以生成一个音频特征向量。合并已处理特征:一旦我们有了这些特征向量,每种模态一个,下一步就是组合它们。这就是实际“合并”发生的地方。有几种常见的做法:拼接:这可能是最直接的方法。来自不同模态的特征向量只是简单地首尾相接,以创建一个更长的单一特征向量。如果你有一个图像特征向量 $v_{\text{image}}$ 和一个文本特征向量 $v_{\text{text}}$,拼接它们会是这样: $$ v_{\text{fused}} = \text{concat}(v_{\text{image}}, v_{\text{text}}) $$ 如果 $v_{\text{image}}$ 的维度是 $d_1$,而 $v_{\text{text}}$ 的维度是 $d_2$,那么 $v_{\text{fused}}$ 的维度将是 $d_1 + d_2$。这个组合向量现在包含了来自两种模态的信息。元素级运算:如果来自不同模态的特征向量具有相同的维度,你可以逐个元素地组合它们。求和:$v_{\text{fused}} = v_{\text{image}} + v_{\text{text}}$。合并向量中的每个元素是输入向量中对应元素的和。平均:与求和类似,但你对对应元素求平均。乘法(元素级乘积):$v_{\text{fused}} = v_{\text{image}} \odot v_{\text{text}}$。合并向量中的每个元素是对应元素的乘积。这有时可以帮助模型学习特征之间的关联。更复杂的关联方式:这些简单操作有更高级的实现。例如,双线性池化等方法可以捕获两种模态所有特征对之间更复杂的乘法关联。注意力机制,我们稍后会讨论,也可以在中间层次合并中发挥作用,通过允许一种模态在合并过程之前或期间选择性地关注另一种模态特征的重要部分。后续处理:在特征被合并成单一表示后,这个组合表示通常会送入神经网络的后续层。这些层会学习基于来自所有模态的整合信息进行预测或决策。中间层次合并的可视化以下图表说明了中间层次合并的流程:digraph G { rankdir=TB; node [shape=box, style="filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_modality_A { label="模态 A (例如,文本)"; labelloc="b"; style="dotted"; color="#adb5bd"; A_input [label="输入 A", fillcolor="#a5d8ff"]; A_extractor [label="特征提取器 A\n(例如,文本模型)", fillcolor="#74c0fc"]; A_features [label="特征 A\n(例如,文本向量)", fillcolor="#4dabf7"]; A_input -> A_extractor; A_extractor -> A_features; } subgraph cluster_modality_B { label="模态 B (例如,图像)"; labelloc="b"; style="dotted"; color="#adb5bd"; B_input [label="输入 B", fillcolor="#ffc9c9"]; B_extractor [label="特征提取器 B\n(例如,CNN)", fillcolor="#ffa8a8"]; B_features [label="特征 B\n(例如,图像向量)", fillcolor="#ff8787"]; B_input -> B_extractor; B_extractor -> B_features; } fusion_layer [label="合并层\n(例如,拼接,\n元素级求和)", fillcolor="#96f2d7", shape=oval]; fused_representation [label="合并表示", fillcolor="#63e6be"]; further_processing [label="后续处理\n(例如,全连接层)", fillcolor="#38d9a9"]; output_node [label="输出\n(例如,分类,\n回归)", fillcolor="#20c997", shape=ellipse]; A_features -> fusion_layer [label="来自模态 A 的特征"]; B_features -> fusion_layer [label="来自模态 B 的特征"]; fusion_layer -> fused_representation; fused_representation -> further_processing; further_processing -> output_node; }来自模态 A(如文本)和模态 B(如图像)的数据首先由各自的特征提取器处理。生成的特征随后在一个合并层中组合,生成一个合并表示,该表示会通过更多层以获得最终输出。中间层次合并的优点为何选择中间层次合并?它提供了多项益处:均衡的整合:它允许模态在一定程度上以其“原生语言”进行处理,在强制它们采用共同格式之前提取高质量特征。这通常比早期合并更具弹性,早期合并可能难以处理差异很大的数据结构或采样率。习得的关联:模型可以学习如何最好地组合已经处理过的、更丰富的特征。这通常比后期合并更有效,后期合并中独立决策被组合,可能遗漏模态间不明显的关联。异构数据的弹性处理:每种模态可以有其量身定制的特征提取架构。例如,用于图像的复杂 CNN 和用于文本的先进循环神经网络(RNN)或 Transformer。表示能力:为每种模态提取的特征通常比原始数据更抽象、语义更丰富。在此级别进行合并使模型能够学习这些更高层次理念之间的关系。何时选择中间层次合并较为合适?中间层次合并对于某些任务特别有用,在这些任务中,特征级别模态间的关联对于最终结果很重要。以一个应用为例,例如视觉问答(VQA)。要回答关于图像的问题(例如,“这辆车是什么颜色?”),系统需要:理解图像的内容(提取视觉特征,如物体、颜色、位置)。理解问题的含义(提取识别所提问内容的文本特征)。然后,它必须将问题的特定部分与图像的特定部分关联起来以找到答案。这种关联通常通过在中间阶段合并图像特征和问题特征来实现。类似地,在多模态情感分析中,来自文本(所说内容)、音频(语调)和视频(面部表情)的特征可以单独提取,然后合并,以获得比任何单一模态单独提供更可靠的情感预测。中间层次合并代表了一种强大且有弹性的方式,用于在多模态系统中整合信息。通过在组合之前将每种模态处理到适当的抽象级别,它取得了平衡,这通常能在复杂任务上取得有效表现。随着你继续学习,你会看到这种策略出现在许多不同的多模态架构中。