​SquarePlus:可能是运算最简单的ReLU光滑近似

ReLU的平滑替代SquarePlus仅使用加、乘、除和开方运算,提供了一种更快的CPU实现。它在全球范围内单调递增,且在特定条件下能优于SoftPlus。文章提供两个练习题探讨其性质和逼近ReLU的效果。
摘要由CSDN通过智能技术生成

ReLU 函数,也就是max(x,0) ,是最常见的激活函数之一,然而它在 处的不可导通常也被视为一个“槽点”。为此,有诸多的光滑近似被提出,比如 SoftPlus、GeLU、Swish 等,不过这些光滑近似无一例外地至少都使用了指数运算 (SoftPlus 还用到了对数),从“精打细算”的角度来看,计算量还是不小的(虽然当前在 GPU 加速之下,我们很少去感知这点计算量了)。最近有一篇论文《Squareplus: A Softplus-Like Algebraic Rectifier》[1] 提了一个更简单的近似,称为. SquarePlus,我们也来讨论讨论。

需要事先指出的是,笔者是不建议大家花太多时间在激活函数的选择和设计上的,所以虽然分享了这篇论文,但主要是提供一个参考结果,并充当一道练习题来给大家“练练手”。

定义

SquarePlus 的形式很简单,只用到了加、乘、除和开方:

其中 。当  时,正好退化为 。SquarePlus 的灵感来源大致是

因此为了补充在  的可导性,在根号里边多加一个大于 0 的常数 (防止导数出现除零问题)。

原论文指出,由于只用到了加、乘、除和开方,所以 SquarePlus 的速度(主要是在 CPU 上)会比 SoftPlus 等函数要快:

▲ SquarePlus与其他类似函数的速度比较

当然,如果你不关心这点速度提升,那么就像本文开头说的,当作数学练习题来看看就好。

性态

跟 SoftPlus 函数()一样,SquarePlus 也是全局单调递增的,并且恒大于 ReLU,如下图(下图的 SquarePlus 的 ):

▲ ReLU、SoftPlus、SquarePlus函数图像(一)

直接求它的导函数也可以看出单调性:

至于二阶导数

也是恒大于 0 的存在,所以 SquarePlus 还是一个凸函数。

逼近

现在有两道练习题可以做了:

1、当  取什么时 SquarePlus 恒大于 SoftPlus?

2、当  取什么时,SquarePlus 与 SoftPlus 误差最小?

第一个问题,直接从  解得:

要使得上式恒成立, 必须大于等于右端的最大值,而我们可以证明右端最大值在  处取到,所以 。至此,第一个问题解决。

证明:留意到

所以  是一个凹函数,那么由詹森不等式得

也就是 ,或者 ,两边乘以 4 即得待证结论。等号成立的条件为 ,即 。

至于第二个问题,我们需要有一个“误差”的标准。这里跟之前的文章《GELU的两个初等函数近似是怎么来的》一样,转化为无额外参数的  问题:

这个问题笔者没法求得解析解,目前只能通过数值求解:

 1import numpy as np
 2from scipy.special import erf
 3from scipy.optimize import minimize
 4
 5def f(x, a):
 6    return np.abs((x + np.sqrt(x**2 + a**2)) / 2 - np.log(np.exp(x) + 1))
 7
 8def g(a):
 9    return np.max([f(x, a) for x in np.arange(-2, 4, 0.0001)])
10
11options = {'xtol': 1e-10, 'ftol': 1e-10, 'maxiter': 100000}
12result = minimize(g, 0, method='Powell', options=options)
13b = result.x**2
14print(b)

最终算出的结果是 ,误差最大值为 ,比较如下:

▲ ReLU、SoftPlus、SquarePlus函数图像(二)

小结

似乎也没啥好总结的,就是介绍了一个 ReLU 的光滑近似,并配上了两道简单的函数练习题~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值