近十年来,修正线性单元 (ReLU) 一直是深度学习领域无可争议的激活函数之王。它优雅而简单——当输入为正时直接输出输入值,否则输出零——这一突破使得超深度神经网络的训练成为现实。快速、高效、易于实现,ReLU 迅速成为整个 AI 社区的默认选择。
许多竞争者试图挑战 ReLU 的王座。像 Leaky ReLU、ELU、SELU 等替代方案通过调整 ReLU 处理负输入的方式来寻求改进。然而,没有一个能真正取而代之。这些改进在不同模型和数据集上的效果往往不稳定,最终让实践者们回归 ReLU 可靠的简洁之美。
这引出了一个发人深省的问题: ReLU 真的是最优解吗?还是我们只是没有找到合适的挑战者?与其凭直觉手动设计更好的函数,我们能否在数学空间中 自动搜索 出一个更优的?
这正是 Google Brain 论文 《搜索激活函数》 (Searching for Activation Functions) 背后的核心思想。作者将激活函数设计转化为一个搜索问题,借助强化学习探索极为广阔的函数空间。结果?他们发现了 Swish,定义如下:
\[ f(x) = x \cdot \sigma(\beta x) \]其中 \(\sigma\) 为 sigmoid 函数,\(\beta\) 是常数或可训练参数。Swish 在深度且具挑战性的模型中始终优于 ReLU。本文将详解它的发现过程、特点,以及为什么它可能成为新的首选激活函数。
从梯度消失到 ReLU 的统治
在神经网络中,每一层会先对输入进行线性变换 (矩阵乘法) 。如果没有激活函数,叠加的多层会退化成单一的大型线性变换,无法学习图像、音频或文本等数据中复杂的非线性模式。
激活函数引入了关键的非线性。早期的 sigmoid 和 tanh 曾经流行,但由于 梯度消失 问题而逐渐淡出舞台: 当梯度在多层间反向传播时会呈指数级缩小,使得训练深度网络变得不可行。
ReLU,定义为 \(f(x) = \max(x, 0)\),是游戏规则的改变者。对于正输入,其导数恒为 1,让梯度无衰减地流动。这一特性催生了 2012 年的突破性模型 AlexNet,标志着深度学习热潮的开端。尽管存在“死亡 ReLU” (神经元长时间输出零) 的缺陷,其高效与速度依旧巩固了 ReLU 的标准地位。
自动化搜索更优激活函数
与其靠猜测和反复测试,作者自动化了寻找激活函数的过程——需要两个关键步骤:
1. 定义搜索空间
不能简单地告诉计算机“找出最好的激活函数”,必须设定构建模块。作者将搜索空间建立在可重复的 核心单元 上: 两个输入,各自经过一个 *一元函数 *(单输入单输出) 处理,再通过一个 *二元函数 *(双输入单输出) 组合。
图 1: 构建激活函数的核心单元结构。
一元函数包括:
- 基本运算: \(x, -x, x^2, x^3, \sqrt{x}, \exp(x), \sin(x)\)
- 现有激活函数: sigmoid \(\sigma(x)\)、ReLU \(\max(x, 0)\)
- 可训练常数: 如 \(\beta\)
二元函数用于组合输入:
- 加法: \(x_1 + x_2\)
- 乘法: \(x_1 \cdot x_2\)
- 最大值: \(\max(x_1, x_2)\)
通过组合这些核心单元,搜索可以覆盖极其多样的候选函数。
2. 搜索算法
面对多达 \(10^{12}\) 的组合,穷举搜索不可行。作者采用了类似神经架构搜索 (NAS) 的强化学习方法。
他们训练了一个 RNN 控制器 来生成候选激活函数定义——就像一个语言模型,只不过“词语”是各种一元与二元运算。
图 2: RNN 控制器预测激活函数组件。
循环过程如下:
- 生成: 控制器输出函数定义。
- 测试: 在 CIFAR-10 上用新函数构建并训练一个 ResNet-20 子网络。
- 奖励: 验证集准确率作为强化学习奖励信号。
- 更新: 近端策略优化算法推动控制器生成更高准确率的函数。
使用多台工作机分布式训练,加快了搜索进程。
发现: 简单为王
经过大量搜索,团队分析了表现最佳的新型函数。
图 3: 最佳激活函数的曲线。
主要观察:
- 简洁性: 最佳函数通常只用一到两个核心单元,过度复杂反而阻碍优化。
- 共同结构: 许多顶尖函数符合 \(b(x, g(x))\) 的模式,即原始激活前值 \(x\) 作为最终二元函数的一个输入——ReLU 也符合这种模式 (\(\max(x, 0)\)) 。
- 周期性潜力: 包含 \(\sin\) 或 \(\cos\) 的函数表现出潜力——这是尚未充分探索的领域。
- 除法陷阱: 带有除法的函数容易因分母接近零导致输出爆炸而失败。
团队在更大的 CIFAR 模型上测试这些顶尖函数的通用性。
表 1: 顶尖函数在 CIFAR-10 上的准确率。
表 2: 顶尖函数在 CIFAR-100 上的准确率。
两个函数脱颖而出: \(x \cdot \sigma(\beta x)\) 和 \(\max(x, \sigma(x))\)。前者被命名为 Swish,具有稍好的泛化能力,并成为深入研究的核心。
认识 Swish: \(f(x) = x \cdot \sigma(\beta x)\)
Swish 定义为:
\[ f(x) = x \cdot \sigma(\beta x), \quad \sigma(z) = \frac{1}{1 + e^{-z}} \]其中 \(\beta\) 为常数或可训练参数。
图 4: 不同 \(\beta\) 值下的 Swish 曲线及导数。
特性:
- 平滑性: 零点处无尖角——完全可微。
- 非单调性: 负输入时先降后升形成独特“凸起”,大多数激活函数不具备。
- 正向无界,负向有界: 类似 ReLU,但更平滑。
- 介于线性与 ReLU 之间: 当 \(\beta \to 0\) 时趋近线性 (\(x/2\)) ;当 \(\beta \to \infty\) 时趋近 ReLU。
凸起的重要性
图 6: Swish 激活前值的分布。
许多激活前值落在凸起区间 (\(-5 \le x \le 0\)) ,说明网络在学习中利用了这一曲线形状。
可训练的 \(\beta\)
\(\beta\) 可通过训练适配,让每个神经元调整曲线。
图 7: Mobile NASNet-A 中学习到的 \(\beta\) 分布。
学习值大多集中在 \(\beta \approx 1\) 附近,但分布足够广,显示其适应性。
Swish 与其他激活函数的对比
作者将 Swish 与以下基线进行比较:
- LReLU: 固定负半轴斜率。
- PReLU: 可学习负半轴斜率。
- Softplus: ReLU 的平滑近似 \(\log(1+\exp(x))\)。
- ELU: 负半轴使用指数函数。
- SELU: 用于自归一化网络的缩放版 ELU。
- GELU: 类似 Swish 的平滑非单调曲线。
表 3: 综合比较结果——Swish 多数情况下获胜。
CIFAR 结果
在 CIFAR-10/100 上,Swish (无论可训练还是固定 \(\beta=1\)) 在所有模型中表现均不逊于 ReLU,且常能匹敌最佳基线。
表 4: CIFAR-10 不同模型的准确率。
表 5: CIFAR-100 不同模型的准确率。
ImageNet 结果
在 ImageNet 架构中将 ReLU 换为 Swish,即可提升性能:
图 8: Mobile NASNet-A 训练曲线——Swish 超越 ReLU。
Mobile NASNet-A 提升 top-1 准确率 +0.9%;Inception-ResNet-v2 提升 +0.6%。
表 6: Mobile NASNet-A ImageNet 结果。
表 7: Inception-ResNet-v2 ImageNet 结果。
机器翻译
为测试跨领域效果,Swish 被用于 WMT14 英译德任务的 Transformer 模型中,表现依旧顶尖。
表 11: 不同 newstest 集上的 BLEU 分数——Swish 表现出色。
结论: Swish 会成为新的默认吗?
本研究彰显了元学习——此处是学习激活函数——在颠覆既有认知方面的强大力量。团队没有依赖直觉,而是探索了广阔的数学空间,最终找到比现任冠军更好的函数。
Swish,\(f(x) = x \cdot \sigma(\beta x)\) 具有:
- 简单: 在大多数深度学习框架中只需一行改动即可实现。
- 高效: 从视觉到机器翻译的任务中均表现出一致提升。
- 即插即用: 无需重新设计架构就能获益——若架构从一开始就为 Swish 设计,潜力更大。
在残差连接与归一化层盛行的时代,Swish 的成功挑战了“ReLU 恒定梯度对深度网络至关重要”的传统观点。其平滑、非单调的特性可能带来 ReLU 无法提供的优势。
对于追求快速收益的实践者来说,将 ReLU 换成 Swish 可能是最简单且最具前景的尝试之一。
旧王已逝,新王当立——Swish。