面试篇 - Transformer前馈神经网络(FFN)使用什么激活函数?

1. FFN结构分解

原始Transformer的FFN层
FFN(x) = max(0, xW₁ + b₁)W₂ + b₂  # 原始论文公式
  • 输入:自注意力层的输出 x(维度 d_model=512

  • 扩展层xW₁ + b₁(扩展为 d_ff=2048

  • 激活函数ReLU(即 max(0, ⋅)

  • 收缩层(⋅)W₂ + b₂(压缩回 d_model=512

2. ReLU的核心特性

特性公式表现作用
非线性f(x) = max(0, x)使模型能够学习复杂模式(否则多层线性变换等价于单层)
梯度消失缓解f'(x) = 1 if x>0 else 0正区间梯度恒为1,避免Sigmoid/Tanh的梯度指数衰减问题
计算高效只需比较和取最大值操作比Sigmoid(需指数运算)快3-6倍(实测在GPU上)

3. 为什么选择ReLU?

  • 实验验证:原始Transformer论文(《Attention Is All You Need》)通过消融实验确认ReLU优于Sigmoid/Tanh。

  • 深层网络适配:Transformer通常堆叠6-12层,ReLU的梯度特性更适合深度训练。

  • 稀疏激活:约50%神经元输出为0,可能提升特征选择性(但后续研究对此有争议)。

4. GELU的改进与数学细节

GELU公式
GELU(x) = xΦ(x) ≈ 0.5x(1 + tanh[√(2/π)(x + 0.044715x³)])  # 近似计算
  • 与ReLU对比

    • 平滑性:GELU在 x=0 处可导(ReLU二阶不可导)

    • 概率解释Φ(x) 是高斯CDF,相当于对输入进行"随机门控"

BERT中的使用
  • 在BERT-base中,GELU使MNLI任务准确率提升约0.5%(相比ReLU)

  • 计算代价:GELU比ReLU慢约15%(因需计算tanh)

5. 关键代码实现对比

PyTorch中的FFN层
import torch.nn as nnclass TransformerFFN(nn.Module):def __init__(self, d_model=512, d_ff=2048):super().__init__()self.linear1 = nn.Linear(d_model, d_ff)self.linear2 = nn.Linear(d_ff, d_model)self.activation = nn.ReLU()  # 或 nn.GELU()def forward(self, x):return self.linear2(self.activation(self.linear1(x)))
激活函数计算速度测试
import timeit
x = torch.randn(10000, 10000).cuda()# ReLU
timeit.timeit(lambda: nn.ReLU()(x), number=100)  # 约0.12秒# GELU 
timeit.timeit(lambda: nn.GELU()(x), number=100)  # 约0.18秒

6. 后续模型的发展

  • Switch Transformer:使用ReGLU(ReLU的GLU变体)提升稀疏性

  • GPT-3:保留ReLU,因模型足够大能弥补激活函数缺陷

  • Vision Transformer:部分研究采用LeakyReLU处理负值信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python Flask的深度学习电影评论情感分析可视化系统(2.0升级版,附源码)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

前端vue2修改echarts字体为思源黑体-避免侵权-可以更换为任意字体统一管理

1.下载字体 npm install fontsource/noto-sans-sc 不知道为什么我从github上面下载的不好使,所以就用了npm的 2.引用字体 import fontsource/noto-sans-sc; 在入口文件-main.js中引用 3.设置echats模板样式 import * as echarts from echarts; // 在import的后…

51c自动驾驶~合集37

我自己的原文哦~ https://blog.51cto.com/whaosoft/13878933 #DETR->DETR3D->Sparse4D 走向长时序稀疏3D目标检测 一、DETR 图1 DETR架构 DETR是第一篇将Transformer应用到目标检测方向的算法。DETR是一个经典的Encoder-Decoder结构的算法,它的骨干网…

【MongoDB篇】MongoDB的集合操作!

目录 引言第一节:集合的“诞生”——自动出现还是手动打造?🤔第二节:集合的“查阅”——看看这个数据库里有哪些柜子?📂👀第三节:集合的“重命名”——给文件柜换个名字!…

Goland终端PowerShell命令失效

Goland终端Terminal的PowerShell不能使用,明明windows上升级了PowerShell 7设置了配置文件,但是只能在windows终端下使用,goland终端下直接失效报错,安装升级PowerShell请看Windows11终端升级PowerShell7 - HashFlag - 博客园 问…

简单分析自动驾驶发展现状与挑战

一、技术进展与市场渗透 技术分级与渗透率 当前量产乘用车的自动驾驶等级以L2为主(渗透率约51%),L3级处于初步落地阶段(渗透率约20%),而L4级仍处于测试和示范运营阶段(渗透率约11%)2…

【C++类和数据抽象】消息处理示例(1):从设计模式到实战应用

目录 一、数据抽象概述 二、消息处理的核心概念 2.1 什么是消息处理? 2.2 消息处理的核心目标 三、基于设计模式的消息处理实现 3.1 观察者模式(Observer Pattern) 3.2 命令模式(Command Pattern) 四、实战场景…

【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】

Resampling (重采样方法) 重采样方法是从训练数据中反复抽取样本,并在每个(重新)样本上重新调整模型,以获得关于拟合模型的附加信息的技术。 两种主要的重采样方法 Cross-Validation (CV) 交叉验证 : 用于估计测试误…

常见的 CSS 知识点整理

1. 盒模型(Box Model)是什么?标准盒模型和 IE 盒模型的区别? 答案: CSS 盒模型将元素视为一个盒子,由内容(content)、内边距(padding)、边框(bor…

Educational Codeforces Round 178 div2(题解ABCDE)

A. Three Decks #1.由于最后三个数会相等&#xff0c;提前算出来和&#xff0c;%3判断&#xff0c;再判前两个数是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…

如何创建一个导入模板?全流程图文解析

先去找到系统内可以上传东西的按钮 把你的模板上传上去,找到对应的fileName 图里的文字写错了,是复制粘贴"filePath"到URL才能下载

通信原理第七版与第六版区别附pdf

介绍 我用夸克网盘分享了「通信原理 第7版》樊昌信」&#xff0c;链接&#xff1a;https://pan.quark.cn/s/be7c5af4cdce 《通信原理&#xff08;第7版&#xff09;》是在第6版的基础上&#xff0c;为了适应当前通信技术发展和教学需求&#xff0c;并吸取了数十所院校教师的反…

Mysql唯一性约束

唯一性约束&#xff08;Unique Constraint&#xff09;是数据库设计中用于保证表中某一列或多列组合的值具有唯一性的一种规则。它可以防止在指定列中插入重复的数据&#xff0c;有助于维护数据的完整性和准确性。下面从几个方面为你详细解释 作用 确保数据准确性&#xff1a…

测试基础笔记第十六天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、UI自动化介绍1.认识UI自动化测试2.实施UI自动化测试前置条件3.UI自动化测试执行时机4.UI自动化测试核心作用和劣势 二、认识Web自动化测试工具-Selenium021.Sel…

PaddleX的安装

参考&#xff1a;安装PaddlePaddle - PaddleX 文档 1、安装PaddlePaddle 查看 docker 版本 docker --version 若您通过 Docker 安装&#xff0c;请参考下述命令&#xff0c;使用飞桨框架官方 Docker 镜像&#xff0c;创建一个名为 paddlex 的容器&#xff0c;并将当前工作目…

长效住宅IP是什么?如何获取长效住宅IP?

在当今的互联网世界里&#xff0c;IP地址作为连接用户与网站之间的桥梁&#xff0c;其重要性不言而喻。对于跨境电商、社交媒体运营以及数据采集等领域的专业人士而言&#xff0c;普通的IP地址已无法满足日益复杂的需求。他们更需要一种稳定、安全且持久的长效住宅IP来完成各类…

02 业务流程架构

业务流程架构提供了自上而下的组织鸟瞰图&#xff0c;是业务流程的全景图。根据所采用的方法不同&#xff0c;有时被称为流程全景图或高层级流程图&#xff0c;提供了业务运营中所有业务流程的整体视图。 这样有助于理解企业内部各个业务流程之间的相互关系以及它们如何共同工…

jenkins slave节点打包报错Failed to create a temp file on

jenkins slave节点打包报错 一、报错信息 FATAL: Unable to produce a script file Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to slave-83at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)at hudson.remoting.UserRequest$…

什么是 Swagger 以及如何在 Spring Boot 中实现 Swagger:配置与实践指南

在现代 RESTful API 开发中&#xff0c;Swagger 是一种广泛使用的工具&#xff0c;用于生成、描述和可视化 API 文档。它极大地简化了 API 的开发、测试和维护过程。结合 Spring Boot&#xff0c;Swagger 可以快速集成到项目中&#xff0c;生成交互式 API 文档&#xff0c;方便…

Xilinx FPGA支持的FLASH型号汇总

以博主这些年的FPGA开发使用经验来看&#xff0c;FPGA开发的主流还是以Xilinx FPGA为主&#xff0c;贸易战关税战打了这么多年&#xff0c;我们做研发的也不可避免的要涉及一些国产替代的工作&#xff1b;这里把Xilinx FPGA官方支持的各类&#xff08;国产和非国产&#xff09;…