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

激活函数的发展历程#

很早之前,我们就展开过激活函数的相关内容:激活函数。其本质是给神经网络引入非线性。这里再简单复述一遍:
Sigmoid是最早被广泛使用的激活函数:

Sigmoid 将任意实数压缩到 区间,在隐藏层可以理解为"激活概率",但现在更常见在分类头等输出层最后表示概率。
但它有两个问题:

  1. 输出不是零中心的,会导致后一层接收的输入始终为正,导致反向传播时权重梯度容易同号,梯度更新效率低。
  2. 两端饱和严重, 较大或较小时梯度几乎为零,深层网络中容易梯度消失。

Tanh缓解了第一个问题:

很明显它把输出范围压缩到 ,实现了零中心化。但梯度饱和的问题仍然存在,在 绝对值较大的区域梯度依然趋近于零。

真正的转折点是 2012 年前后ReLU(Rectified Linear Unit)的普及:

ReLU 的形式极简:正半轴保持梯度为 1,负半轴直接归零。
但这种看似不合理的设计却在隐藏层传播中带来了极大优势:正半轴梯度恒为 1,梯度消失问题被大幅缓解,同时计算更是简单到只需要一个比较操作。
ReLU 对训练深层网络起到积极贡献(此外还有残差网络),因此也是很长一段时间里的默认选择。

但 ReLU 也有自己的问题:负半轴完全归零会导致死神经元:当某个神经元对所有训练样本都输出负值时,其梯度将始终为 0,参数无法继续更新,从而永久停留在负半区。

因此:出现了一批试图修复这个问题的变体:

  1. Leaky ReLU:,负半轴改为一个小斜率 (比如 0.01),让信息仍然可以流动。
  2. PReLU:把 变成可学习的参数。
  3. ELU:负半轴用指数曲线,让输出均值接近零。


    这些变体各自有一些效果,但都没有真正取代 ReLU 的主流地位。

再往后就来到了 16 年的 Gaussian Error Linear Units(GELU):

我们在之前的 ConvNeXt中也简单展开过它, 是标准正态分布的累积分布函数。
GELU 在 ReLU 的基础上做了平滑,负半轴有一个非零的"尾巴",在 附近也是光滑可导的。
它在 NLP 领域很受欢迎,BERT 和 GPT 系列都用了它,它也逐渐成为 Transformer 系列中 FFN 的默认激活函数。

此外,17 年 Google 在 Searching for Activation Functions 提出了Swish 激活函数,它看起来和 GELU 十分相似:

Swish 是 Google 实验室在同一个网络中进行只换激活函数的大规模 A/B Test 得到的,并没有从理论推导,而是纯粹实验发现的优解。

从函数形状上看,Swish 与 GELU 几乎等价,二者性能差距通常很小。
历史上 NLP 社区由于 BERT 的成功更偏向 GELU,而 CV 领域曾广泛采用实现更简单的 Swish。
这种难分伯仲的情况也让研究者开始跳出 “用哪种激活函数” 去发现其他逻辑,这也是下部分的内容:

2. 标准 FFN 的结构局限#

简单过了过激活函数后,现在我们再来看 Transformer Block 中的 FFN 层:

其中 是激活函数,原版 Transformer 使用 ReLU,后续则大多换成了 GELU。
这条信息流路径非常直接:

输入升维激活降维输出

原理也很清晰:FFN 可以学习特征的重要性,在训练过程中,权重矩阵 和 会不断调整,从而让网络自动学会哪些模式更值得关注。

但以事后诸葛亮的视角来看,它仍然存在一个隐含的限制:

完成训练后,FFN 学到的是固定的重要性,而不是针对当前输入的动态重要性。

也就是完成训练后,某个隐藏神经元在训练过程中学会了识别某种特征,那么无论输入什么样本,它都会使用同一套权重进行计算。

这与注意力机制形成了鲜明对比,在 Attention 逻辑中,不同输入会产生不同的注意力分布,因此模型能够动态决定哪些信息应该被重点关注、哪些信息应该被弱化甚至忽略。

这种根据当前样本实时调整权重的能力,我们称之为动态门控思想

既然 Attention 可以动态选择重要信息,那么 FFN 能否也拥有类似的能力?

而答案正是后来逐渐流行起来的门控机制,我们之前在 RNN 中介绍过,例如 GRU 和 LSTM都利用门控控制信息流动。
不久前的 通道注意力系列等其实也是这种门控思想的应用。

那么如何实现在 FFN 中实现门控逻辑?就是本篇的主角:

