1. 什么是 SiLU 激活函数

SiLU 是一种连续、平滑且可导的激活函数,全名是 Sigmoid Linear Unit,常被写成:

SiLU(x) = x · sigmoid(x)

它也被称为 Swish-1(Swish 激活的一种特例,β=1)。在很多现代检测网络(比如 YOLO 系列后期版本)和部分卷积/Transformer混合骨干里,SiLU 逐渐取代传统的 ReLU,成为默认激活函数之一。

它的设计目标可以简单理解为:

  • 在 x 很大的时候,像线性函数一样(不过不完全等于恒等映射);
  • 在 x 在 0 附近的时候,表现得像“柔化版 ReLU”,不过比 ReLU 更平滑;
  • 在 x 为负的时候,不是直接砍掉(像 ReLU 那样变成 0),而是允许一小部分负值继续通过,从而保留信息。

这种柔和的“允许负值信息泄漏”+“整体平滑可导”特性,会带来更好的梯度传播和优化稳定性。


2. 数学定义

2.1 Sigmoid 函数回顾

Sigmoid(S 形函数)定义为:
σ(x)=11+e−x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
它把实数映射到 (0, 1) 区间,x 越大,σ(x) 越接近 1;x 越小,σ(x) 越接近 0。

2.2 SiLU 的显式形式

SiLU 的定义是:
SiLU(x)=x⋅σ(x)=x⋅11+e−x. \text{SiLU}(x) = x \cdot \sigma(x) = x \cdot \frac{1}{1+e^{-x}}. SiLU(x)=xσ(x)=x1+ex1.

也可以展开成:
SiLU(x)=x1+e−x. \text{SiLU}(x) = \frac{x}{1 + e^{-x}}. SiLU(x)=1+exx.

把这个函数当成一条“带门控的线”。x 自己想通过,但它必须经过 σ(x) 这扇门。门在 x 很大时几乎完全敞开(σ(x)≈1),在 x 很负时基本半关(σ(x)≈0)。


3. 导数(梯度)

在深度学习里,我们关心激活函数不仅是什么样,还关心它的导数,因为训练依赖反向传播梯度。

f(x)=SiLU(x)=x σ(x)f(x)=\text{SiLU}(x)=x\,\sigma(x)f(x)=SiLU(x)=xσ(x) 求导:

  1. 用积的求导法则:
    ddx[x σ(x)]=σ(x)+x σ′(x). \frac{d}{dx}[x\,\sigma(x)] = \sigma(x) + x\,\sigma'(x). dxd[xσ(x)]=σ(x)+xσ(x).
  2. Sigmoid 的导数是:
    σ′(x)=σ(x)[1−σ(x)]. \sigma'(x) = \sigma(x) [1 - \sigma(x)]. σ(x)=σ(x)[1σ(x)].
  3. 代入:
    ddxSiLU(x)=σ(x)+x σ(x)[1−σ(x)]. \frac{d}{dx}\text{SiLU}(x) = \sigma(x) + x\,\sigma(x)[1-\sigma(x)]. dxdSiLU(x)=σ(x)+xσ(x)[1σ(x)].

可以把它整理成:
SiLU′(x)=σ(x)(1+x[1−σ(x)]). \text{SiLU}'(x) = \sigma(x) \Big(1 + x[1-\sigma(x)]\Big). SiLU(x)=σ(x)(1+x[1σ(x)]).

这条导数非常重要:它完全连续,没有像 ReLU 在 0 点那种“折痕”(不可导点)。这种平滑梯度,往往能让网络训练得更稳定,尤其是深层网络或者混合注意力/卷积网络。


4. 曲线形状与直观理解

4.1 函数曲线

下面是 SiLU 的激活函数图像:

在这里插入图片描述

注意两点:

  • 在 x >> 0(比如 x=5)时,σ(x)≈1,所以 SiLU(x)≈x,接近线性。
  • 在 x << 0(比如 x=-5)时,σ(x)≈0,所以 SiLU(x)≈0,但不是“直接砍成 0”。实际上在 -2、-3 这些地方,输出是略微负的,意味着负输入仍能传出一小点负信号。

