PyTorch 深度学习笔记(十一):Swish 激活函数的自门控机制原理与特性

部署运行你感兴趣的模型镜像

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]$,利于梯度传播。

关键特性

  1. 无界性
    Swish 在正区间无上界,可避免类似 ReLU 的神经元“死亡”问题。

  2. 非单调性
    虽然整体趋势单调,但小负值区域存在轻微下降($\beta>0$ 时),可能增强表达能力。

  3. 导数特性
    导数公式为:
    $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$ 的尺度,过大可能导致梯度爆炸。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值