查看原文
其他

GELU的两个初等函数近似是怎么来的?

苏剑林 PaperWeekly 2022-03-17


©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络


GELU,全称为 Gaussian Error Linear Unit,也算是 RELU 的变种,是一个非初等函数形式的激活函数。它由论文 Gaussian Error Linear Units (GELUs) [1] 提出,后来被用到了 GPT 中,再后来被用在了 BERT 中,再再后来的不少预训练语言模型也跟着用到了它。

随着 BERT 等预训练语言模型的兴起,GELU 也跟着水涨船高,莫名其妙地就成了热门的激活函数了。


▲ GELU函数图像
在 GELU 的原始论文中,作者不仅提出了 GELU 的精确形式,还给出了两个初等函数的近似形式,本文来讨论它们是怎么得到的。


GELU函数
GELU 函数的形式为:

其中 是标准正态分布的累积概率函数,即:

这里 。然后原论文还提了两个近似:
以及:

现在仍然有不少 Transformer 架构模型的实现都是用近似(4)作为 GELU 函数的实现。不过很多框架已经有精确的 计算函数了,所以初等函数近似形式的价值可能不会很大,因此大家就当是一道数学分析练习题吧。


用啥近似
显然,要找 GELU 的近似形式,就相当于找 近似,这也等价于找 的近似。


▲ erf函数图像
首先,我们要解决第一个问题:用什么函数来近似。从 图像我们可以看出它的特点:
1. 它是一个奇函数,即
2. 它单调递增,并且:

奇函数我们有很多,比如 等,并且奇函数的叠加、复合函数依然是奇函数,比如 ;又是奇函数,又单调递增且有界的,我们最容易想到的可能是 ,事实上, 确实跟 很相似。
因此,我们可以从 触发,构造一些可能的拟合形式,比如:


怎样近似
有了待拟合的形式之外,下面要考虑的就是怎么拟合、以什么标准的问题了,说白了,就是想个办法求出各项系数来。一般来说,有两种思路:局部拟合和全局拟合。

3.1 局部拟合

局部拟合基于泰勒展开,比如考虑近似形式 ,我们在 x=0 处展开,得到:

让前两项为 0,刚好得到两个方程,求解得到:

代入 ,并换成数值形式,那么就是:


3.2 全局拟合

式(8)已经跟式(4)很接近了,但是第二个系数还是差了点。这是因为(8)纯粹是局部近似的结果,顾名思义,局部近似在局部会很精确,比如上面的推导是基于 x=0 处的泰勒展开,因此在 x=0 附近会比较精确,但是离 0 远一点时误差就会更大。因此,我们还需要考虑全局误差。

比较容易想到的全局误差是积分形式的,比如用 去逼近 f(x) 时,我们去算:

但是,每个 x 处的误差重要性可能不一样,因此为了不失一般性,还要乘以一个权重 ,即:

不同的 会导致不同的解,哪个 最适合,也不容易选择。
因此,我们不去优化这种积分形式的误差,我们优化一个更直观的 形式的误差:

这个式子很好理解,就是“找一个适当的 ,使得最大的 都尽可能小”,这样的目标符合我们的直观理解,并且不涉及到权重的选取。
3.3 “局部-全局”混合
基于这个思想,我们固定 ,然后去重新求解 。固定这个 a 是因为它是一阶局部近似,我们希望保留一定的局部近似,同时希望 b 能尽可能帮我们减少全局误差,从而实现局部近似与全局近似的混合。所以,现在我们要求解:

用 scipy 可以轻松完成求解:

import numpy as np
from scipy.special import erf
from scipy.optimize import minimize


def f(x, b):
    a = np.sqrt(2 / np.pi)
    return np.abs(erf(x / np.sqrt(2)) - np.tanh(a * x + b * x**3))


def g(b):
    return np.max([f(x, b) for x in np.arange(040.001)])


options = {'xtol'1e-10'ftol'1e-10'maxiter'100000}
result = minimize(g, 0, method='Powell', options=options)
print(result.x)

最后得到 b=0.035677337314877385,对应的形式就是:

最后几位有效数字可能有误差,但前面部分已经跟式(4)完美契合了。补充说明下,式(4)提出自论文 Approximations to the Cumulative Normal Function and its Inverse for Use on a Pocket Calculator [2] ,已经是 40 多年前的结果了。

至于第一个近似,则来自论文 A logistic approximation to the cumulative normal distribution [3] ,它是直接用 全局逼近 的结果,即:

解得 ,即:

这跟式(3)同样很吻合。


文章小结
本文带大家一起做了道数学分析题——介绍了 GELU 激活函数,并试图探索了它的两个近似形式的来源。

参考链接

[1] https://arxiv.org/abs/1606.08415
[2] https://www.jstor.org/stable/2346872
[3] https://core.ac.uk/download/pdf/41787448.pdf



点击以下标题查看更多往期内容: 




#投 稿 通 道#

 让你的论文被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。


📝 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志


📬 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通



🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



关于PaperWeekly


PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存