嗨热线网 > 科技 > 智能 >

超越ReLU却鲜为人知后被挖掘:BERT、GPT-2等都在用

2019-12-31 14:32
  少在NLP领域里,GELU已经成为了众多业内最佳模型的选择。
 
  作为决定神经网络是否传递信息的「开关」,激活函数对于神经网络而言至关重要。不过今天被人们普遍采用的ReLU真的是最高效的方法吗?最近在社交网络上,人们找到了一个看来更强大的激活函数:GELU,这种方法早在2016年即被人提出,然而其论文迄今为止在GoogleScholar上的被引用次数却只有34次。
 
  其实,GELU已经被很多目前最为领先的模型所采用。据不完全统计,BERT、RoBERTa、ALBERT等目前业内顶尖的NLP模型都使用了这种激活函数。另外,在OpenAI声名远播的无监督预训练模型GPT-2中,研究人员在所有编码器模块中都使用了GELU激活函数。
  GELU论文的作者来自UCBerkeley和丰田工业大学芝加哥分校:
 
  论文链接:https://arxiv.org/pdf/1606.08415.pdf
 
  「现任」最流行的激活函数ReLU
 
  在讲述GELU之前,让我们先回顾一下目前最为流行的线性整流函数(RectifiedLinearUnit,ReLU),它又称修正线性单元。RELU是多伦多大学VinodNair与图灵奖获得者GeoffreyHinton等人的研究,其研究被ICML2010大会接收。
 
  RELU是人工神经网络中最常用的激活函数(activationfunction),通常指代以「斜坡」函数及其变种为代表的非线性函数族。这个函数族比较常见的有ReLU以及LeakyReLU。
 
  通常意义下,线性整流函数指代数学中的斜坡函数,即:
 
  函数图像如下:
 
  而在神经网络中,线性整流作为神经元的激活函数,定义了该神经元在线性变换之后的非线性输出结果。ReLU可以对抗梯度爆炸/消失问题,相对而言计算效率也很高。因为在2012年被著名的计算机视觉模型AlexNet应用,ReLU变得流行开来,目前它被普遍认为是效果最好的激活函数。
 
  激活函数发展史
 
  早期人工神经元使用二元阈值单元(Hopfield,1982;McCulloch&Pitts,1943)。这些困难的二元决策通过Sigmoid激活函数进行平滑化,从而具有非常快的解码速度,并可以利用反向传播进行训练。但是,随着网络深度的不断增加,利用Sigmoid激活函数来训练被证实不如非平滑、低概率性的ReLU有效(Nair&Hinton,2010),因为ReLU基于输入信号做出门控决策。
 
  尽管ReLU缺少统计学意义上的支持,但依然是一种非常有竞争力的工程解决方案,其收敛速度和效果好于Sigmoid激活函数。得益于ReLU的成功,近来有一个它的改进版——ELU函数。这种函数可以让类似ReLU的非线性函数能够输出负值并提升训练速度。总之,对于激活函数的选择也是神经网络架构设计中重要的一部分。
 
  深度非线性分类器可以和数据拟合地很好,使得设计者需要面对随机正则化(如在隐层中加入噪声)或者采用dropout机制。这两个选择依然是和激活函数割裂的。一些随机正则化可以让网络表现得像是很多个网络的组合,并可以提升精确度。
 
  因此,非线性和dropout共同决定了神经元的输出,但这两种创新依然存在区别。此外,非线性和dropout彼此也不将对方包含在内,因为流行的随机正则化在执行时与输入无关,并且非线性也获得此类正则化的辅助。
 
  在本文中,研究者提出了一种新的非线性激活函数,名为高斯误差线性单元(GaussianErrorLinearUnit,GELU)。GELU与随机正则化有关,因为它是自适应Dropout的修正预期(Ba&Frey,2013)。这表明神经元输出的概率性更高。研究者发现,在计算机视觉、自然语言处理和自动语音识别等任务上,使用GELU激活函数的模型性能与使用ReLU或ELU的模型相当或超越了它们。
 
  GELU激活函数,来点数学
 
  研究者表明,受到Dropout、ReLU等机制的影响,它们都希望将「不重要」的激活信息规整为零。我们可以理解为,对于输入的值,我们根据它的情况乘上1或0。更「数学」一点的描述是,对于每一个输入x,其服从于标准正态分布N(0,1),它会乘上一个伯努利分布Bernoulli(Φ(x)),其中Φ(x)=P(X≤x)。
 
  随着x的降低,它被归零的概率会升高。对于ReLU来说,这个界限就是0,输入少于零就会被归零。这一类激活函数,不仅保留了概率性,同时也保留了对输入的依赖性。
 
  好了,现在我们可以看看GELU到底长什么样子了。我们经常希望神经网络具有确定性决策,这种想法催生了GELU激活函数的诞生。这种函数的非线性希望对输入x上的随机正则化项做一个转换,听着比较费劲,具体来说可以表示为:Φ(x)×Ix+(1Φ(x))×0x=xΦ(x)。
 
  我们可以理解为,对于一部分Φ(x),它直接乘以输入x,而对于另一部分(1Φ(x)),它们需要归零。不太严格地说,上面这个表达式可以按当前输入x比其它输入大多少来缩放x。
 
  因为高斯概率分布函数通常根据损失函数计算,因此研究者定义高斯误差线性单元(GELU)为:
 
  上面这个函数是无法直接计算的,因此可以通过另外的方法来逼近这样的激活函数,研究者得出来的表达式为:
 
  虽然研究者表示高斯概率分布函数的均值与方差都可以设置为可训练,但他们简单地采用均值为0方差为1。看到这样的表达式,让人想到了谷歌2017年提出来的Swish激活函数,它的表达式可以简单写为:f(x)=x·sigmoid(x)。
 
  GELU激活函数的图像。
 
  在QuocV.Le等人研究的成果中,他们将Swish激活函数定义为x·σ(βx),其中σ()是标准的sigmoid函数,β可以是常数,也可以是可训练的参数。这样的激活函数是「被搜索」出来的,研究者在一系列函数族中做自动搜索,并表示Swish激活函数的效果最好。
 
  通过搜索查找到的激活函数,它们效果都还不错,选自arXiv:1710.05941。
 
  不服跑分:GELUvsReLU
 
  研究者对GELU和ReLU、ELU三个激活函数进行了性能上的比较。他们选择了以下任务:
 
  MNIST图片分类(10类,6万张训练图片和1万张测试图片);
 
  TIMIT语音识别(3696个训练样本、1152个验证样本和192个测试样本);
 
  CIFAR-10/100分类(10/100个类,5万的训练样本和1万的测试样本)。

郑重说明:网站资源摘自互联网,如有侵权,麻烦通知删除,谢谢!

联系方式:hiholiday12399@gmail.com