Swish:自动搜索得到的一种自门控的激活函数.

在本文中作者使用自动搜索(automated search)技术寻找更好的激活函数,并提出了一种新的激活函数:Swish

1. 搜索激活函数

需要为激活函数设计合适的搜索空间。作者设计的搜索空间如下:

该搜索空间由一个core unit递归地构造而成。core unit接收两个输入(其中一个输入可以是上一个输出),分别经过两次一元(unary)操作后使用一个二元(binary)操作进行组合,并得到输出。作者选用的一元操作和二元操作如下:

作者使用一个RNN控制器进行搜索。控制器在每个时间步长搜索激活函数的一个组成部分。当搜索完成一个激活函数后,对应地构造一个ResNet-20子网络,在CIFAR-10上训练$10K$轮并记录验证准确率。准确率作为reward通过强化学习训练控制器。由于搜索空间较大,作者采用并行搜索策略,

2. 搜索结果

搜索得到的表现较好的若干激活函数如上图所示。这些激活函数的特点如下:

激活函数的搜索过程是在小模型上进行的,作者通过进一步实验证明这些函数可以成功泛化到较大的模型上,并保持或超过ReLU激活函数的准确率。

3. Swish

作者将搜索得到表现最好的激活函数称为SwishSwish的函数表达式如下,其中$β$是一个常数或可学习的参数:

\[\text{Swish}(x)=x·\text{sigmoid}(βx)=\frac{x}{1+e^{-\beta x}}\]

Swish及其一阶导数的图像如下:

当$β=0$时,Swish函数退化成线性函数$\frac{x}{2}$;当$β\to ∞$时,Swish函数退化成ReLU函数。因此Swish函数可以看作是线性函数和ReLU函数之间的光滑非线性插值结果。

ReLU函数相似,Swish函数无上界、有下界。不同于ReLU函数,Swish函数是光滑的,而且是非单调的。Swish函数的导数计算如下(记$\sigma$为sigmoid函数):

\[f'(x) = \sigma(\beta x) + x \cdot \sigma'(\beta x) \\ = \sigma(\beta x) + \beta x \cdot \sigma(\beta x) \cdot (1-\sigma(\beta x)) \\ = \beta x \cdot \sigma(\beta x) + \sigma(\beta x)(1-\beta x \cdot \sigma(\beta x)) \\ = \beta f(x) + \sigma(\beta x)(1-\beta f(x))\]

$\beta$控制着Swish函数的导数在$0$-$1$之间变化的程度。不同于ReLU的导数在$x>0$时恒为$1$,Swish函数的导数是变化的。当$x<0$时,Swish函数是非单调的。

LSTM门控(gating)机制的启发,Swish函数可以看作一种软性的自门控机制(self-gating),使用自身的值作为门控,当$\text{sigmoid}(βx)$接近于$1$时门“开”;当$\text{sigmoid}(βx)$接近于$0$时门“关”。

参数$\beta$可以通过学习得到,则网络中每一个神经元的激活函数参数都可以是不同的。作者展示了在一个网络上参数$\beta$的取值分布,大多数参数取值在$1$附近。

实验结果表明Swish函数在大多数任务上超越了其他人工设计的激活函数: