21种NLP任务激活函数大比拼:你一定猜不到谁赢了

在用神经网络学习自然语言处理任务时,选择哪个激活函数更好?去年谷歌大脑提出的 swish 函数又如何?不同的研究者和工程师可能会给出不同的答案。德国达姆施塔特工业大学的一篇 EMNLP 论文给出了 21 种激活函数在 NLP 任务上的实验比较结果,发现比较冷门的 penalized tanh 函数表现优异。研究者也已在 GitHub 上发布了相关代码和数据。

论文:https://arxiv.org/pdf/1901.02671.pdf

项目:https://github.com/UKPLab/emnlp2018-activation-functions

摘要:激活函数神经网络中发挥着重要的作用,它们的非线性为深度学习的成功做出了重要的贡献。目前最流行的激活函数之一是 ReLU,但研究者最近又提出或「发现」了几种竞争者,其中包括 LReLU 函数和 swish。大多数研究都是在少数几种任务上比较新提出的激活函数(通常是图像分类方面的任务),且对比的竞争者也少(通常是 ReLU),而我们首次在 8 种不同的 NLP 任务上进行了 21 种激活函数的大规模比较。

我们发现一种很大程度上不为人知的激活函数在所有任务上都表现得最稳定,即所谓的 penalized tanh 函数。我们还表明它能在 LSTM 单元中成功替代 sigmoid 和 tanh 门,并能在一种高难度的 NLP 任务上取得优于标准选择 2 个百分点的表现。

1 引言

激活函数神经网络的一大关键组件,因为它们可将原本线性的分类器转换成非线性的。神经网络近些年在众多任务上表现优异这一事实已经证明这种转换至关重要。尽管理论上而言,Sigmoid 或 tanh 等不同的激活函数往往是等价的——它们都能近似任意的连续函数(Hornik, 1991),但不同的激活函数往往会在实践中表现出非常多样的行为。

举个例子,sigmoid 是一种在神经网络实践中占据了几十年主导地位的激活函数,最终却被证明不适用于学习,原因是(根据公认的看法)它的导数很小,这可能会导致梯度消失问题。在这方面,事实证明所谓的 ReLU 函数(Glorot et al., 2011)要更加适用得多。它在正的区域有一个恒等导数,因此宣称更不易受梯度消失问题的影响。因此它也已经成为了目前最流行的激活函数(有争议)。对 ReLU 的成功的认可让人们提出了多种扩展(Maas et al., 2013; He et al., 2015; Klambauer et al., 2017),但没有任何一种能一样受欢迎,原因很可能是 ReLU 很简洁,而不同扩展在不同数据集和模型上所报告的增益往往是不一致的或较低(Ramachandran et al., 2017)。

人们已经为激活函数认定了多种被认为对学习成功很重要的特征属性,比如与它们的导数相关的属性、单调性以及它们的范围是否有限。但是,Ramachandran et al. (2017) 在近期一项研究中使用了自动搜索来寻找表现优良的全新激活函数,他们的搜索空间包含了基本一元和二元函数的组合,比如 max、min、sin、tanh 或 exp。他们发现很多函数都不具备被认为有用的属性,比如非单调激活函数或不满足 ReLU 保留梯度的属性的函数。

实际上,他们最成功的函数——他们称之为 swish,并不满足这两个条件。但是,和之前的工作一样,他们也只是在少数不同数据集和少数几类不同网络上对比评估了他们的新发现和(整流)基准激活函数——这些数据集通常取自 CIFAR(Krizhevsky, 2009)和 ImageNet(Russakovsky et al., 2015)等图像分类社区,使用的网络也通常是充斥着图像分类社区的深度卷积网络(Szegedy et al., 2016)。

就我们所知,人们还没有大规模地通过实验比较过不同激活函数在不同任务和网络架构上的表现,更别说在自然语言处理(NLP)领域了。究竟哪个激活函数在不同的 NLP 任务和常用 NLP 模型上表现最好最稳定?在此之前,这个问题一直都未能得到解答。

