激活函数 | Squareplus性能比肩Softplus激活函数速度快6倍(附Pytorch实现)

机器学习ClickHouseService Mesh

picture.image

picture.image

本文提出了Squareplus 激活函数,这是一个类似softplus的激活函数,但只需要通过简单的代数运算来实现:加法、乘法和平方根。由于Squareplus在CPU上的计算速度比softplus快约6倍。

1

1 Squareplus

激活函数是深度学习体系结构的核心组成部分。特定的非线性应用于神经网络的每一层,影响训练的动态和测试时间的准确性,是一个关键的工具,当设计体系结构的输出必须在一定范围内。当限制一个层的输出为非负时,一个普遍的做法是应用ReLU激活:

picture.image

虽然ReLU保证了非负输出,但它有两个潜在的缺点:

  • 当x≤0时,它的梯度为零
  • 在x = 0时,它是不连续的

如果需要平滑或非零梯度,通常使用Softplus代替ReLU:

picture.image

Softplus是ReLU的上界,当|x|较大时接近ReLU,但与ReLU不同的是,它是连续的

虽然Softplus是一个有效的工具,但它也有一些潜在的缺点:

  1. 高效计算并不简单,因为它需要求两个transcendental 函数的值
  2. 当x很大时,Softplus的简单实现在数值上是不稳定的(当x远大于0时,返回x作为Softplus(x)的输出,可以直接改善这个问题)

在这里,提供了一个Softplus的替代方案,它没有上诉的缺点,这里称之为“Squareplus ”:

picture.image

Squareplus由超参数b>0定义,它决定了x=0附近弯曲区域的大小。

picture.image

图1显示了不同b值的Squareplus(以及它的一阶和二阶导数),以及Softplus。Squareplus与Softplus有很多相同的特性:

  • 它的输出是非负的
  • 它是ReLU的一个上界函数,会随着|x|的增长而接近ReLU
  • 它是连续的

然而,Squareplus只使用代数运算进行计算,这使得它非常适合计算资源或指令集有限的情况。此外,当x较大时,Squareplus无需特别考虑确保数值稳定性。Squareplus的一阶导数和二阶导数为:

picture.image

就像Squareplus本身一样,这些导数是也是代数形式的,计算起来很简单。类似地,Softplus的导数是经典的logistic s型函数,Squareplus的导数是“Sigmoid”函数(相应缩放和移动)。类似地,Softplus的二阶导数是Logistic分布的PDF,平方加号的二阶导数(b=2)是学生t分布 (ν = 2)。

超参数b的特定值产生某些性质。当b=0时,Squareplus简化为ReLU:

picture.image

通过设置,可以在原点附近近似Softplus的形状:

picture.image

这也是b的最小值,在这里Squareplus的输出总是保证大于Softplus的输出:

picture.image

设置b = 4使Squareplus的二阶导数近似于Softplus的原点附近,并给出的输出为1在原点(用户可能会觉得很直观):

picture.image

对于b的所有有效值,Squareplus的一阶导数在原点处为0.5,就像Softplus一样:

picture.image

b超参数可以被认为是一个尺度参数,类似于Charbonnier/pseudoHuber损失中的偏移如何被参数化为一个尺度参数。同样,缩放x(不缩放激活输出)或改变b也可以产生相同的激活:

picture.image

虽然Squareplus表面上类似于Softplus,但当|x|增长较大时,Squareplus接近ReLU的速度明显慢于Softplus。

picture.image

如图2所示绘制了Squareplus/Softplus和ReLU之间的区别。这张图也显示了在大输入上Softplus的数值不稳定性,这就是为什么大多数Softplus实现在x >0。类似于函数本身的缓慢渐近行为,当x<0时,Squareplus的梯度接近零比Softplus的梯度更慢。这个属性在实践中可能是有用的,因为“死亡”梯度通常是不受欢迎的,但这可能是依赖于任务的。

picture.image

如表1所示,在CPU上Squareplus要比Softplus快约6倍,与ReLU相当。在GPU上,Squareplus只比Softplus快10%,可能是因为所有整流器都受到内存带宽的限制,而不是在这种设置下的计算能力。这表明Squareplus可能只是在计算资源有限或无法使用Softplus的情况下(可能是因为硬件平台不支持exp和log)的理想替代方案。

Pytorch实现如下:


        
          
class Squareplus(nn.Module):  
    def \_\_init\_\_(self, b=0.2):  
        super(Squareplus, self).__init__()  
        self.b = b  
  
    def forward(self, x):  
        x = 0.5 * (x + torch.sqrt(x+self.b))  
        return x  

      

这里也提供了自适应参数版本,已经上传【集智书童知识星球

星球主要内容包括:经典论文分享、可落地方法复现、模型部署、Transformer部署与改进、电子资源分享等内容。

以下是星球的部分内容,持续更新中......

picture.image

picture.image

picture.image

picture.image

扫描下方二维码,我们一起学习吧!!!

picture.image

2

参考

[1].Squareplus: A Softplus-Like Algebraic Rectifier.

3

推荐阅读

[picture.image

YOLO-Z | 记录修改YOLOv5以适应小目标检测的实验过程](http://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247493051&idx=1&sn=4bdaa69264a4905df9c8ca771a00bced&chksm=feb80505c9cf8c1320e14a6c2fc8bfe2fe3fa192282f4976a245308d659e7ede0e199a9e105e&scene=21#wechat_redirect)

[picture.image

LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列](http://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247493028&idx=1&sn=2d4fa17565a4e2e876004240d1a68bb8&chksm=feb8051ac9cf8c0c2028522a5b9728e481db2de29746331d67ca03928bbd58234e5e93201a78&scene=21#wechat_redirect)

[picture.image

又改YOLO | 项目如何改进YOLOv5?这篇告诉你如何修改让检测更快、更稳!!!](http://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247492993&idx=1&sn=ec1b6c20759ceeb4ab48ef3e3590b9a6&chksm=feb8053fc9cf8c29836ff3dfe25b51a6d7948bcdda2041a434293d55824466515922630bd0b1&scene=21#wechat_redirect)

长按扫描下方二维码添加小助手并加入交流群, 群里博士大佬云集, 每日讨论话题有目标检测、语义分 割、 超分辨率、模型部署、数学基础知识、算法面试题分享的等等内容,当然也少不了搬砖人的扯犊子

长按扫描下方二维码添加小助手。

可以一起讨论遇到的问题

picture.image

声明:转载请说明出处

扫描下方二维码关注【 集智书童 】公众号,获取更多实践项目源码和论文解读,非常期待你我的相遇,让我们以梦为马,砥砺前行!

picture.image

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论