当前位置: 首页 > backend >正文

前馈神经网络层

FeedForward Network

  • 论文地址

    https://arxiv.org/pdf/1706.03762

前馈网络介绍

  • 前馈网络是Transformer模型中的关键组件,每个Transformer层包含一个多头注意力模块和一个前馈网络模块。该模块通过两次线性变换和激活函数,为模型提供非线性建模能力。其核心设计是通过中间隐藏层的维度扩展(d_ff > d_model),增强模型的特征表达能力。

    image-20250425162537172

    典型配置中d_ff=2048(当d_model=512时),这种"扩展-收缩"结构帮助模型捕获更复杂的模式。前馈网络独立作用于每个位置,与注意力机制形成功能互补。

数学公式

  • 前馈网络FFN(FeedForward Network)的计算过程可表示为:
    FFN ( x ) = ReLU ( x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2 FFN(x)=ReLU(xW1+b1)W2+b2
    在标准实现中:

    • 第一层将维度从 d _ m o d e l d\_model d_model扩展到 d _ f f d\_ff d_ff
    • 第二层将维度从 d _ f f d\_{ff} d_ff恢复为 d _ m o d e l d\_{model} d_model
    • 实际实现中常省略偏置项(bias=False)

    带Dropout的改进公式:
    FFN ( x ) = Dropout ( ReLU ( x W 1 ) W 2 ) \text{FFN}(x) = \text{Dropout}(\text{ReLU}(xW_1)W_2) FFN(x)=Dropout(ReLU(xW1)W2)

代码实现

  • 前馈网络模块实现

    import torch
    from torch import nnclass FeedForward(nn.Module):def __init__(self, d_model, d_ff, dropout_prob=0.1):""":param d_ff: 中间隐藏层维度"""super(FeedForward, self).__init__()self.ffn = nn.Sequential(nn.Linear(in_features=d_model, out_features=d_ff, bias=False),nn.ReLU(),nn.Linear(in_features=d_ff, out_features=d_model, bias=False),nn.Dropout(dropout_prob))def forward(self, x):output = self.ffn(x)return output
    
  • 参数说明

    参数名称说明典型值
    d_model输入/输出维度(embedding维度)512
    d_ff中间层扩展维度2048
    dropout_probDropout概率(输出层之后应用)0.1

维度变换流程

  • 数据流经各层的形状变化:

    操作步骤张量形状变化示例
    输入数据[batch_size, seq_len, d_model]
    第一线性层(d_model→d_ff)[batch_size, seq_len, d_ff]
    ReLU激活[batch_size, seq_len, d_ff]
    第二线性层(d_ff→d_model)[batch_size, seq_len, d_model]
    Dropout[batch_size, seq_len, d_model]

使用示例

  • 测试代码

    if __name__ == "__main__":batch_size = 4seq_len = 100d_model = 512d_ff = 2048x = torch.randn(batch_size, seq_len, d_model)ffn = FeedForward(d_model=d_model, d_ff=d_ff)out = ffn(x)print("输入形状:", x.shape)      # torch.Size([4, 100, 512])print("输出形状:", out.shape)    # torch.Size([4, 100, 512])print("输出均值:", out.mean().item())  # ≈0(受初始化影响)
    

http://www.xdnf.cn/news/2125.html

相关文章:

  • 罗德FSP13 FSP40频谱分析仪频率13.6GHz
  • ViTMAE:掩码自编码器是可扩展的视觉学习者
  • P4017 最大食物链计数-拓扑排序
  • 国标44496详细分析
  • org.apache.ibatis.plugin.Invocation 类详解
  • 树莓派4B+Ubuntu24.04 电应普超声波传感器串口输出 保姆级教程
  • 基于AI技术的高速公路交通引流系统设计与应用研究
  • kubernets集群的安装-node节点安装-(简单可用)-超详细
  • 智能电网第8期 | 视频监控与数据同传解决方案
  • wsl联通外网
  • SQL注入高级绕过手法汇总 重点
  • 神经发育过程中大脑临界状态的图神经网络分析方法
  • 市场上常见的工作流工具
  • 浅谈OpenAIClaude LLM Tools的额外配置
  • 计算机组成原理实验(1) 算术逻辑运算单元实验
  • Java 设计模式心法之第21篇 - 命令 (Command) - 将请求封装成对象,实现操作解耦与扩展
  • verilog中实现单周期cpu的RVM指令(乘除取模)
  • 登高架设作业证考试的实操项目有哪些?
  • 前端八股 2
  • 支持私有化部署的电子合同平台——一合通
  • 01.oracle SQL基础
  • 使用Go语言实现轻量级消息队列
  • Ubuntu系统卡机日志笔记
  • OpenHarmony 5.0设置锁屏密码失败
  • QuecPython+USBNET:实现USB网卡功能
  • 真.从“零”搞 VSCode+STM32CubeMx+C <2>调试+烧录
  • docker-compose安装RustDesk远程工具
  • 工业电子测量中的安全隐患与解决方案——差分探头的技术优势解析
  • 如何在SpringBoot中通过@Value注入Map和List并使用YAML配置?
  • 分账解决连锁酒店资金分配难题