Swish 激活函数的定义
Swish 激活函数由 Google Brain 团队提出,其数学表达式为:
$f(x) = x \cdot \sigma(\beta x)$
其中 $\sigma$ 是 Sigmoid 函数,$\beta$ 是可学习的参数或固定超参数。当 $\beta=1$ 时,Swish 退化为原始形式;$\beta=0$ 时等效于线性函数 $f(x)=x/2$。
自门控机制原理
Swish 的核心特性是自门控(Self-Gated),即输入 $x$ 通过 Sigmoid 函数生成一个介于 $(0,1)$ 的权重,动态缩放原始输入。这种机制与 LSTM 中的门控类似,但完全由输入自身驱动。
- 动态调节:对于较大的正输入,Sigmoid 输出接近 1,Swish 近似线性;对于负输入,Sigmoid 输出接近 0,抑制神经元激活。
- 平滑性:Swish 处处连续可导,且导数界于 $(0,1.1]$,利于梯度传播。
关键特性
-
无界性
Swish 在正区间无上界,可避免类似 ReLU 的神经元“死亡”问题。 -
非单调性
虽然整体趋势单调,但小负值区域存在轻微下降($\beta>0$ 时),可能增强表达能力。 -
导数特性
导数公式为:
$f'(x) = \sigma(\beta x) + \beta x \cdot \sigma(\beta x)(1-\sigma(\beta x))$
梯度不易消失,且存在自调整效应。
PyTorch 实现示例
import torch
import torch.nn as nn
class Swish(nn.Module):
def __init__(self, beta=1.0, trainable=False):
super().__init__()
if trainable:
self.beta = nn.Parameter(torch.tensor(beta))
else:
self.beta = beta
def forward(self, x):
return x * torch.sigmoid(self.beta * x)
与 ReLU 的对比优势
- 训练稳定性:Swish 的平滑性使得损失曲面更平缓,初始训练速度可能慢于 ReLU,但后期收敛更稳。
- 模型泛化:实验显示在深层网络中(如 ResNet-152),Swish 相比 ReLU 能提升约 0.5-1% 的准确率。
- 鲁棒性:对超参数 $\beta$ 不敏感,通常固定为 1 即可。
注意事项
- 计算成本:因包含 Sigmoid 运算,比 ReLU 慢约 20-30%。
- 初始化建议:使用标准初始化(如 Kaiming)时需注意 $\beta$ 的尺度,过大可能导致梯度爆炸。
240

被折叠的 条评论
为什么被折叠?



