Qwen2.5-VL - FFN(前馈神经网络)Feedforward Neural Network

Qwen2.5-VL - FFN(前馈神经网络)Feedforward Neural Network

flyfish

复制代码
FFN(前馈神经网络)Feedforward Neural Network
├─ MLP Multi-Layer Perceptron
│  ├─ Transformer中的FFN模块(特定结构的MLP)
└─ 其他FFN(如含卷积层的网络)

FFN 是最大的概念,只要数据单向传播即属于 FFN;

MLP 是 FFN 的子集,限定为全连接层组成的网络;

Transformer 的 FFN 模块是 MLP 的特例,结构固定为 "升维→激活→降维"

FFN是数据流向层面的概念;

MLP强调全连接层的堆叠;

Transformer 的 FFN是 MLP 在 Transformer 中的标准化实现。

"全连接层" 这个术语。它最早就叫多层感知机层,是 MLP 的核心组件,每个神经元和前一层所有神经元相连,没有任何限制。随着深度学习发展,全连接层成了神经网络的 "基础设施",不仅用在 MLP 里,还出现在 CNN 的分类头、RNN 的输出层,甚至 Transformer 的 FFN 模块里。而 FFN(前馈神经网络)是个更宽泛的概念,只要数据单向流动、没有反馈回路的网络都算,MLP 其实是 FFN 的一个特例 ------ 因为它全部由全连接层组成。

复制代码
  (mlp): Qwen2_5_VLMLP(
      (gate_proj): Linear(in_features=1280, out_features=3420, bias=True)
      (up_proj): Linear(in_features=1280, out_features=3420, bias=True)
      (down_proj): Linear(in_features=3420, out_features=1280, bias=True)
      (act_fn): SiLU()
    )
python 复制代码
class Qwen2_5_VLMLP(nn.Module):
    """
    Qwen2.5-VL模型中的多层感知机(MLP)模块,采用SwiGLU门控激活机制,
    专为多模态(视觉-语言)特征处理设计,增强模型对跨模态信息的表达能力。
    """
    def __init__(self, config, bias: bool = False):
        """
        初始化MLP模块
        
        Args:
            config: 模型配置对象,包含hidden_size和intermediate_size等参数
            bias: 是否在线性层中使用偏置,默认False(与Qwen系列模型设计一致)
        """
        super().__init__()
        # 从配置中获取输入/输出维度和中间层维度
        self.hidden_size = config.hidden_size          # 输入/输出特征维度(如1280)
        self.intermediate_size = config.intermediate_size  # 中间层维度(如3420)
        
        # 定义三个核心线性投影层(命名反映功能)
        self.gate_proj = nn.Linear(
            self.hidden_size, self.intermediate_size, bias=bias
        )  # 生成门控信号,控制信息流(对应SwiGLU的门控机制)
        self.up_proj = nn.Linear(
            self.hidden_size, self.intermediate_size, bias=bias
        )  # 将特征投影到高维空间(升维操作)
        self.down_proj = nn.Linear(
            self.intermediate_size, self.hidden_size, bias=bias
        )  # 将高维特征压缩回原始维度(降维操作)
        
        # 激活函数(通过配置获取,通常为SiLU/Swish函数)
        self.act_fn = ACT2FN[config.hidden_act]

    def forward(self, hidden_state):
        """
        前向传播逻辑:实现SwiGLU门控激活的MLP计算
        
        Args:
            hidden_state: 输入特征张量,形状为(batch_size, seq_len, hidden_size)
        
        Returns:
            经过MLP处理后的输出特征,形状保持(batch_size, seq_len, hidden_size)
            
        计算流程:
            1. gate_proj生成门控信号 → 2. 应用SiLU激活
            3. up_proj生成激活信号 → 4. 门控信号与激活信号逐元素相乘
            5. down_proj将结果投影回原始维度
        """
        # 1. 生成门控信号并激活,2. 生成激活信号,3. 门控机制融合
        gated_activation = self.act_fn(self.gate_proj(hidden_state)) * self.up_proj(hidden_state)
        # 4. 降维输出
        return self.down_proj(gated_activation)

门控(gate)

升维(up)

降维(down)

在Qwen2.5-VL的MLP模块中,"门控"(Gate)的命名源于其核心机制------通过门控信号选择性地控制信息流,就像现实中"门"的开关能决定多少信息通过一样。

门控机制的本质:用信号"加权"信息流动

  1. 数学视角:门控即乘法加权

    在代码的forward中,关键操作是:

    python 复制代码
    gated_activation = self.act_fn(self.gate_proj(hidden_state)) * self.up_proj(hidden_state)

    这里,gate_proj生成的张量(门控信号)经过激活函数(如SiLU)后,输出值分布在(0,1)区间。该信号与up_proj的输出逐元素相乘,等价于用门控信号对特征进行加权

    • 门控信号接近1时,对应特征"被允许通过";
    • 接近0时,特征"被抑制"。
  2. 直观比喻:信息的"筛选器"

    想象门控信号是一把"筛子",高值区域让重要特征通过(如视觉中的物体边缘、语言中的关键词),低值区域过滤噪声或无关信息,从而让模型聚焦于跨模态交互的关键信息。

相关推荐
中杯可乐多加冰10 分钟前
【AI落地应用实战】AIGC赋能职场PPT汇报:从效率工具到辅助优化
人工智能·深度学习·神经网络·aigc·powerpoint·ai赋能
东临碣石8219 分钟前
【AI论文】BlenderFusion:基于三维场景的视觉编辑与生成式合成
人工智能
正在走向自律21 分钟前
第二章-AIGC入门-开启AIGC音频探索之旅:从入门到实践(6/36)
人工智能·aigc·音视频·语音识别·ai音乐·ai 音频·智能语音助手
Trent198527 分钟前
影楼精修-智能修图Agent
图像处理·人工智能·计算机视觉·aigc
烟锁池塘柳028 分钟前
【大模型】解码策略:Greedy Search、Beam Search、Top-k/Top-p、Temperature Sampling等
人工智能·深度学习·机器学习
盼小辉丶44 分钟前
PyTorch实战(14)——条件生成对抗网络(conditional GAN,cGAN)
人工智能·pytorch·生成对抗网络
Allen_LVyingbo1 小时前
数智读书笔记系列035《未来医疗:医疗4.0引领第四次医疗产业变革》
人工智能·经验分享·笔记·健康医疗
zzc9212 小时前
时频图数据集更正程序,去除坐标轴白边及调整对应的标签值
人工智能·深度学习·数据集·标签·时频图·更正·白边
isNotNullX2 小时前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析
riveting2 小时前
明远智睿H618:开启多场景智慧生活新时代
人工智能·嵌入式硬件·智能硬件·lga封装·3506