我们用本研究填补了这一空白。(1)我们比较了 21 种不同的激活函数,包括 Ramachandran et al. (2017) 中通过自动搜索找到的 6 种表现最佳的激活函数;(2)我们采用了 3 种常见的 NLP 任务类型(句子分类、文档分类、序列标注),包含 8 项单个任务;(3)我们使用了 3 种常用的 NLP 架构,即 MLP、CNN 和 RNN。(4)我们在两个不同维度上比较了所有这些函数,即最佳表现和平均表现。

我们发现,在这些不同的任务上,一种很大程度上不为人知的激活函数「penalized tanh」(Xu et al., 2016)表现最稳定。我们还发现它能在 LSTM 单元中成功替代 tanh 和 sigmoid。我们进一步发现 Ramachandran et al. (2017) 中发现的大多数表现优异的函数在我们的任务上表现不佳。但 swish 是一个例外,它在多个任务上都表现不错,但并没有 penalized tanh 与其它函数稳定

2 理论

我们考虑了 21 种激活函数,其中 6 种是 Ramachandran et al. (2017) 中「全新」提出的。表 1 给出了这 6 种函数与 sigmoid 函数的形式。

表 1:上:sigmoid 函数与 Ramachandran et al. (2017) 中表现最好的 6 种激活函数。下:具有不同参数的 LReLU 函数以及 penalized tanh。

另外 14 种激活函数分别是:tanh、sin、relu、lrelu0.01、lrelu-0.30、maxout-2、maxout-3、maxout4、prelu、linear、elu、cube、penalized tanh、selu。我们简单介绍一下:

  • lrelu-0.01 和 lrelu0.30 是所谓的 leaky relu(LReLU)函数(Maas et al., 2013),它们背后的思想是避免在 relu 的负区域出现零激活/导数。表 1 也给出了它们的函数形式。

  • prelu(He et al., 2015)是对 LReLU 函数的泛化,是将其负区域中的斜率设置为一个可学习的参数

  • maxout 函数(Goodfellow et al., 2013)的不同在于其引入了额外的参数,而且并不在单个标量输入上操作。比如 maxout-2 是取两个输入中的最大值的操作:max{xW+b, xV+c},因此可学习参数的数量多一倍。maxout-3 类似,是取三个输入中的最大值。如 Goodfellow et al. (2013) 所示,maxout 可以近似任意凸函数。

  • sin 是标准的正弦函数,被提出用于神经网络学习,比如 Parascandolo et al. (2016),其中表明 sin 在特定任务上的学习速度比更有地位的函数快。

  • penalized tanh(Xu et al., 2016)的定义与 LReLU 函数类似,可被看作是「惩罚」负区域中的恒等函数。penalized tanh 在 CIFAR-100 上报告的优良表现(Krizhevsky, 2009)让作者推测:激活函数在原点附近的斜率可能对学习至关重要。

  • linear 是恒等函数 f(x) = x。

  • cube 是立方函数 f(x) = x³,由 Chen and Manning (2014) 为依赖关系分析所用的一个 MLP 提出。

  • elu(Clevert et al., 2015)是 relu 的又一种变体,其假设了负值,使平均激活更以零为中心。

  • selu 是 elu 的一种扩展版,Klambauer et al. (2017) 将其用在了所谓的自归一化神经网络背景中。

激活函数的属性

人们推测激活函数的很多属性都对学习成功至关重要。表 2 列出了其中一些,另外还给出了一些简要的说明和解释。

表 2:常被提及的激活函数属性

3 实验 

我们使用三种神经网络类型和三种 NLP 任务类型进行了实验。

表 3:我们实验中使用的评估任务,按任务类型(句子分类、文档分类、序列标注)分组,并给出了统计数据和示例。C 是指所要预测的类别的数量。

