[论文笔记]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.mzph.cn/bicheng/4717.shtml

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

相关文章

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退&#xff0c;发现是在读取自定义文件上出问题 然后在找读取自定义文件函数&#xff0c;发现是读取图片部分出问题 然后就卡住了 调试半天&#xff0c;不是数据溢出&#xff0c;于是就看 函数_findnext,网上搜 ———_findn…

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方&#xff0c;分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器&#xff0c;一个注册服务器上可以有多个仓库&…

项目开发规范

Restful REST&#xff0c;表述性状态转换&#xff0c;他是一种软件架构风格 使用URL定位资源&#xff0c;HTTP动词描述操作 根据发出请求类型来区分操作 GET&#xff1a; 查询id为1的用户POST&#xff1a;新增用户PUT&#xff1a;修改用户DELETE&#xff1a;删除id为1的用户 …

springboot权限验证学习-上

创建maven项目 创建父工程 这类项目和原来项目的区别在于&#xff0c;打包方式是pom 由于pom项目一般都是用来做父项目的&#xff0c;所以该项目的src文件夹可以删除掉。 创建子工程 子工程pom.xml 父工程pom.xml 添加依赖 父工程导入依赖包 <!--导入springboot 父工程…

18.Nacos配置管理-微服务读取Nacos中的配置

需要解决的问题 1.实现配置更改热更新&#xff0c;而不是改动了配置文件还要去重启服务才能生效。 2.对多个微服务的配置文件统一集中管理。而不是需要对每个微服务逐一去修改配置文件&#xff0c;特别是公共通用的配置。 配置管理服务中的配置发生改变后&#xff0c;回去立…

病理组学+配对 mIHC 验证+转录组多组学

目录 病理DeepRisk网络模型构建 DPS和新辅助化疗 mIHC 验证 STAD转录组层面 病理DeepRisk网络模型构建 自有数据训练&#xff0c;TCGA数据进行验证&#xff0c;然后配对mIF验证&#xff0c;最后还在转录组层面分析。 该模型基于中山数据集&#xff08;n 1120&#xff09…

【AIGC调研系列】Sora级别的国产视频大模型-Vidu

Vidu能够达到Sora级别的标准。Vidu被多个来源认为是国内首个Sora级别的视频大模型[2][3][4]。它采用了团队原创的Diffusion与Transformer融合的架构U-ViT&#xff0c;能够生成长达16秒、分辨率高达1080P的高清视频内容[1][6]。此外&#xff0c;Vidu的一致性、运动幅度都达到了S…

【Spring】IOC/DI中常用的注解@Lazy、@Scope与@Conditional

目录 1、Lazy 懒加载bean 1.1、与component配合使用 1.2、与Bean注解配合使用 2、Scope bean的作用域 2.1、不指定Scope 2.2、指定Scope为 prototype 3、Conditional 条件注解 1、Lazy 懒加载bean Lazy用于指定单例bean实例化的时机&#xff0c;在没有指定此注解时&…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

安卓常用组件(启停活动页面、活动之间传递信息、收发应用广播、操作后台服务)

启停活动页面 Activity的启动和结束 页面跳转可以使用startActivity接口&#xff0c;具体格式为startActivity(new Intent(this, 目标页面.class));。 关闭一个页面可以直接调用finish();方法即可退出页面。 Activity的生命周期 页面在安卓有个新的名字叫活动&#xff0c;因…

微软ML Copilot框架释放机器学习能力

摘要&#xff1a;大模型席卷而来&#xff0c;通过大量算法模型训练推理&#xff0c;能根据人类输入指令产生图文&#xff0c;其背后是大量深度神经网络模型在做运算&#xff0c;这一过程称之为机器学习&#xff0c;本文从微软语言大模型出发&#xff0c;详解利用大型语言模型&a…

取得Claude模型的Key

目录 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 5.使用这个key 6.取得Credit 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 https://docs.anthropic.com/claude/docs/intro-to-claude --------…

前后端分离,使用sa-token作为安全框架快速搭建一个微服务项目

之前写过一个单体项目&#xff0c;现在想把它升级为微服务项目。在拆分升级的过程中发现了很多问题&#xff0c;本次就来记录一下遇到的问题和解决方法。&#xff08;这篇文章只是记录一下拆分项目的基础架构&#xff0c;并使用sa-token做微服务项目的安全框架&#xff0c;快速…

upload-labs后续(14-)

图片马 在图片中加入木马&#xff0c;然后上传让浏览器解析&#xff0c;达到上传木马的目的 制作图片马&#xff1a;可以在notepad或者winhex中打开文件&#xff0c;在文件头中加入图片的文件头&#xff0c;再在文件末尾加入木马即可。 图片文件头如下&#xff1a; 1.Png图片…

学生党学习亚马逊云科技AWS、求职上岸就申AWS Cloud Club队长!

毕业了怎么找工作&#xff1f;该怎么学AWS&#xff1f;这是同学们最关心的问题。最近AWS推出的Cloud Club校园社区计划就可以完美解决这些问题&#xff01; &#x1f3eb;AWS校园社区计划是在学校构建校园社团(全球学校)&#xff0c;带着大家学最热的开发、AI/ML技术&#xff0…

IDEA主题美化【保姆级】

前言 一款好的 IDEA 主题虽然不能提高我们的开发效率&#xff0c;但一个舒适简单的主题可以使开发人员更舒适的开发&#xff0c;时常换一换主题可以带来不一样的体验&#xff0c;程序员的快乐就这么简单。话不多说&#xff0c;先上我自己认为好看的主题设置。 最终效果图: 原…

《机器学习by周志华》学习笔记-线性模型-03

1、多分类学习 1.1、背景 我们在上一节介绍了「线性判别分析(LDA)」,LDA的从二分类任务可以推广到多分类任务中。 而现实中常遇到的多分类学习任务。有些二分类的学习方法可以直接推广到多分类,但是更多情况下是基于一些策略,利用二分类学习器来解决多分类的问题。 1.…

OpenVINO安装教程 Docker版

从 Docker 映像安装IntelDistribution OpenVINO™ 工具套件 本指南介绍了如何使用预构建的 Docker 镜像/手动创建镜像来安装 OpenVINO™ Runtime。 Docker Base 映像支持的主机操作系统&#xff1a; Linux操作系统 Windows (WSL2) macOS(仅限 CPU exectuion) 您可以使用预…

机器学习作业3____决策树(CART算法)

目录 一、简介 二、具体步骤 样例&#xff1a; 三、代码 四、结果 五、问题与解决 一、简介 CART&#xff08;Classification and Regression Trees&#xff09;是一种常用的决策树算法&#xff0c;可用于分类和回归任务。这个算法由Breiman等人于1984年提出&#xff0c;它…

如何让Ubuntu上的MySQL开发更便捷

前言 作为一款开源的数据库开发与数据库管理协同工具&#xff0c;&#xff08;OceanBase Developer Center&#xff0c;简称ODC&#xff09;&#xff0c;针对MySQL数据源&#xff0c;已提供了涵盖SQL开发、变更风险管控、数据安全合规等多个方面的功能&#xff0c;从而为MySQL…