[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

news2024/11/26 20:33:11

引言

今天带来另一篇激活函数论文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.coloradmin.cn/o/1632078.html

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

相关文章

MOS(My Oracle Support)怎么用?Oracle DBA必备技能!

MOS简介 老Oracle DBAer都知道MOS的前身是Metalink&#xff0c;2012年MOS替换掉原有的Metalink平台&#xff1b;MOS是Oracle提供的新一代在线支持平台&#xff0c;MOS平台整合了以前的Metalink功能&#xff0c;并提供了更强大的功能和用户体验。它允许客户提交和跟踪技术支持…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 搭建PyTorch环境的详细步骤如下&#xff1a; 1.安装Ubuntu系统&#xff1a; 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机&#xff0c;启动计算机并按照提示安装Ubuntu系统。 2.…

QT c++ 代码布局原则 简单例子

本文描述QT c widget代码布局遵循的原则&#xff1a;实中套虚&#xff0c;虚中套实。 本文最后列出了代码下载链接。 在QT6.2.4 msvc2019编译通过。 所谓实是实体组件&#xff1a;比如界面框、文本标签、组合框、文本框、按钮、表格、图片框等。 所谓虚是Layout组件&#x…

vue2编写主体页面

目录 一. 导入两张图片 二. 新建主体vue 三. 修改路由 1. 新增主体界面Main.vue的路由 2. 完整router/index.js代码如下&#xff1a; 在Vue 2中编写一个主体页面通常意味着创建一个包含导航栏、侧边栏、内容区域等的布局。以下是使用Vue 2和Element UI框架来构建一个简单的…

USB HID报告描述符学习

参考资料 HID 报告描述符 (qq.com)https://mp.weixin.qq.com/s?__bizMzU1ODI3MzQ1MA&mid2247485748&idx1&sn112bd8014eb96b03308b3b808549e8d4&chksmfc284ff1cb5fc6e770c2d2ece46c17bf2529901b45a357938978fa62163723556ad497b05c47&cur_album_id3340417…

react完整项目搭建的思路

react完整项目搭建的思路 react完整项目搭建的思路1.使用creacte-react-app初始化项目2.安装所需插件:路由、网络、样式、组件库3.reactjs目录结构组织4. 配置路径别名4.配置路由5.网络配置,对axios进行封装》获取当前环境变量 6.配置代理解决跨域7.配置使用iconfont8.状态管理…

产品推荐 | BittWare基于Altera Agilex“M FPGA的lA-860m加速卡

01 产品概述 BittWare的lA-860m是一款Altera Agilex“M系列FPGA卡&#xff0c;针对吞吐量和内存密集型应用进行了优化。M 系列 FPGA 具有广泛的内存层次结构&#xff0c;包括集成高带宽存储器 &#xff08;HBM2e&#xff09; 和硬内存片上网络 &#xff08;NoC&#xff09;&am…

GitHub Desktop进行汉化

第一步下载github桌面版 官网&#xff1a;安装 GitHub Desktop - GitHub 文档 历史版本&#xff1a;https://github.cn.uptodown.com/windows/versions 本期下载版本3.3.11进行汉化&#xff0c;最新版不一定稳定。 网站打不开的可自取&#xff1a; 3.3.11版本安装包链接&a…

电子阅览室技术特点与应用分析

电子阅览室是一个开放式的硬件和软件的集成平台&#xff0c;通过对技术和产品的集成&#xff0c;把当前大量的各种文献载体数字化&#xff0c;将它们组织起来在网上服务。从理论上讲&#xff0c;数字图书馆是一种引入管理和应用数字化技术的方法&#xff0c;它的主要特点有&…

原生IP和住宅IP有什么区别?

原生IP和住宅IP在多个方面存在显著的区别。 从定义和来源来看&#xff0c;原生IP是指未经NAT&#xff08;网络地址转换&#xff09;处理的真实、公网可路由的IP地址&#xff0c;它直接从互联网服务提供商&#xff08;ISP&#xff09;获得&#xff0c;而不是通过代理服务器或VP…

Java进阶-JavaStreamAPI的使用

本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。通过详细解释和示例&#xff0c;文章展示了 Java Stream API 在简化代码、提高效率以及支持函数式编程方面的优势。文中还比较了 Java Stream API 与其他集合处理库的异同&…

matlab学习007-已知离散时间系统的系统函数并使用matlab绘制该系统的零极点图;判断系统的稳定性;幅频和相频特性曲线

目录 题目 离散时间系统的系统函数&#xff1a;H(z)(3*z^3-5*z^210z)/(z^3-3*z^27*z-5) 1&#xff0c;绘制该系统的零极点图 1&#xff09;零极点图 2&#xff09;代码 2&#xff0c;判断系统的稳定性 1&#xff09;判断结果 2&#xff09;代码 3&#xff0c;试用MATL…

SpringMVC基础篇(四)

文章目录 1.视图1.基本介绍1.视图介绍2.为什么需要自定义视图 2.自定义视图实例1.思路分析2.代码实例1.view.jsp2.接口3.配置自定义视图解析器springDispatcherServlet-servlet.xml4.自定义视图MyView.java5.view_result.jsp6.结果展示 3.自定义视图执行流程4.自定义视图执行流…

最新官方破解版会声会影2024永久序列号和激活码

会声会影2024是一款功能强大的视频编辑软件&#xff0c;它集合了视频剪辑、音频调整、特效添加等多项功能于一身&#xff0c;为用户提供了一个全面且易用的视频制作平台。无论是初学者还是专业视频编辑人员&#xff0c;都能在这款软件中找到满足自己创作需求的工具。 会声会影最…

生成对抗网络的无载体信息隐藏算法简介

一、研究背景 随着互联网技术的广泛应用和移动智能设备的快速普及&#xff0c;人们有了更多的途径传播和获取信息。每天海量的数据以视频、音频、图像、文字等各类形式在互联网中产生&#xff0c;这为人们的生活带来了极大的便利&#xff0c;但同时也引起了人们对信息泄露的担…

《QT实用小工具·四十六》多边形窗口

1、概述 源码放在文章末尾 该项目实现了可以移动的多边形窗口&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "polygonwindow.h"#include <QBitmap> #include <QQuickItem> #include <QQmlFile> #in…

[NeurIPS-23] GOHA: Generalizable One-shot 3D Neural Head Avatar

[pdf | proj | code] 本文提出一种基于单图的可驱动虚拟人像重建框架。基于3DMM给粗重建、驱动结果&#xff0c;基于神经辐射场给细粒度平滑结果。 方法 给定源图片I_s和目标图片I_t&#xff0c;希望生成图片I_o具有源图片ID和目标图片表情位姿。本文提出三个分支&#xff1a;…

AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

Web前端开发之CSS_2

关系选择器CSS盒子模型弹性盒子模型文档流浮动清除浮动定位 1. 关系选择器 1.1 后代选择器 E F{} 选择所有被 E 元素包含的 F 元素&#xff0c;中间用空格隔开 <ul> <li>后代列表1</li> <div> <ol> <li>后代列表2</li> </ol>…

20240428如何利用IDM下载磁链视频

缘起&#xff1a; https://weibo.com/tv/show/1034:4864336909500449 中国获奖独立纪录片《阿辉》揭秘红灯区“教父”的生存法则 5,751次观看 1年前 发布于 陕西 身为里中横 67.7万粉丝 互联网科技博主 微博原创视频博主 头条文章作者 https://weibo.com/tv/show/1034:4864…