4.2 非单调性

SiLU 的曲线是轻微非单调的,也就是说在小于 0 的区域附近,函数值会先比线性更低一点点,然后才慢慢上升。这一点跟 ReLU 完全不同。

这段“轻微下凹”的区域给了网络更灵活的表示能力:网络可以在小负值区间里学到“某些特征最好是被稍微抑制但不要彻底抹掉”。这种软抑制,可以被视为一种自适应门控行为。

4.3 与 ReLU 的对比

把 ReLU 和 SiLU 放在一起看:

  • ReLU(x) = max(0, x)
  • SiLU(x) = x * sigmoid(x)

ReLU 是一刀两断:x<0 直接归零,x>0 保留线性。

SiLU 是温和渐变:

  • 对于 x<0,不是全扔掉,而是输出一个很小的负值或者接近 0 的值;
  • 对于 x>0,几乎线性通过。

形象地说,ReLU 是“开/关开关”,SiLU 是“调光旋钮”。
在这里插入图片描述


5. SiLU vs. 其他常见激活

5.1 ReLU(Rectified Linear Unit)

  • 公式:ReLU(x)=max⁡(0,x)\text{ReLU}(x)=\max(0,x)ReLU(x)=max(0,x)
  • 优点:简单,计算便宜,不会饱和在正区间。
  • 缺点:x<0 的时候梯度为 0,容易出现“神经元死亡”(dead neuron):一旦权重把某些单元推到负区间,它们的梯度就永远是 0,很难再回来。

SiLU 的优势在于:

  • 负区间梯度不完全为 0,意味着这些神经元不太会被“永久踢出江湖”。
  • 过渡平滑,梯度连续。

5.2 Sigmoid / tanh

  • Sigmoid:σ(x)=1/(1+e−x)\sigma(x)=1/(1+e^{-x})σ(x)=1/(1+ex)
  • tanh:tanh⁡(x)∈(−1,1)\tanh(x)\in(-1,1)tanh(x)(1,1)

它们都在大正/大负区间会饱和,梯度非常小,导致深层网络训练困难(梯度消失)。

SiLU 避免了这种强烈饱和:

  • 在大正区间近似线性,梯度接近 1;
  • 在负区间虽然压小了输出,但没有完全压成常数,梯度仍有余温。

5.3 Swish

Swish 一般定义为:
Swishβ(x)=x⋅σ(βx) \text{Swish}_\beta(x) = x \cdot \sigma(\beta x) Swishβ(x)=xσ(βx)
其中 β\betaβ 可以是常数,也可以是可学习的参数。

如果把 β=1\beta = 1β=1,我们就得到:
Swish1(x)=x σ(x), \text{Swish}_1(x) = x\,\sigma(x), Swish1(x)=xσ(x),
它正是 SiLU。

结论:SiLU = Swish-1
在这里插入图片描述


6. SiLU 的优点

  1. 平滑可导
    • 没有 ReLU 在 0 点的硬拐角;
    • 导数连续,有利于基于梯度的优化方法(SGD / Adam / AdamW 等)稳定下降。
  2. 避免完全“杀死”负激活
    • 对负输入仍允许一小部分信号通过,也允许梯度通过;
    • 帮助防止神经元永久失活(ReLU 死亡问题)。
  3. 自门控 / 自调制
    • 函数本身等于 x 乘上 σ(x),这就像“x 通过了一个依赖于 x 自己的门”;
    • 网络可以学到“在这段范围内,我只需要一点点这个特征”,而不是二元开关式的要/不要。
  4. 在卷积检测网络中的经验成功
    • 许多现代实时检测器(YOLO 的多个后代版本,以及一些轻量卷积-注意力混合骨干)采用 SiLU 作为默认激活,报告到更稳定的训练、更高的 mAP(平均精度)或者更快的收敛速度。
  5. 在注意力/Transformer式结构中的适配性
    • Transformer block 里常有前馈网络(Feed-Forward Network, FFN),这些全连接层堆叠后的非线性也可以用 SiLU;
    • SiLU 的平滑性有助于注意力-卷积混合网络保持梯度稳定,避免在早期训练阶段震荡太大。

