[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

引言

今天带来另一篇激活函数论文SEARCHING FOR ACTIVATION FUNCTIONS的笔记。

作者利用自动搜索技术来发现新的激活函数。通过结合详尽的搜索和基于强化学习的搜索,通过实验发现最佳的激活函数 f ( x ) = x ⋅ sigmoid ( β x ) f(x) = x \cdot \text{sigmoid}(βx) f(x)=xsigmoid(βx),作者称为Swish。

如果 β = 1 \beta=1 β=1,就等于上篇笔记中介绍的SiLU。

简介

每个深度网络的核心是一个线性变换,紧接着是一个激活函数 f ( ⋅ ) f(\cdot) f()。目前,最成功和广泛使用的激活函数是ReLU。

虽然有许多激活函数被提出来替代ReLU,但没有一种能够像ReLU一样得到广泛应用。

在篇工作中,作者使用自动搜索技术来发现新颖的激活函数。专注于寻找新的标量激活函数,即接受一个标量作为输入并输出一个标量,因为标量激活函数可以用来替换ReLU函数而不改变网络架构。通过结合详尽的搜索和基于强化学习的搜索,作者发现了一些表现出有希望性能的新颖激活函数。

作者对最佳发现的激活函数进行了实证评估,发现的最佳激活函数,我们称之为Swish,是 f ( x ) = x ⋅ sigmoid ( β x ) f(x) = x \cdot \text{sigmoid}(βx) f(x)=xsigmoid(βx),其中 β β β是一个常数或可训练的参数。

方法

为了利用搜索技术,必须设计一个包含有潜力的候选激活函数的搜索空间。在设计搜索空间时,平衡搜索空间的大小和表达能力是一个重要的挑战。过于受限的搜索空间不会包含新颖的激活函数,而过大的搜索空间则难以有效搜索。为了平衡这两个标准,祖宗设计了一个简单的搜索空间,该空间通过组合一元和二元函数来构造激活函数。

image-20240428113238650

如图1所示,激活函数是通过反复组合core unit(核心单元)构建的,core unit定义为 b ( u 1 ( x 1 ) , u 2 ( x 2 ) ) b(u_1(x_1), u_2(x_2)) b(u1(x1),u2(x2))。核心单元接受两个标量输入,将每个输入独立地通过一元(Unary)函数传递,并使用一个输出标量的二元(Binary)函数将两个一元输出组合起来。由于我们的目标是寻找将单个标量输入转换为单个标量输出的标量激活函数,一元函数的输入受限于层的预激活 x x x和二元函数的输出。

给定搜索空间,搜索算法的目标是找到一元函数和二元函数的有效选择。搜索算法的选择取决于搜索空间的大小。如果搜索空间很小,例如使用单个核心单元,可以穷举搜索整个搜索空间。如果核心单元重复多次,搜索空间将非常大(即大约 1 0 12 10^{12} 1012​个可能性),使得穷举搜索变得不可行。

image-20240428113643874

对于大型搜索空间,作者使用一个RNN控制器,如图2所示。在每个时间步,控制器预测激活函数的一个组件。预测结果在下一个时间步骤中反馈给控制器,并重复此过程,直到预测出激活函数的每个组件。然后使用预测的字符串构造激活函数。

一旦搜索算法生成了一个候选的激活函数,就会使用带有候选激活函数的子网络在某个任务上进行训练,例如在CIFAR-10上进行图像分类。训练完成后,记录并使用子网络的验证准确性来更新搜索算法。对于穷举搜索,维护一个根据验证准确性排序的表现最佳的激活函数列表。对于RNN控制器,使用强化学习训练控制器,以最大化验证准确性,其中验证准确性作为奖励。这种训练推动控制器生成具有高验证准确性的激活函数。

由于评估单个激活函数需要训练一个子网络,搜索是计算密集型的。为了减少进行搜索所需的时间,使用分布式训练方案来并行训练每个子网络。在这个方案中,搜索算法提出了一批候选激活函数,将它们添加到一个队列中。工作机器从队列中取出激活函数,训练一个子网络,并报告相应激活函数的最终验证准确性。验证准确性被聚合并用于更新搜索算法。

搜索发现

对于小的搜索空间,使用穷举搜索,而对于更大的搜索空间,使用RNN控制器。RNN控制器使用策略近端优化(Policy Proximal Optimization,PPO)进行训练,使用奖励的指数移动平均作为基准来降低方差。考虑的一元函数和二元函数的完整列表如下:

  • 一元函数: x , − x , ∣ x ∣ , x 2 , x 3 , x , β x , x + β , log ⁡ ( ∣ x ∣ + ϵ ) , exp ⁡ ( x ) sin ⁡ ( x ) , cos ⁡ ( x ) , sinh ⁡ ( x ) , cosh ⁡ ( x ) , tanh ⁡ ( x ) , sinh ⁡ − 1 ( x ) , tan ⁡ − 1 ( x ) , sinc ( x ) , max ⁡ ( x , 0 ) , min ⁡ ( x , 0 ) , σ ( x ) , log ⁡ ( 1 + exp ⁡ ( x ) ) , exp ⁡ ( − x 2 ) , erf ( x ) , β x,-x,|x|,x^2,x^3,\sqrt x,\beta x, x+\beta,\log(|x|+\epsilon),\exp(x) \sin(x),\cos(x),\sinh(x),\cosh(x),\tanh(x), \sinh^{−1} (x), \tan^{−1} (x), \text{sinc}(x), \max(x, 0), \min(x, 0), σ(x), \log(1 + \exp(x)), \exp(−x^2), \text{erf}(x), β x,x,x,x2,x3,x ,βx,x+β,log(x+ϵ),exp(x)sin(x),cos(x),sinh(x),cosh(x),tanh(x),sinh1(x),tan1(x),sinc(x),max(x,0),min(x,0),σ(x),log(1+exp(x)),exp(x2),erf(x),β

  • 二元函数: x 1 + x 2 , x 1 ⋅ x 2 , x 1 − x 2 , x 1 x 2 + ϵ , max ⁡ ( x 1 , x 2 ) , min ⁡ ( x 1 , x 2 ) , σ ( x 1 ) ⋅ x 2 , exp ⁡ ( − β ( x 1 − x 2 ) 2 ) , exp ⁡ ( − β ∣ x 1 − x 2 ∣ ) , β x 1 + ( 1 − β ) x 2 x_1 + x_2, x_1 \cdot x_2, x_1 − x_2, \frac{x_1} {x_2+ \epsilon}, \max(x_1, x_2), \min(x_1, x_2), σ(x_1)\cdot x_2, \exp(−β(x_1 − x_2)^2 ), \exp(−β|x_1 − x_2|), βx_1 + (1 − β)x_2 x1+x2,x1x2,x1x2,x2+ϵx1,max(x1,x2),min(x1,x2),σ(x1)x2,exp(β(x1x2)2),exp(βx1x2),βx1+(1β)x2

其中 β β β表示每个通道可训练的参数 , σ ( x ) = ( 1 + exp ⁡ ( − x ) ) − 1 ,σ(x) = (1 + \exp(−x))^{−1} σ(x)=(1+exp(x))1是sigmoid函数。通过改变用于构建激活函数的核心单元的数量以及改变一元函数和二元函数对搜索算法的可用性,可以创建不同的搜索空间。图3绘制了搜索发现的表现最佳的新颖激活函数。

image-20240428114442675

作者强调了搜索发现的几个值得注意的趋势:

  • 复杂的激活函数在性能上一直不如简单的激活函数,可能是由于在优化过程中增加了困难。表现最佳的激活函数可以由1个或2个核心单元表示。

  • 最佳激活函数共享的一个常见结构是将原始预激活 x x x作为最终二元函数的输入: b ( x , g ( x ) ) b(x, g(x)) b(x,g(x))。ReLU函数也遵循这种结构,其中 b ( x 1 , x 2 ) = max ⁡ ( x 1 , x 2 ) b(x_1, x_2) = \max(x_1, x_2) b(x1,x2)=max(x1,x2) g ( x ) = 0 g(x) = 0 g(x)=0

  • 搜索发现了利用周期函数(如sin和cos)的激活函数。周期函数的最常见用法是与原始预激活 x x x(或线性缩放的x)相加或相减。在以前的研究中,周期函数在激活函数中的应用只有简单探索,所以这些发现的函数为进一步研究提供了有价值的路径。

  • 使用除法的函数通常表现不佳,因为当分母接近0时,输出会变得非常大。除法只有在分母中的函数远离0时才成功,例如 cosh ⁡ ( x ) \cosh(x) cosh(x)​,或者当分子接近0时分母也接近0,产生输出为1。

image-20240428141253356

实验结果显示在表1和表2中。尽管模型架构发生了变化,其中六个激活函数成功地进行了泛化。在这六个激活函数中,所有的都与或优于ResNet-164上的ReLU。此外,两个发现的激活函数, x ⋅ σ ( β x ) x\cdotσ(βx) xσ(βx) m a x ( x , σ ( x ) ) max(x, σ(x)) max(x,σ(x))在所有三个模型上一直与或优于ReLU。

为了验证搜索的有效性,在本文的其余部分,作者将重点对激活函数 f ( x ) = x ⋅ σ ( β x ) f(x) = x · σ(βx) f(x)=xσ(βx)进行实证评估,称之为Swish。选择广泛评估Swish而不是 m a x ( x , σ ( x ) ) max(x, σ(x)) max(x,σ(x)),因为早期实验表明Swish具有更好的泛化性能。

SWISH

image-20240428141539572

Swish被定义为 x ⋅ σ ( β x ) x \cdot σ(βx) xσ(βx),其中 σ ( z ) = ( 1 + exp ⁡ ( − z ) ) − 1 σ(z) = (1 + \exp(−z))^{−1} σ(z)=(1+exp(z))1是sigmoid函数, β β β可以是一个常数或可训练参数。图4绘制了不同 β β β值下Swish的图形。如果 β = 1 β = 1 β=1,则Swish等同于Elfwing等人提出的用于强化学习的Sigmoid加权线性单元SiL。

如果 β = 0 β = 0 β=0,则Swish变为缩放的线性函数 f ( x ) = x 2 f(x) = x^2 f(x)=x2。当 β → ∞ β → ∞ β时,sigmoid部分逐渐趋近于0-1函数,因此Swish变得类似于ReLU函数。

这表明Swish可以被粗略地视为一个平滑的函数,它在线性函数和ReLU函数之间进行非线性插值。插值的程度可以通过将 β β β​设置为可训练参数来控制。与ReLU类似,Swish在上方是无界的,在下方是有界的。与ReLU不同,Swish是平滑且非单调的。事实上,Swish的非单调性使其与大多数常见的激活函数有所区别。Swish的导数是
f ′ ( x ) = σ ( β x ) + β x ⋅ σ ( β x ) ( 1 − σ ( β x ) ) = σ ( β x ) + β x ⋅ σ ( β x ) − β x ⋅ σ ( β x ) 2 = β x ⋅ σ ( x ) + σ ( β x ) ( 1 − β x ⋅ σ ( β x ) ) = β f ( x ) + σ ( β x ) ( 1 − β f ( x ) ) \begin{aligned} f^\prime(x) &= \sigma(\beta x) + \beta x \cdot \sigma (\beta x)(1-\sigma(\beta x)) \\ &= \sigma(\beta x) + \beta x \cdot \sigma (\beta x) - \beta x \cdot \sigma(\beta x)^2 \\ &= \beta x \cdot \sigma (x) + \sigma (\beta x) (1 -\beta x \cdot \sigma (\beta x)) \\ &= \beta f(x) + \sigma(\beta x)(1- \beta f(x)) \end{aligned} f(x)=σ(βx)+βxσ(βx)(1σ(βx))=σ(βx)+βxσ(βx)βxσ(βx)2=βxσ(x)+σ(βx)(1βxσ(βx))=βf(x)+σ(βx)(1βf(x))
image-20240428142057025

Swish的一阶导数在不同 β β β值下如图5所示。 β β β的值控制着一阶导数趋近于0和1的速度。当 β = 1 β = 1 β=1时,对于小于约1.25的输入,导数的大小小于1。因此,Swish在 β = 1 β = 1 β=1时的成功表明,在现代架构中,ReLU的梯度保持特性(即当 x > 0 x > 0 x>0​​时导数为1)可能不再是一个明显的优势。

image-20240428142221389

Swish与ReLU之间最显著的区别是当 x < 0 x < 0 x<0时Swish的非单调“凸起”。如图6所示,大部分的预激活值落在凸起的范围内(-5 ≤ x ≤ 0),这表明非单调凸起是Swish的一个重要特性。凸起的形状可以通过改变 β β β参数来控制。虽然在实践中固定 β = 1 β = 1 β=1是有效的,但实验部分显示训练 β β β​可以进一步提高某些模型的性能。

image-20240428142252670

图7显示了从Mobile NASNet-A模型训练得到的 β β β值的分布情况。训练得到的 β β β值在0和1.5之间分布,并且在 β ≈ 1 β ≈ 1 β1处有一个峰值,这表明模型利用了可训练 β β β参数的额外灵活性。在实际中,Swish可以在大多数深度学习库中通过一行代码的修改来实现,如TensorFlow中的x * tf.sigmoid(beta * x)tf.nn.swish(x)

需要注意的是,如果使用BatchNorm,应设置scale参数。由于ReLU函数是分段线性的,一些高级库默认关闭了scale参数,但对于Swish来说,此设置是不正确的。对于训练Swish网络,作者发现略微降低用于训练ReLU网络的学习率效果很好。

实验

结论

Swish是通过使用多种自动搜索技术找到的。

Swish在深度模型上始终优于ReLU。Swish的强大性能挑战了关于ReLU的传统观点。当残差连接(He等人,2016a)使得非常深的网络可以优化时,ReLU保持梯度的重要性假设似乎是不必要的。在完全注意力机制的Transformer中可以找到类似的见解。

总结

⭐ 作者利用自动搜索技术来发现新的激活函数。并且通过实验发现最佳的激活函数为 f ( x ) = x ⋅ sigmoid ( β x ) f(x) = x \cdot \text{sigmoid}(βx) f(x)=xsigmoid(βx),称为Swish。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315870.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盲人旅行新纪元:科技之眼助力无障碍探索之旅

作为一名资深记者&#xff0c;我有幸深入探究并分享一项创新技术如何改变盲人群体的旅行体验。这篇文章聚焦于一款名为蝙蝠避障的辅助应用&#xff0c;它以盲人旅行伙伴的角色&#xff0c;通过实时避障与拍照识别功能&#xff0c;赋予使用者独立、自信地畅游世界的可能。让我们…

acwing算法提高之数据结构--树状数组

目录 1 介绍2 训练3 参考 1 介绍 本专题用来记录树状数组相关题目。 lowbit(x)操作&#xff0c;求数 x二进制表示中最低位的1的值&#xff0c; int lowbit(int x) {return x & -x; }树状数组&#xff1a;用来快速计算动态前缀和的数据结构。 c[x]的表示原数组以第x个数…

Visual Studio Code使用

目录 1.python的调试 2.c的运行 方法1&#xff1a; 方法2&#xff1a; 3.c的调试 3.1调试方法一&#xff1a;先生成执行文件&#xff0c;再调试 3.2调试方法二&#xff1a;同时生成执行文件&#xff0c;调试 4.tasks.json 与launch.json文件的参考 4.1C生成执行文件tas…

ZDOCK linux 下载(无需安装)、配置、使用

ZDOCK 下载 使用 1. 下载1&#xff09;教育邮箱提交申请&#xff0c;会收到下载密码2&#xff09;选择相应的版本3&#xff09;解压 2. 使用方法Step 1&#xff1a;将pdb文件处理为ZDOCK可接受格式Step 2&#xff1a;DockingStep 3&#xff1a;创建所有预测结构 1. 下载 1&…

ubuntu22.04 CH340/CH34x 驱动安装

CH34x驱动地址&#xff1a;CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司 1、卸载旧驱动&#xff08;如果存在&#xff09; sudo rmmod ch341.ko 2、解压进入 driver 目录 unzip CH341SER_LINUX.ZIP cd CH341SER_LINUX/driver 3、编译 make 可能错误&#xff1a; make[1]…

WS-BAN模型(细粒度图像分类)

WS-BAN模型&#xff08;细粒度图像分类&#xff09; 摘要Abstract1. WS-BAN1.1 文献摘要1.2 背景1.3 创新点1.4 WS-BAN方法1.4.1 弱监督注意学习1.4.2 注意力丢弃 1.5 实验1.5.1 数据集1.5.2 实施细节1.5.3 对比试验结果 2. Transformer代码学习3. 细粒度图像分类代码复现 摘要…

ArcGIS Pro3.0软件破解版安装教程

软件名称&#xff1a;ArcGIS Pro 3.0 安装环境&#xff1a;Windows 软件大小&#xff1a;7.3GB 硬件要求&#xff1a;CPU2GHz&#xff0c;内存4G(或更高) 百度云下载链接 &#xff1a; https://pan.baidu.com/s/1CXy1MSwdQXdVnJoV2X422A 提 取 码 &#xff1a;r0w1 教学内…

mysql数据库navicat数据同步时误删除部分数据

背景介绍 听说过删库跑路被抓的&#xff0c;今天就碰到升级服务器&#xff08;Alibaba Cloud Linux ----> Ubuntu&#xff09;原因是taos3.2不支持Alibaba Cloud Linux系统&#xff01; 为了保险起见把现在这个数据库里的数据都备份一份&#xff0c;为了不耽误同事们继续开…

Zynq 7000 系列中的BootROM流程及BootROM Header简介

BootROM Code是在系统复位后执行的一段代码&#xff0c;用于配置PS&#xff08;处理器系统&#xff09;。本文将详细解释BootROM的启动过程及BootROM Header的格式。 1 BootROM流程 Zynq 7000在系统复位后进行配置。整个启动过程在图6-1中进行了说明&#xff0c;而BootROM的执…

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中&#xff0c;提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了&#xff0c;询问公司开发也不知道如何处理&#xff0c;我是如何重启kafka消息中间件使system系统服务正常运行&#xff1f; 查看kafka的安装位置 在下面的…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中&#xff0c;科技的发展为我们的生活带来了无数便利和可能性。其中&#xff0c;高扬程水泵作为一种高效能的水泵&#xff0c;其独特的设计使其在各个领域都有着广泛的应用&#xff0c;尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程&#xff1a;高扬程水泵…

制造型企业 如何实现便捷的机台文件统一管理?

机台文件统一管理&#xff0c;这是生产制造型企业都需要去做的&#xff0c;机台文件需要统一管理的原因主要包括以下几点&#xff1a; 1、提高效率&#xff1a;统一管理可以简化文件的访问和使用过程&#xff0c;提高工作效率&#xff0c;尤其是在需要频繁访问或更新机台文件的…

在 Vue 中预加载组件

在 Vue 中&#xff0c;利用 VueRouter 可以轻松的实现两个组件&#xff08;页面&#xff09;之间的切换&#xff0c;有个常用的设计就是需要在登录页登录后跳转至一个内容页&#xff0c;通常的做法是在登录校验完成之后立即切换路由至内容页&#xff0c;接着内容页发送网络请求…

SpringBoot (批量)生成二维码工具类多种方法示例

一、引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version> </dependency><dependency><groupId>com.google.zxing</groupId><artifactId…

Jmeter05:配置环境变量

1 Jmeter 环境 1.1 什么是环境变量&#xff1f;path什么用&#xff1f; 系统设置之一&#xff0c;通过设置PATH&#xff0c;可以让程序在DOS命令行直接启动 1.2 path怎么用 如果想让一个程序可以在DOS直接启动&#xff0c;需要将该程序目录配置进PATH 1.3 PATH和我们的关系…

【自然语言处理】InstructGPT、GPT-4 概述

InstructGPT官方论文地址&#xff1a;https://arxiv.org/pdf/2203.02155.pdf GPT-4 Technical Report&#xff1a;https://arxiv.org/pdf/2303.08774.pdf GPT-4&#xff1a;GPT-4 目录 1 InstructGPT 2 GPT-4 1 InstructGPT 在了解ChatGPT之前&#xff0c;我们先看看Instr…

Three.js--》探秘虚拟现实VR展厅的视觉盛宴

今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 源码下载地址&#xff1a;地址 在线体验地址&#xff1a;地址 目录 项目搭建 初始化three代码 camera…

分布式系统事务一致性解决方案(基于事务消息)

参考&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一&#xff1a;业务方自己实现方案二&#xff1a;RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …

单纯形投影算法

目录 一&#xff0c;任意点到平移坐标轴面的投影 1&#xff0c;求解目标 2&#xff0c;转换变量 3&#xff0c;求解结果 4&#xff0c;f(t)的导数 5&#xff0c;f(t)的最小值 二&#xff0c;任意点到标准单纯形的投影 1&#xff0c;求解目标 2&#xff0c;公式变形 3…

制作一个RISC-V的操作系统十四-任务同步和锁

文章目录 并发与同步临界区和锁锁死锁解决死锁自旋锁&#xff08;spin lock&#xff09;原子性问题原子操作实现amoswap.w.aq例子 另一种方法自旋锁的注意事项代码其他同步技术 并发与同步 控制流&#xff1a;可理解为任务或进程 中断也可以理解为一个切换到另一个任务&#…