Swish 激活函数简介

Swish 激活函数是一种在深度学习中广泛使用的激活函数,它最初作为 Sigmoid-weighted Linear Unit (SiLU) 在 GELU 论文中被提出。本文将介绍 Swish 的数学原理及其应用,并通过与其他激活函数的对比,分析其性质。

1. 简介

在深度神经网络中,激活函数的选择对模型性能有着重要影响。从 Sigmoid 到 ReLU,再到 GELU,激活函数的发展体现了深度学习领域对非线性变换的不断探索。Swish 作为一个相对较新的激活函数,最初以 Sigmoid-weighted Linear Unit (SiLU) 的形式在 GELU 论文中被提出,后来被 Google Brain 团队重新发现并推广。

发展历程

Swish/SiLU 的发展经历了以下几个重要阶段:

  • 2016 年:在 GELU 论文中首次提出 SiLU
  • 2017 年:在强化学习中被重新提出为 Sigmoid-weighted Linear Unit (SiL)
  • 2017 年末:Google Brain 团队提出 Swish 函数,并引入可学习参数 \beta

2. Swish 的数学表示

2.1 基本定义

Swish 函数是一个带有参数 \beta 的函数族,其数学表达式为:

\begin{equation}\text{Swish}_\beta(x) = x \cdot \sigma(\beta x) = \frac{x}{1 + e^{-\beta x}}\end{equation}

其中 \sigma(x) 是 Sigmoid 函数:

\begin{equation}\sigma(x) = \frac{1}{1 + e^{-x}}\end{equation}

\beta = 1 时,Swish 退化为 SiLU:

\begin{equation}\text{SiLU}(x) = \text{Swish}_1(x) = \frac{x}{1 + e^{-x}}\end{equation}

\beta 取值对比

Swish 函数在不同的 \beta 值下具有不同的特性:

  • \beta = 0 时,函数变为线性:f(x) = x/2
  • \beta = 1 时,函数即为 SiLU
  • \beta \to \infty 时,函数趋近于 ReLU

2.2 导数计算

基本形式回顾

Swish 函数的基本形式为:

\begin{equation}\text{Swish}(x) = x \cdot \sigma(\beta x)\end{equation}

其中 \sigma(x) 为 Sigmoid 函数:

\begin{equation}\sigma(x) = \frac{1}{1 + e^{-x}}\end{equation}

使用乘积法则进行导数推导

根据乘积法则:

\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}[f(x)g(x)] = f'(x)g(x) + f(x)g'(x)\end{equation}

对 Swish 函数求导:

\begin{equation}\begin{aligned}\frac{\mathrm{d}}{\mathrm{dx}}\text{Swish}(x) &= \frac{\mathrm{d}}{\mathrm{dx}}[x \cdot \sigma(\beta x)] \\&= 1 \cdot \sigma(\beta x) + x \cdot \frac{\mathrm{d}}{\mathrm{dx}}\sigma(\beta x)\end{aligned}\end{equation}

Sigmoid 函数的导数为:

\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\sigma(x) = \sigma(x)(1-\sigma(x))\end{equation}

因此:

\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\sigma(\beta x) = \beta\sigma(\beta x)(1-\sigma(\beta x))\end{equation}

将上式代入,得到 Swish 的导数:

\begin{equation}\begin{aligned}\frac{\mathrm{d}}{\mathrm{dx}}\text{Swish}(x) &= \sigma(\beta x) + x\beta\sigma(\beta x)(1-\sigma(\beta x)) \\&= \sigma(\beta x) + \beta x\sigma(\beta x) - \beta x\sigma^2(\beta x) \\&= \sigma(\beta x)(1 + \beta x(1-\sigma(\beta x)))\end{aligned}\end{equation}

如果是对于最常用的 SiLU,上述公式中 \beta = 1 则有:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\text{SiLU}(x) = \sigma(x)(1 + x(1-\sigma(x)))\end{equation}

导数的性质

Swish 导数具有以下重要特性:

  • 导数在 x = 0 处的值为 1/2
  • 导数在某些区域可以大于 1,这使得梯度在反向传播时可能被放大
  • 导数是平滑的,有助于优化过程的稳定性

3. Swish 与其他激活函数的对比

3.1 与 ReLU 的对比

ReLU 的表达式为:
\begin{equation}\text{ReLU}(x) = \max(0,x)\end{equation}

与 ReLU 相比,Swish 具有以下特点:

  • 平滑性:Swish 在所有点都是平滑的,而 ReLU 在 x = 0 处不可导
  • 负值区域:Swish 允许少量负值通过,这可能有助于信息流动
  • 有界性:当 x \to -\infty 时,Swish 趋近于 0,而不是像 ReLU 那样直接截断

3.2 与 GELU 的对比

GELU 的表达式为:
\begin{equation}\text{GELU}(x) = x\cdot\Phi(x)\end{equation}

Swish 和 GELU 有一些共同点:

  • 都是平滑函数
  • 都可以看作是输入值被某个概率函数加权的结果
  • 在实际应用中性能相近

主要区别:

  • 计算复杂度:Swish 的计算相对更简单
  • 概率解释:GELU 使用高斯分布,而 Swish 使用 Sigmoid 函数
  • 参数化:Swish 引入了可学习参数 \beta

参考材料

  1. Gaussian Error Linear Units (GELUs)
  2. Searching for Activation Functions
  3. Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning
  4. PyTorch Documentation - torch.nn.SiLU
  5. Wikipedia - Swish function
  6. Some recent activation functions mimicking ReLU
  7. 浅谈神经网络中激活函数的设计
  8. 谷歌大脑提出新型激活函数Swish惹争议:可直接替换并优于ReLU?
  9. GELU(Gaussian Error Linear Unit)激活函数简介

Add a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注