3. SwiGLU#

3.1 GLU:门控线性单元#

GLU(Gated Linear Unit)来自 17 年的论文 Language Modeling with Gated Convolutional Networks。它在标准全连接基础上增加了一个分支:

其中:

  • 左边的是 Value 分支。
  • 右边是 Gate 分支,使用 Sigmoid 函数激活。

其实逻辑和之前的SE是十分相似的,将输入同步聚合为一组权重再作用在输出上,实现门控逻辑。

这便是最基础的 GLU 逻辑。

3.2 SwiGLU#

Sigmoid 门控本身是很符合我们的现实逻辑的,但在后续的实践中,研究者们却发现它其实不一定是最优选择。
20 年,论文 GLU Variants Improve Transformer 中做了一个系统的实验:把标准 FFN 替换成各种 GLU 变体,看门控激活函数选哪个最好,而 SwiGLU 表现最好,也由此在后续的实践中逐渐发扬光大。

SwiGLU 其实就是把 GLU 中的 Sigmoid 激活函数更换为了 Swish 函数:(DL 论文里经常忽略偏置,Transformer 架构里偏置甚至经常在实现中被直接删除。)

而对于为什么使用 Swish 要强于 sigmoid 比较主流的认知主要集中在两点:

  1. sigmoid 的 0-1 取值范围只能实现抑制和保留,而 Swish 却不受限于 0-1,可以实现放大。
  2. sigmoid 在网络传播中的梯度问题仍然存在,Swish 更好优化。

3.3 一个应用 SwiGLU 的 FFN 子层#

最终,Transformer block 在引入 SwiGLU 后,原本的 FFN 子层本的升维层被拆成了两条并行分支:

随后再正常通过原本的降维层,整体表示如下:

http://www.cnnetsun.cn/news/3034236.html

相关文章:

  • 询优化器<1>查询重写 / 逻辑优化
  • 整个过程没有引入新的线程
  • XCPC 2026 WEEK 14
  • Java毕设选题推荐:基于 SpringBoot 的剧本杀门店预约管理平台的设计与实现 基于 SpringBoot 的沉浸式剧本杀服务系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【机器学习入门】从零到一入门机器学习
  • 合租守则第17条
  • 【毕业设计】基于 SpringBoot 的便民医疗咨询服务平台的设计与实现 基于 SpringBoot 的医疗知识问答共享平台(源码+文档+远程调试,全bao定制等)
  • Java计算机毕设之基于 Java 的在线医生问诊问答平台的设计与实现 基于 Java 的医疗咨询答疑管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java毕设项目:基于 SpringBoot 的分级医疗问答服务管理平台的设计与实现 基于 SpringBoot 的医疗科普问答互动系统 (源码+文档,讲解、调试运行,定制等)
  • ECC安装与配置:把 Claude Code 装进一个能稳定发挥的 Harness
  • list列表常用的方法(python)
  • 复杂遮挡与动态干扰场景下跨镜轨迹智能补链与 ID 稳定技术
  • 2026年6月最新|苏州SEO/GEO优化公司推荐|7家本地服务商测评对比
  • 非煤矿山用工规范大限将至,无人驾驶矿卡迎来政策强驱动
  • Claude 桌面版深度使用技巧指南
  • 【Claude】Usage credits required for 1M context 报错已解决
  • 华为OD机试2025C卷-相对开音节[100分]( Java _ Python3 _ C++ _ C语言 _ JsNode _ Go)实现100%通过率
  • 【前端分享】封神级React图片预览组件!7KB超轻量,手势/动画/自定义全拿捏!
  • PEO10500-b-PMMA18000聚氧乙烯-b-聚甲基丙烯酸甲酯PEO-PMMA
  • 探秘大模型训练数据:Claude、ChatGPT 等的数据从何而来?能否实现公平交易?
  • WordPress+WooCommerce大型商城解决方案
  • A.每日一题:1344. 时钟指针的夹角
  • 【2026】超详细中望CAD机械版2026安装保姆级教程,永久免费使用,机械设计环境配置指南,看完这一篇就够了
  • 冯·诺依曼结构和哈佛结构
  • 激光焊接不只是替掉了钎焊——它正在重新定义液冷板能长什么样
  • TensorFlow 学习
  • Linux命令-pwd(打印当前工作目录)
  • 三分钟带你认识有机溶质转运蛋白(OST)家族
  • AI引发存储危机,苹果Mac、iPad涨价,iPhone 18会跟进吗?
  • 服务周到的牙科诊所如何挑选