ELiSH:使用遗传算法寻找最优激活函数.

在本文中作者提出了一种新的激活函数ELiSHHardELiSH,并进一步提出了一种使用遗传算法针对特定任务选择合适激活函数的方法。

1. ELiSH

最近提出的Swish激活函数具有一些良好的特性,如无上界、有下界、非单调、光滑。Swish表示为:

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

受此启发,作者提出了ELiSH激活函数,全称是Exponential Linear Sigmoid SquasHing,表达式如下:

\[\text{ELiSH}(x) =\text{ELU}(x)\cdot \text{sigmoid}(x) \\= \begin{cases}\frac{x}{1+e^{-x}}, & x≥0 \\\frac{e^x-1}{1+e^{-x}}, & x<0\end{cases}\]

当$x>0$时ELiSHSwish相同,具有后者的性质;当$x<0$时ELiSH具有ELU的自动减少bias shift、对噪声鲁棒等特点。

作者还提出了HardELiSH激活函数,表达式如下:

\[\text{HardELiSH}(x) =\text{ELU}(x)\cdot \text{Hardsigmoid}(x) \\ = \begin{cases} x \cdot \max(0,\min(1,(x+1)/2)) & x \geq 0 \\ (e^x-1)\cdot \max(0,\min(1,(x+1)/2)) & x<0 \end{cases} \\= \begin{cases} x, & x≥1 \\ x(x+1)/2, & 0 \leq x<1 \\ (e^x-1)(x+1)/2, & -1\leq x<0 \\ 0, &x≤-1 \end{cases}\]

两个激活函数的曲线及其导数如下:

2. 遗传算法

遗传算法(genetic algorithm)是通过模拟自然进化过程搜索组合优化最优解的过程。首先设定一系列个体(individuals),每一个个体是由一系列性质(称为基因genes)描述的,评估它们在某项指标的适应度(fitness),然后迭代地执行以下操作:

每一次迭代生成新的个体会被加入总体(population)中,每次迭代会评估总体中所有个体的适应度,并选择适应度较高的若干个体继续迭代过程。当达到预设的迭代次数或有个体满足优化指标后停止迭代。

对于激活函数的搜索,作者认为目前常用的激活函数都是piece-wise的,即可以表示成两部分的乘积。每一部分指定为个体的一个基因:

作者提出了两种合适的交叉方法用于生成一个新的激活函数,即遗传(inheritance)和杂交(hybrid)。

遗传是指随机选择一个个体的左边和另一个个体的右边构成新的个体:

杂交是指对两个个体的左边和右边分别执行某种操作,再构成新的个体:

变异能够增加总体密度,实现方式是随机选择一个部分进行替换:

使用遗传算法搜索激活函数的算法流程如下:

3. 实验分析

作者预设了$11$个用于基因的激活函数:

作者在三种不同的图像分类数据集上进行实验,分别搜索在不同数据集上最优的激活函数。在这些数据集上最优的几个激活函数如下:

⚪ CIFAR-10

⚪ CIFAR-100

⚪ TinyImageNet