【多模态】多模态特征融合策略——门控多模态融合方法

1 原理介绍

是多模态分类任务——也就是融合视觉和文本特征,并进行分类。这篇文章主要的亮点在于使用了类似于LSTM中的gate机制,提出了一种基于门控神经网络的多模态学习新模型。 门控多模态单元 (GMU) 模型旨在用作神经网络架构中的内部单元,其目的是根据来自不同模态的数据的组合找到中间表示。 GMU 学习使用乘法门来决定模态如何影响单元的激活。

我们提出的模块基于门的想法,用于选择输入的哪些部分更有可能有助于正确生成所需的输出。 我们使用同时为各种特征分配重要性的乘法门,创建不需要手动调整的丰富的多模态表示,而是直接从训练数据中学习。

这项工作的主要假设是,与手动编码的多模态融合架构相比,使用门控单元的模型将能够学习一种依赖于输入的门控激活模式,该模式决定了每种模态如何对隐藏单元的输出做出贡献 。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e28221be22a475d9ea870e126b6641d.png
每个 x i x_i xi 对应一个与模态 i i i 相关的特征向量。 每个特征向量都为神经元提供一个 t a n h tanh tanh 激活函数,该函数旨在根据特定的模态对内部表示特征进行编码。 对于每个输入模态 x i x_i xi,都有一个门神经元(在图中由 σ 节点表示),它控制从 x i x_i xi 计算的特征对单元整体输出的贡献。 当一个新样本被馈送到网络时,与模态 i i i 相关的门神经元接收来自所有模态的特征向量作为输入,并使用它们来决定模态 i i i 是否有助于特定输入的内部编码样本。

图 2.b 显示了用于两种输入模态 x v x_v xv(视觉模态)和 x t x_t xt(文本模态)的 G M U GMU GMU 的简化版本,将在本文的其余部分中使用。 应该注意的是,这两个模型并不完全等效,因为在双峰情况下,门是绑定的。 这种权重绑定限制了模型,因此单元在两种模式之间进行权衡,同时它们使用的参数少于多模式情况。 控制这个 GMU 的方程如下
在这里插入图片描述

2 代码实现

class GatedMultimodalLayer(nn.Module):
    """ 
    Gated Multimodal Layer based on 'Gated multimodal networks, 
    Arevalo1 et al.' (https://arxiv.org/abs/1702.01992) 
    """
    def __init__(self, size_in1, size_in2, size_out=16):
        super(GatedMultimodalLayer, self).__init__()
        self.size_in1, self.size_in2, self.size_out = size_in1, size_in2, size_out
        
        self.hidden1 = nn.Linear(size_in1, size_out, bias=False)
        self.hidden2 = nn.Linear(size_in2, size_out, bias=False)
        self.hidden_sigmoid = nn.Linear(size_out*2, 1, bias=False)

        # Activation functions
        self.tanh_f = nn.Tanh()
        self.sigmoid_f = nn.Sigmoid()

    def forward(self, x1, x2):
        h1 = self.tanh_f(self.hidden1(x1))
        h2 = self.tanh_f(self.hidden1(x2))
        x = th.cat((h1, h2), dim=1)
        z = self.sigmoid_f(self.hidden_sigmoid(x))

        return z.view(z.size()[0],1)*h1 + (1-z).view(z.size()[0],1)*h2

3 参考文献

[1]【多模态】《GATED MULTIMODAL UNITS FOR INFORMATION FUSION》论文阅读笔记
[2]https://github.com/IsaacRodgz/GMU-Baseline/tree/master/runs_pl

### 门控融合算法概述 门控融合是一种通过控制信息流来增强模型性能的技术,在时间序列建模和多特征分类预测中具有重要作用。它通常结合注意力机制,能够动态调整不同输入特征的重要性权重[^1]。 #### 门控循环单元(GRU) 门控循环单元(Gated Recurrent Unit, GRU)是RNN的一种变体,用于解决长期依赖问题。其核心思想在于引入更新门 \(z_t\) 和重置门 \(r_t\) 来调节隐藏状态的信息流动。具体计算如下: \[ z_t = \sigma(W_z x_t + U_z h_{t-1} + b_z) \] \[ r_t = \sigma(W_r x_t + U_r h_{t-1} + b_r) \] \[ \tilde{h}_t = \text{tanh}(W_h x_t + U_h (r_t * h_{t-1}) + b_h) \] \[ h_t = (1-z_t)*h_{t-1} + z_t*\tilde{h}_t \] 其中,\(x_t\) 是当前时刻的输入向量,\(h_{t-1}\) 表示前一时刻的隐层状态,而 \(z_t\) 和 \(r_t\) 则分别决定如何保留旧的状态以及如何利用新的候选状态[\(^1]\)。 #### 注意力机制的作用 在多特征场景下,单纯依靠GRU可能无法有效捕捉到重要特征之间的关联关系。因此,可以进一步融入注意力机制以提升模型表现。注意力分数可以通过以下方式定义: \[ e_{ij} = q_i^T W_a k_j \] \[ a_{ij} = \frac{\exp(e_{ij})}{\sum_k \exp(e_{ik})} \] 这里,\(q_i\) 可视为查询(Query),代表某个特定位置上的上下文表示;\(k_j\) 对应键(Key),用来衡量其他部分对于该位置的相关程度;最终得到的概率分布即为加权系数\[ ^1 ] 。这些权重会被应用于原始数据或者中间表征上从而形成更加聚焦的新版本特征集合供后续处理阶段使用。 #### MATLAB实现片段 以下是基于MATLAB的一个简化版伪代码展示如何构建带有注意力建构的PSO优化后的GRU网络结构来进行分类任务: ```matlab % 初始化参数 numFeatures = size(XTrain, 2); numHiddenUnits = 100; net = layerGraph; % 添加GRU Layer gruLayer = gruLayer(numHiddenUnits,'OutputMode','last'); net = addLayers(net,gruLayer); % 定义Attention Mechanism Function attentionWeights = fullyConnectedLayer(1,... 'Name','fc_attention',... 'BiasL2Factor',0.001,... 'WeightLearnRateFactor',10); reluLayer = reluLayer('Name','relu_attention'); softmaxLayer = softmaxLayer('Name','softmax_attention'); % 构造完整的神经网络架构并训练... ``` 上述代码仅作为概念演示用途,并未完全体现整个流程细节。实际应用过程中还需要考虑更多因素比如正则化项设置、超参调优等问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值