深度解析:基于混合专家(MoE)与互信息解耦的多模态知识图谱推理架构
1. 异构特征对齐与初始化
- 图谱特征structure来源于真实数据集,经过
head2id以及relation2id,把实体和关系使用数字表示,然后将这些数字进行Structure Embedding查询并转化成struct_entity_embedding和struct_relation_embedding。关于维度,在head2id和relation2id后,shape为[batch_size],经过Structure Embedding后,shape变为[batch_size, dim]和[batch_size, r_dim](在本模型中dim = r_dim)。 - 图像特征来源于预训练的ViT模型的
Offline Visual Features,由于Offline Visual Features的维度与structure的维度不一致且差距较大,直接使用Linear映射会导致严重的语义扭曲问题,并且会引入参数增加计算量,所以在本模型中选择使用AvgPool空间池化的方法进行特征映射,并且使用降维后的特征作为img_entity_embedding,并且允许对该特征进行微调。但是由于缺乏表示relation的图像特征,所以img_relation_embedding无法使用图像特征进行表示,所以采用符合正态分布的初始化进行补充。shape经过AvgPool会发生变化[batch_size, visual_features_dim]->[batch_size, img_dim]。 - 文本特征来源于预训练的BERT模型的
Offline Text Features,与图像特征类似,本模型选择使用Adaptive AvgPool的方法进行特征映射,并且使用降维后的特征作为txt_entity_embedding,并且允许对该特征进行微调。与图像特征不同的是,这里的空间池化方法是自适应的,该设计的原因是防止BERT的Offline Text Features长度不一致。同样的,也缺乏表示relation的文本特征,所以txt_relation_embedding无法使用文本特征进行表示,所以采用符合正态分布的初始化进行补充。shape经过Adaptive AvgPool会发生变化[batch_size, text_features_dim]->[batch_size, txt_dim]。
2. 并行混合专家自适应层
2.1 总述
在这一层中,分别有Structure MoE、Visual MoE和Text MoE三个混合专家网络,每一个混合专家网络内部有num_exps个专家,并且有一个Gate对专家的打分情况进行加权融合。
2.2 X_MoE
2.2.1 Expert
每一个Expert本质上由一个Dropout Layer和一个Linear Layer组成,这些专家同时对entity_embedding和relation_embedding进行处理,以致力于从不同的角度上学习特征。这些专家的输出经过stack后shape变化[batch_size, dim]->[batch_size, dim]--stack-->[batch_size, num_experts, dim]。
2.2.2 Gate
Gate本质上也是一个Linear Layer和一个Softmax组成。Linear Layer通过把输入来的entity_embedding和relation_embedding进行处理,然后输出num_experts个数字表示原始权重,然后经过Softmax后把这num_experts的原始权重映射到[0,1][0, 1][0,1]之间,成为本次混合专家的权重值。shape变化情况为[batch_size, dim]--LinearLayer-->[batch_size, num_experts]--Softmax-->[batch_size, num_experts]。
2.2.3 求哈达玛积并输出
当前经过stack后的专家团原始输出的shape为[batch_size, num_experts, dim],Gate的输出为[batch_size, num_experts],我们需要对得分进行unsqueeze把得分变为[batch_size, num_experts, 1],然后利用Broadcasting机制实现专家团输出与得分相乘,得到的最终加权后的结果,然后在dim=1的维度上相加,最终得到multiple_outputs [batch_size, dim]。
最终返回三个值:
multiple_outputs [batch_size, dim]:最终加权后的专家团结果,用于后续的fuse。expert_outputs [batch_size, num_experts, dim]:经过stack后的专家团成员的独立结果,用于后续解耦操作。gate [batch_size, num_experts]:gate对于本次样本的打分权重。
3. 自适应融合层
3.1 X_Modal
由于该模型有三种模态,所以在这个部分分别有Structure ModalVisual Modal以及Text Modal。
在每一个X_Modal中,有multi个子模块,这些子模块分别由一层RELU一层Linear Layer以及一层Dropout组成。每一个X_Modal的输入就是并行混合专家自适应层的对应的X_MoE的输出中的multiple_outputs [batch_size, dim]。
💡 架构设计动机(Why Multi?):这种并行multi个子模块的设计,借鉴了深度学习中的“多视角表征(Multi-View)”与“多头机制(Multi-Head)”思想,其核心优势在于: 1.多维语义解耦:知识图谱实体往往具备极其丰富的多重语义。单一的线性层容易导致特征表达同质化,而并行的multi个子模块能够将输入的单一向量投影到multi个不同的语义子空间中,从多维度全面挖掘模态的内在特征。 2.细粒度的注意力分配:为后续的Attention Scorer提供了更丰富的特征候选池。使得注意力机制不仅能在“模态与模态之间”分配权重,更能精准下钻到“同一模态的不同语义切面”进行动态打分,极大增强了模型应对复杂推理任务的表达能力。 3.提升特征鲁棒性:结合模块内部的Dropout层,多分支并行的结构避免了单点故障引起的特征丢失,提高了模型在面对噪声数据时的容错率。
3.2 动态模态注意力模块
该模块中含有模态数个multi个Attention Scorer Block。第i个Attention Scorer Block用于处理第i个所有的X_Modal[i]的输出,即第i个Attention Scorer Block处理分别来自Structure Modal[i]Visual Modal[i]和Text Modal[i]的输出,他们的输出shape为[batch_size, dim]。
3.2.1 Attention Scorer Block
Attention Scorer Block的本质就是一个Linear Layer以及一些shape变换操作,最终求一个哈达玛积的模块。
三路数据到达Attention Scorer Block后,首先会被stack在dim=1上组合到一起,组合后[batch_size, 3, dim]。然后经过Attention Scorer得到一个值,然后进行Softmax[batch_size, 3, dim]->[batch_size, 3, 1]--squeeze-->[batch_size, 3]--softmax-->[batch_size, 3]--unsqueeze-->[batch_size, 3, 1],其中经过softmax后的得分我们称为attention_weights [batch_size, 3],然后最终得分在与stack后的结果[batch_size, 3, dim]利用Broadcasting机制进行哈达玛积,最终得到的结果[batch_size, 3, dim]在dim=1求和得到最终融合结果[batch_size, dim]。
然后把multi个Attention Scorer Block的最终融合结果[batch_size, dim]在dim=1上继续stack,堆叠后[batch_size, multi, dim],然后在dim=1上直接求和得到融合后的最终结果x_mm [batch_size, dim]。
最终返回两个值:
x_mm [batch_size, dim]:最终三个模态融合后的结果。attention weights [batch_size, 3]:最后一个Attention Scorer Block的权重值。
4. 互信息估计器
从输入的数据来看,互信息估计器接受的数据分别来源于并行混合专家自适应层的对应模态的expert_outputs [batch_size, num_experts, dim],即经过stack后的专家团成员的独立结果。互信息估计器就是利用各个模态下的专家团成员的独立结果,来计算互信息的。
4.1 理论基础
4.1.1 互信息
互信息I(X;Y)I(X; Y)I(X;Y)衡量得失两个随机变量XXX和YYY之间的相关性,或者说“已知XXX的情况下,YYY的不确定性减少了多少”。
公式为:
I(X;Y)=Ep(x,y)[logp(x,y)p(x)p(y)] I(X; Y)=\mathbb{E}_{p(x, y)}[log\frac{p(x, y)}{p(x)p(y)}]I(X;Y)=Ep(x,y)[logp(x)p(y)p(x,y)]
- p(x,y)p(x, y)p(x,y)是XXX和YYY的联合分布(他们同时出现的概率,即正样本对)。
- p(x)p(y)p(x)p(y)p(x)p(y)是边缘分布的乘积(假设他们完全独立,对应代码里打乱顺序拼接在一起的负样本对)。
XXX和YYY表示两个不同的专家提取的特征,如果I(X;Y)I(X; Y)I(X;Y)很高,说明两个专家学到的东西高度重合(表征塌陷)。我们要在Loss里减去这个值,强迫他们正交(解耦)。
4.1.2 CLUB(变分互信息上限)
真实世界中,高维特征的真实分布p(x,y)p(x, y)p(x,y)我们不知道!直接算不出来。
CLUB(Contrastive Log-ratio Upper Bound 对比对数率上界)提出了用一个神经网络qθ(y∣x)q_{\theta}(y|x)qθ(y∣x)去逼近真实的条件分布p(y∣x)p(y|x)p(y∣x),从而求出互信息的上界。
公式为:
I(X;Y)≤Ep(x,y)[log(qθ(y∣x))]−Ep(x)p(y)[log(qθ(y∣x))] I(X;Y)≤\mathbb{E}_{p(x,y)}[log(q_\theta(y|x))]-\mathbb{E}_{p(x)p(y)}[log(q_\theta(y|x))]I(X;Y)≤Ep(x,y)[log(qθ(y∣x))]−Ep(x)p(y)[log(qθ(y∣x))]
- Ep(x,y)[log(qθ(y∣x))]\mathbb{E}_{p(x,y)}[log(q_\theta(y|x))]Ep(x,y)[log(qθ(y∣x))]:正样本对对数似然
positive。 - Ep(x)p(y)[log(qθ(y∣x))]\mathbb{E}_{p(x)p(y)}[log(q_\theta(y|x))]Ep(x)p(y)[log(qθ(y∣x))]:负样本对对数似然
negative。 - 两者的差值求平均就是变分互信息上限。
高斯分布的概率密度函数 (PDF) 公式是:
P(y∣x)=12πσ2exp(−(y−μ)22σ2) P(y|x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{(y-\mu)^2}{2\sigma^2} \right)P(y∣x)=2πσ21exp(−2σ2(y−μ)2)
两边同时取对数(Log-likelihood,对数似然),并且忽略常数项log(12πσ2)\log(\frac{1}{\sqrt{2\pi\sigma^2}})log(2πσ21),我们就得到了核心指数部分:
logP(y∣x)∝−(y−μ)22σ2 \log P(y|x) \propto -\frac{(y-\mu)^2}{2\sigma^2}logP(y∣x)∝−2σ2(y−μ)2
mu=μ\muμ(由self.p_mu网络预测)logvar.exp()=elogσ2=σ2e^{\log\sigma^2} = \sigma^2elogσ2=σ2(方差,由self.p_logvar网络预测)(mu - y_samples)**2 / logvar.exp()=(y−μ)2σ2\frac{(y-\mu)^2}{\sigma^2}σ2(y−μ)2- 最后在
forward的结尾return upper_bound / 2.0。这里的除以 2.0,完美对应了高斯分布公式分母里的那个2σ22\sigma^22σ2中的2!
这就是为什么神经网络只需输出均值和方差,就能通过高斯假设计算出概率!
4.2 互信息估计器
每次会随机选择两个专家x和专家y。即对于Structure MoE、Text MoE以及Visual MoE的专家团中分别选择专家x和专家y。然后输入他们的专家团的独立信息expert_outputs [batch_size, num_experts, dim]。然后单独取这两个专家的信息,shape为[batch_size, dim]。
通过随机打乱索引,把原本不配对的 X 和 Y 强行凑在一起,以此来构造【负样本对】。
通过变分推断网络1(均值方差)和变分推断网络2(对数方差)对于输入的X的[batch_size, dim]分别预测mu和logvar。然后计算【正样本对】的对数似然和【负样本对】的对数似然[batch_size, dim]。然后就可以计算互信息上界upper_bound。
5. Multi_MoE
- 获取
head和relation的ID[batch_size] - 实体特征查表
X_head = self.X_entity_embedding(head)[batch_size, dim] - 经过
X_MoE,得到e_embed即MoE加权后的综合意见[batch_size, dim]以及未经融合的专家团的独立专家意见结合disen_X[batch_size, num_experts, dim] - 关系特征查表本质上是对关系ID
relation [batch_size]经过relation_embedding的查询将relation映射成r_embed [batch_size, r_dim](r_dim=dim)。然后r_img_embed, r_txt_embed = r_embed, r_embed。这属于一种参数共享策略,因为关系作为抽象谓词,本身存在模态缺失问题。 - 将
e_embed和r_embed分别传入Adapt Fusion Layer得到融合后的e_mm_embed和r_mm_embed。 - 计算预测得分,原理是head×relation=tailhead \times relation = tailhead×relation=tail。
pred_s = e_embed * r_embed, pred_s [batch_size, dim]。得到pred_s, pred_i, pred_d, pred_mm。 - 得到所有实体的权重
all_s, all_v, all_t [num_entities, dim],并且把这三个实体的Embedding经过AdaptFusion Layer,获得三种模态融合后的融合实体Embeddingall_f [num_entities, dim]。 - 然后将预测出的
pred_X [batch_size, dim]与all_X.transpose(1, 0) [dim, num_entities]相乘,得到新的pred_X_score [batch_size, num_entities]。此时pred_X_score中的每一个batch中的num_entities个数字就表示该head * relation对应所有实体的可能性,然后再对pred_X_score进行Sigmoid处理将每一个可能性映射到[0,1][0, 1][0,1]之间。