表 4:每种网络类型的超参数范围。超参数取自指定范围中的离散或连续均匀分布。重复的值表示多个集合。N (µ, s) 是均值为 μ 且标准差为 s 的正态分布;µ = m 是 Keras 的特定优化器的默认值(如果选取的学习率小于 0,则我们选择它为 m)。

3.1 MLP & 句子分类

图 1:句子分类。左侧 Y 轴:最佳结果;右侧 Y 轴:平均结果。在 Y 轴上的分数是在所有 mini 实验上的平均。

3.2 CNN & 文档分类

图 2:文档分类

3.3 RNN & 序列标注

图 3:序列标注4 分析与讨论 

获胜者统计情况

在最佳表现上,句子分类、文档分类和序列标注这三个元任务平均而言都是 rectifier(整流)家族的一个成员获胜,即 relu(获胜 2 次)和 elu。另外,在每种情况中,cube 和 cosid 都位列表现最差的激活函数。Ramachandran et al. (2017) 中新提出的函数大都位居中间位置,但 swish 和 minsin 在「表现最佳」类别中表现最佳。对于「表现平均」类别,maxout 函数尤其突出,另外 penalized tanh 和 sin 也常处于领先位置。

为了得到更深入的见解,我们计算了所有 17 个 mini 实验上的获胜统计情况,统计了每种激活函数位居前三的次数。结果见表 5,其中排除了 prelu 和 maxout 函数,因为它们没有在所有 mini 实验中测试。

表 5:获得前三名的次数统计。括号中是进入前三的次数,仅给出了至少 4 次进入前三的激活函数

可以看到,penalized tanh 和 swish 在「表现最佳」类别中胜出,之后是整流系函数。「表现平均」类别的获胜者无疑是通过使用有限范围来使激活函数饱和而获胜的。如果将比较限制在句子和文档分类(包含 maxout 函数),则 penalized tanh 在「表现平均」类别上优于 maxout。

似乎能够得出结论了:在各种超参数设置上,范围有限的函数表现更稳定,而非饱和函数往往能得到更好的最佳表现。penalized tanh 是值得一提的例外,它在这两个类别上都有很好的表现(成本更高的 maxout 函数是另一个例外)。如果 penalized tanh 在原点附近的斜率是其表现良好的原因,那么这也可以解释 cube 为何表现如此之差,因为它在原点附近非常平坦。

参数的影响

为了直观地了解超参数影响我们的不同激活函数的方式,我们在测试集上在所有使用的超参数上对激活函数的分数进行了回归操作。比如,我们估计了:

其中 y 是在测试集上的分数,n_l 是网络中层的数量,d 是 dropout 值等等。每个回归量 k 的系数 α_k 是我们想要估计的值(尤其是它们的大小和符号)。我们对规模(比如单元数、过滤器数)显著大于其它变量的特定变量求取了对数。对于优化器等离散回归量,我们使用了二元哑变量(binary dummy variables)。我们为每个激活函数和每个 mini 实验独立地估计了(1)式。

整体而言,结果呈现出非常多样化的模式,这让我们无法得出很确定的结果。尽管如此,我们还是观察到尽管所有模型在隐藏层更少时的表现平均更好,尤其是 swish 能稳健地应对更多隐藏层(较小的负系数 α_l),但 penalized tanh 的程度更小。在句子分类任务中,sin 和 maxout 函数能尤其稳健地应对隐藏层增多的情况。因为 penalized tanh 是一个饱和函数,sin 甚至是一个振荡函数,因此我们得出结论:保持梯度(导数接近 1)并非是成功学习更深度网络的必要前提条件。

理论论文NLP激活函数超参数
9
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

导数技术

导数(Derivative)是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x_0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x_0) 或 df(x_0)/dx。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

梯度消失问题技术

梯度消失指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞,直到梯度变得足够大,而这通常需要指数量级的时间。这种思想至少可以追溯到 Bengio 等人 1994 年的论文:「Learning long-term dependencies with gradient descent is difficult」,目前似乎仍然是人们对深度神经网络的训练困难的偏好解释。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~