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