2.2.11. 激活函数-SiLU

SiLU(Sigmoid-weighted Linear Unit)也称为 Swish 激活函数,由 Google 的研究人员在 2017 年提出,是一种平滑、非单调的激活函数。

1. 数学定义

SiLU(x)=xσ(x)=x1+ex

其中 σ(x) 是 Sigmoid 函数。

2. 特性

  • 平滑性:处处可微,导数连续

  • 非单调性:在 x<0 时先略微下降,再随 x 增大而上升

  • 下界有界,上界无界:当 x 时趋近于 0;当 x+ 时趋近于线性函数

  • 自门控机制:Sigmoid 部分充当“门控”,调节输入 x 的输出幅度

3. 导数

ddxSiLU(x)=σ(x)+xσ(x)(1σ(x))

4. 优点

  • 改善梯度流:相比 ReLU,负区域也有梯度,缓解神经元“死亡”问题

  • 平滑优化:在损失曲面中提供更平滑的过渡,有助于优化稳定性

  • 性能优异:在多种深度学习任务(尤其是大规模模型)中表现优于 ReLU 和 Leaky ReLU

5. 与其他激活函数对比

激活函数

公式

特点

ReLU

max(0,x)

简单,但负区域梯度为零

Leaky ReLU

max(0.01x,x)

缓解死亡神经元问题

SiLU/Swish

xσ(x)

平滑,自门控,优化友好

6. 应用

  • 最初在 Transformer 模型和大规模图像分类任务中表现突出

  • 被用于 BERT、EfficientNet 等现代架构

  • 在需要平滑优化的场景(如强化学习、生成模型)中也有应用

7. 代码示例(PyTorch)

import torch
import torch.nn as nn

# 内置实现
silu = nn.SiLU()

# 手动实现
def silu(x):
    return x * torch.sigmoid(x)

# 在模型中使用
model = nn.Sequential(
    nn.Linear(10, 50),
    nn.SiLU(),  # 替代 ReLU
    nn.Linear(50, 1)
)

8. 变体

  • Swish with βSwishβ(x)=xσ(βx),通过 β 控制门控强度

  • Hard Swish:在移动端设备上近似实现,计算更高效

SiLU 因其平衡了表达能力和优化稳定性,已成为现代深度学习模型中 ReLU 的有力竞争者。