7. SiLU 的缺点与注意事项

  1. 计算比 ReLU 稍贵
    • ReLU 只是 max(0,x),是一次比较操作。
    • SiLU 需要计算 sigmoid(x)(也就是涉及 exp(-x) 和除法),理论上更耗时。
    • 在高吞吐、算力极端受限的嵌入式设备上,这点开销可能要算进延迟预算。
    • 不过在 GPU/TPU 上,尤其是批量并行时,差距往往不是灾难级别。
  2. 非单调性引入的训练不确定性(小概率)
    • SiLU 在小负值附近有轻微的“下凹”形状(非单调)。
    • 在极个别场景下,这种非单调性可能让优化过程的收敛分析更复杂(相对于 ReLU 那种分段线性、单调非减的激活)。
    • 但从经验上看,这通常不是致命问题,反而常常带来更好的表示能力。
  3. 数值范围没有硬阈值
    • ReLU 有一个天然优势:任何负输入直接归零,这会起到某种稀疏化效果,提升可解释性,减少特征噪声;
    • SiLU 不做这种“硬剪枝”,有时意味着中间特征更加密集,不一定总是好事,尤其在需要显式稀疏的架构里(比如有强约束的神经压缩场景)。

8. SiLU 在现代模型中的角色

  1. 在 YOLO 系列中
    • 从 YOLOv5 开始,SiLU 就成为默认激活(在 Ultralytics YOLOv5 的实现里,主干和检测头大量使用 SiLU 而不是 ReLU);
    • 后续的 YOLOv8、YOLOv10、YOLOv11 乃至注意力更重的 YOLOv12,也依旧经常使用 SiLU 或其等价变体(Swish-1)作为基本的非线性单元。
    • 原因是:YOLO 系列强调“高精度 + 高速度 + 好训”。可导平滑、梯度不断流、负值不全砍,正好迎合这个三向平衡。
  2. 在注意力/Transformer混合网络中
    • 很多视觉 Transformer 结构的 FFN 子层原本使用 GELU(Gaussian Error Linear Unit)。GELU 也是平滑、近似线性/高斯门控的一类激活;
    • 在一些部署友好版本(尤其是需要 TensorRT/ONNX 图里有稳定、易量化运算的版本)中,人们会用 SiLU / Swish-1 作为替代,因为实现简单(只需要 sigmoid+乘法),而 GELU 需要 erf(高斯误差函数)这种相对少见的算子;
    • 这让 SiLU 在部署侧也有现实吸引力。
  3. 在轻量化/移动端模型中
    • MobileNet 及其后继在探索 ReLU6、Hard-Swish、等价近似激活(它们是“折线近似版 Swish”),原因是要在移动端便宜实现“类 Swish / 类 SiLU”的平滑门控行为。
    • SiLU 可以被近似为 Hard-Swish(即 piecewise linear 的近似),进一步减少推理时的代价。这说明 SiLU 的思想(x 乘上一个平滑门)已经被浓缩成一堆实际可部署的“硬近似”。

9. 小结

  • SiLU(x) = x · sigmoid(x),也就是 Swish-1。
  • 它保持了 ReLU 在正区间“接近线性、梯度不衰减”的优点,同时避免了 ReLU 对负区间的粗暴截断。
  • 它是平滑、可导、几乎处处有梯度,训练时更稳定,深层网络里梯度不容易完全死掉。
  • 代价是:它的计算稍微比 ReLU 重,非线性形状也更复杂(非单调)。
  • 实践上,SiLU 已经在实时检测(YOLO 家族)、注意力+卷积混合骨干、以及推理部署友好型 Transformer 结构中大量使用,被证明是一个“高性价比”的激活函数。

一句人话总结:
SiLU 是 ReLU 的温和派、Swish 的工程派。它既保留信息、又保持梯度活力,还不会把推理速度拖进泥潭,因此被现代视觉模型反复复用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