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. 直观比喻:信息的"筛选器"

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

相关推荐
非门由也几秒前
《sklearn机器学习——管道和复合估计器》联合特征(FeatureUnion)
人工智能·机器学习·sklearn
l12345sy几秒前
Day21_【机器学习—决策树(1)—信息增益、信息增益率、基尼系数】
人工智能·决策树·机器学习·信息增益·信息增益率·基尼指数
非门由也几秒前
《sklearn机器学习——管道和复合估算器》异构数据的列转换器
人工智能·机器学习·sklearn
计算机毕业设计指导11 分钟前
基于ResNet50的智能垃圾分类系统
人工智能·分类·数据挖掘
飞哥数智坊16 分钟前
终端里用 Claude Code 太难受?我把它接进 TRAE,真香!
人工智能·claude·trae
小王爱学人工智能1 小时前
OpenCV的阈值处理
人工智能·opencv·计算机视觉
新智元1 小时前
刚刚,光刻机巨头 ASML 杀入 AI!豪掷 15 亿押注「欧版 OpenAI」,成最大股东
人工智能·openai
机器之心1 小时前
全球图生视频榜单第一,爱诗科技PixVerse V5如何改变一亿用户的视频创作
人工智能·openai
新智元1 小时前
2025年了,AI还看不懂时钟!90%人都能答对,顶尖AI全军覆没
人工智能·openai
湫兮之风1 小时前
OpenCV: Mat存储方式全解析-单通道、多通道内存布局详解
人工智能·opencv·计算机视觉