SiLU 函数(Sigmoid Linear Unit,Sigmoid 加权线性单元)是深度学习中一种非常流行的激活函数,也被称为 Swish(当参数 β=1 时)。
它在 2017 年由 Google 研究团队提出(论文《Searching for Activation Functions》),后来在大量现代模型中成为默认或高性能选择之一。
1. 数学公式
SiLU(x) = x × σ(x)
其中 σ(x) 是标准的 logistic sigmoid 函数:
σ(x) = 1 / (1 + e⁻ˣ)
所以完整写法是:
SiLU(x) = x / (1 + e⁻ˣ)
- 当 β ≠ 1 时,更广义的形式叫 Swish:x × σ(βx)
- 但在绝大多数框架和论文中,SiLU 特指 β=1 的情况(PyTorch、TensorFlow/Keras、Ultralytics YOLO 等都这样定义)
2. 主要特点(对比 ReLU / GELU)
| 特性 | SiLU (Swish β=1) | ReLU | GELU | 实际影响 |
|---|---|---|---|---|
| 定义域 | (-∞, +∞) → ≈(-0.278, +∞) | (-∞, +∞) → [0, +∞) | (-∞, +∞) → ≈(-0.17, +∞) | SiLU 允许少量负值输出 |
| 是否单调递增 | 非单调(在 x≈-1.278 附近有轻微凹陷) | 单调递增 | 单调递增 | 非单调性有时带来更好表达能力 |
| 平滑性 | 处处可导(C∞ 光滑) | x=0 处不可导 | 处处光滑 | 梯度更稳定,避免震荡 |
| 计算开销 | 中等(含 exp 和除法) | 极低(max(0,x)) | 中等偏高(含 erf 或近似) | 现代 GPU 上几乎无感 |
| 负值区行为 | 小负值(最负 ≈ -0.278) | 恒为 0(dying ReLU) | 小负值(更接近 0) | 缓解 dying neuron 问题 |
| 正值区行为 | 接近线性(x 很大时 ≈ x) | 严格线性 | 接近线性但稍有压缩 | 保留梯度信息好 |
| 梯度消失风险 | 低(负区梯度不为 0) | 中(负区梯度=0) | 很低 | 深层网络更友好 |
函数图像关键点(文字描述,实际看图更直观):
- x → +∞:SiLU(x) ≈ x(线性)
- x = 0:SiLU(0) = 0
- x → -∞:SiLU(x) → 0(从下方缓慢接近)
- 最小值 ≈ -0.278 在 x ≈ -1.278 处(轻微“下凹”)
- 整体比 ReLU 更平滑,比 sigmoid 更“线性”
3. 为什么 SiLU 这么受欢迎?(2025–2026 视角)
- 比 ReLU 好:没有 dying ReLU 问题,负值区仍有微弱梯度
- 比 GELU 简单:计算更快(无 erf 函数),在很多实验中性能接近甚至略胜
- 在 Transformer / CNN / 视觉大模型中表现优秀:
- YOLOv5 → YOLOv8 → YOLOv10/v11/v26 系列大量默认用 SiLU
- EfficientNet、ConvNeXt、MobileNetV3 等经典 CNN 变体常用
- Llama 系列、Grok、部分 Mistral 模型也用 Swish/SiLU 变体
- 强化学习早期提出:2017 年 arXiv 论文就是在 RL 背景下提出的,后来扩散到监督学习
4. 常见框架中的实现(2026 现状)
- PyTorch:
torch.nn.SiLU()或F.silu(x)(最常用) - TensorFlow / Keras:
tf.nn.swish或tf.keras.activations.swish(等价于 SiLU) - JAX / Flax:
jax.nn.swish - Ultralytics YOLO:默认激活就是 SiLU
代码示例(PyTorch):
import torch
import torch.nn as nn
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
silu = nn.SiLU()
print(silu(x))
# 输出大致:tensor([-0.0474, -0.2689, 0.0000, 0.7311, 2.8577])
5. 什么时候选 SiLU?
- 优先选:现代 CNN、目标检测(YOLO)、高效模型、深度 Transformer、需要平衡性能和计算量的场景
- 可以考虑 GELU:BERT、GPT 类纯 Transformer(GELU 理论上更“高斯”)
- 可以回退 ReLU:极致移动端部署、模型已经很深但梯度爆炸不严重
一句话总结:
SiLU = “平滑版 ReLU + 少量负值泄漏 + 极简计算”,
是 2020 年后视觉大模型和很多高效架构的“国民激活函数”之一。
如果你想看 SiLU / Swish / GELU / ReLU 的对比图像,或者想知道在具体模型(如 YOLOv11、Llama)中为什么选它,可以继续问,我可以进一步展开!