激活函数Swish(ICLR 2018)

news2024/12/24 11:27:01

paper:Searching for Activation Functions

背景

深度网络中激活函数的选择对训练和任务表现有显著的影响。目前,最成功和最广泛使用的激活函数是校正线性单元(ReLU)。虽然各种手工设计的ReLU替代方案被提出,但由于在不同的模型以及数据集上提升不一致的问题,没有一个目前可以完全替代它,从业者们还是更倾向于简单、可靠的ReLU。

本文的创新点

本文提出用自动搜索技术来寻找新的激活函数。结合穷举和基于强化学习的搜索,作者发现了许多新的激活函数。作者还通过对找到的最优激活函数的经验评估来验证搜索的有效性。实验表明,找到的最优激活函数 \(f(x)=x\cdot siogmoid(\beta x)\),作者称之为 \(Swish\),在许多具有挑战性的数据集上,效果都优于ReLU。

方法介绍

为了利用搜索技术,必须设计一个包含合适的候选激活函数的搜索空间。设计搜索空间的一个重要挑战是平衡搜索空间的大小和表达性。一个过度约束的搜索空间不会包含新的激活函数,而一个太大的搜索空间很难进行有效的搜索。为了平衡这两个标准,我们设计了一个简单的搜索空间,该空间包含了一元函数和二元函数来构建激活函数。

如图1所示,激活函数是通过重复组合"core unit"来构成的,core unit定义为 \(b(u_1(x_1),u_2(x_2))\), 它接受两个标量输入,每个输入独立的通过一个一元函数,然后通过一个二元函数来组合两个一元函数的输出得到最终的一个标量输出。因为我们的目标是找到一个标量激活函数,将单个标量输入转换为单个标量输出,因此一元函数的输入限制为层preactivation \(x\) 和二元函数的输出。

给定搜索空间,搜索算法的目标是为一元函数和二元函数找到有效的选择。搜索算法的选择取决于搜索空间的大小。如果搜索空间很小,例如在使用单个核心单元时,就可以详尽地穷举整个搜索空间。如果核心单元重复多次,搜索空间将非常大(即\(10^{12}\)数量级种可能),使得穷举搜索不可行。

对于较大的搜索空间,我们使用一个RNN controller,如图2所示。在每个timestep,控制器预测激活函数的单个组成部分。预测在下一个timestep反馈给控制器,并重复这个过程,直到激活函数的每个组成部分都被预测出来。然后使用预测的字符串来构造激活函数。

一旦搜索算法生成候选激活函数,就在一些任务上训练使用候选激活函数的“子网络”,如CIFAR-10上的图像分类。训练结束后,记录并使用子网络的验证精度来更新搜索算法。使用穷举搜索时,维护一个列表,其中保存了按验证精度排序的激活函数。使用RNN控制器时,控制器通过强化学习进行训练,以最大限度地提高验证精度,其中验证精度作为reward。这种训练推动控制器生成具有较高验证精度的激活函数。

搜索发现

所有的搜索选择ResNet-20作为child network结构,并在CIFAR-10上训练10K steps。这种受限的环境可能会扭曲结果,使得性能最好的激活函数可能只在小型网络上表现良好。但我们在实验部分展示了许多被发现的函数可以很好地泛化到更大的模型。穷举搜索用于较小的搜索空间,RNN控制器用于较大的搜索空间。RNN控制器使用策略近端优化Policy Proximal Optimization进行训练,使用rewards的指数移动平均作为baseline来减少方差。使用到的一元和二元函数的完整列表如下:

其中 \(\beta\) 是一个per-channel的可训练参数,\(\sigma(x)=(1+exp(-x))^{-1}\) 是sigmoid函数。通过改变使用的核心单元的数量和不同的一元、二元函数来构建不同的搜索空间。

图3绘制了在搜索中发现的性能最好的激活函数。我们发现了几个值得注意的趋势:

  • 复杂的激活函数始终比简单的激活函数表现的差,可能是因为优化难度的增加。性能最好的激活函数可以用1个或2个核心单元表示。
  •  表现最好的几个激活函数都有一个共同的结构,就是原始的preactivation \(x\) 作为最终二元函数的输入:\(b(x,g(x))\)。ReLU也遵循这种结构,其中 \(b(x_1,x_2)=max(x_1,x_2),g(x)=0\)
  • 搜索找到了用周期periodic函数的激活函数,例如sin和cos。周期函数最常见的用法是对原始preactivation \(x\) 的加或减(或线性缩放)。周期函数在激活函数中的应用只在之前的工作中进行了简要的探索,因此这些发现的函数为进一步研究提供了有效的途径。

  • 使用除法的函数往往表现不佳,因为当分母接近0时输出会爆炸。只有当分母中的函数与0有界时例如cosh(x),或者当分子也接近0时,除法才会成功,得到输出1。

由于激活函数是使用一个相对较小的子网络发现的,当应用于较大的模型时,它们的性能可能无法泛化。为了测试性能最好的激活函数对不同架构的鲁棒性,我们使用preactivation ResNet-164(RN)、Wide ResNet 28-10(WRN)和DenseNet 100-12(DN)模型进行了额外的实验。我们在Tensorflow中实现3个模型并用搜索发现的表现最好的几个激活函数替换ReLU,我们使用原始的超参例如使用SGD with momentum进行优化,并遵循之前的工作给出5次不同运行的median。

结果如表1,2所示。尽管模型结构不同,8个激活函数中有6个泛化性能很好。这6个激活函数中,所有都在ResNet-164上取得了匹配或超越ReLU的表现。此外,发现的激活函数中有两个 \(x\cdot \sigma(\beta x)\) 和 \(max(x,\sigma(x))\) 在三个模型上一致的匹配或超越ReLU的性能。

虽然结果看起来很好,但目前尚不清楚所找到的激活函数是否能在具有挑战性的真实世界数据集上成功地取代ReLU。为了验证搜索的有效性,接下来我们重点关注评估激活函数 \(f(x)=x\cdot \sigma(\beta x)\),我们称之为 \(Swish\)。我们选择重点评估Swish而不是 \(max(x,\sigma(x))\) 因为实验中表明Swish的泛化性更好。接下来我们将分析Swish的特性,然后对Swish、ReLU和其他候选baseline激活函数在不同的任务和不同的模型上进行全面的经验评估。

Swish

回顾一下,Swish定义为 \(x\cdot \sigma(\beta x)\),其中 \(\sigma(z)=(1+exp(-z))^{-1}\) 是sigmoid函数,\(\beta\) 是一个常量或可训练的参数。图4绘制了不同 \(\beta\) 值的Swish函数。当 \(\beta =1\) 时,Swish等价于针对强化学习提出的Sigmoid-weighted Linear Unit(SiL)。当 \(\beta=0\) 时,Swish变成了线性缩放函数 \(f(x)=\frac{x}{2}\)。当 \(\beta\to \infty \) 时,sigmoid部分接近于一个0-1函数,Swish变得像ReLU。这表明Swish可以宽松地看作一个smooth function,它在线性函数和ReLU函数之间进行非线性插值。如果 \(\beta\) 是可训练的模型就可以控制插值的程度。

和ReLU一样,Swish上下都是无界的。和ReLU不一样的是,Swish是光滑非单调的。事实上,Swish的非单调性有别于大多数常见的激活函数。Swish的导数为

 

不同 \(\beta\) 值的Swish的一阶导数如图5所示。\(\beta\) 的大小控制了一阶导数渐近线到0和1的速度。当 \(\beta=1\) 时,对于小于1.25左右的输入,导数的幅度小于1。因此,\(\beta=1\) 的Swish的成功意味着ReLU的梯度保持特性(即在x>0时导数为1)在现代架构中可能不再是一个明显的优势。

Swish和ReLU最显著的区别在于当x<0时Swish的非单调"bump"。如图6所示,很大比例的preactivation落在bump \((-5 \le x \le 0)\) 区域内,这表明非单调凸起是Swish的一个重要特性。凸起的形状可以通过 \(\beta\) 值控制。尽管固定 \(\beta=1\) 是有效的 ,实验表明训练 \(\beta\) 值可以进一步提高一些模型的性能。图7绘制了Mobile NASNet-A模型中训练的 \(\beta\) 值的分布,训练后的 \(\beta\) 值分布在0到1.5之间并在 \(\beta\approx 1\) 达到峰值,表明模型利用到了可训练的 \(\beta\) 额外的灵活性。

需要注意的是,如果使用了BN,则应该设置比例参数。由于ReLU是分段线性的,一些高级库默认关闭了比例参数,但对于Swish确是错误的。对于训练Swish网络,我们发现略微降低用于训练ReLU的学习率有帮助。

实验结果

作者在不同的数据集和模型上与其它最常见激活函数进行了对比,如下 

CIFAR-10和CIFAR-100的结果如下

 

可以看出Swish在不同模型下与其它激活函数相比,都取得可匹配或更好的结果。

Inception-v3和v4在ImageNet数据上的结果如下,可以看出Softplus的效果比Swish稍好。

 

但当模型为轻量模型如Mobile NasNet-A或MobileNet时,Softplus的效果不如Swish

 

 

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

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

相关文章

机器学习入门-小白必看

机器学习 1. 机器学习的基本概念与背景2. 机器学习的常用方法3.是否需要学习机器学习&#xff0c;机器学习已经过时了&#xff1f;&#xff1f;4. 如何在机器学习上进行创新&#xff1f;5. 我该用哪种机器学习方法&#xff0c;如何定下来呢&#xff1f;总结&#xff08;对小白的…

gazebo平衡车模拟

gazebo和Ros中的平衡车模拟&#xff08;Noetic&#xff09; 控制原理 使用说明 在URDF模型中使用gazebo的 imu 插件获取平衡车姿态从 /joint_state 话题消息获取两轮的速度&#xff0c;相当于电机编码器速度环和直立环使用 串级PID 控制&#xff0c;框图如下&#xff1a;转向环…

02.变量

02.变量 01.变量 变量的概念&#xff1a; 1.变量的作用&#xff1a; 计算机中的存储空间&#xff0c;用于保存数据 2.定义变量的格式 变量名 值 注意&#xff1a; 是赋值运算符&#xff0c;左右两边打上空格是为了代码的规范性&#xff0c;美观性。 num1 3 #num1就是…

零基础学VR全景制作,新手制作流程有哪些?

VR全景技术可以应用于旅游、房地产、教育、娱乐等多个领域&#xff0c;可以为观众提供更加真实、更具沉浸感的体验。可以说&#xff0c;VR全景技术已经逐渐深入到各个领域中&#xff0c;那么对于新手来说&#xff0c;该如何制作VR全景呢&#xff1f; VR全景制作也是需要一定的技…

基于springboot的抗疫物资管理系统论文

目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6 2.3 MySQL数据库 6 2.4 Tomcat介绍 7 2.5 Spring Boot框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

金三银四,程序员如何备战面试季

金三银四&#xff0c;程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️…

HarmonyOS—开启AOT编译模式

AOT&#xff08;Ahead Of Time&#xff09;即提前编译&#xff0c;能够在Host端&#xff08;即运行DevEco Studio的电脑&#xff09;将字节码提前编译成Target端&#xff08;即运行应用的设备&#xff09;可运行的机器码&#xff0c;这样字节码可以获得充分编译优化&#xff0c…

【AI视野·今日Sound 声学论文速览 第五十期】Fri, 1 Mar 2024

AI视野今日CS.Sound 声学论文速览 Fri, 1 Mar 2024 Totally 9 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Probing the Information Encoded in Neural-based Acoustic Models of Automatic Speech Recognition Systems Authors Quentin Raymondau…

SpringCloud--Sentinel使用

一、快速开始 Sentinel 的使用可以分为两个部分&#xff1a; 核心库&#xff08;Java 客户端&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以上的版本的运行时环境&#xff0c;同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台&…

【Spring高级】第1讲:BeanFactory 与 ApplicationContext

目录 两者关系BeanFactory功能ApplicationContext功能 两者关系 BeanFactory和ApplicationContext都是Spring框架中非常重要的接口&#xff0c;它们都与Spring的IoC容器有关。 下面通过SpringApplication的引导类来说明上面两个接口。 看下面代码&#xff1a; SpringBootAp…

【场景题】如何设计一个购物车功能?

本文参考文章&#xff1a;https://www.hollischuang.com/archives/6998 https://www.woshipm.com/pd/4115447.html https://zq99299.github.io/note-book/back-end-storage/01/03.html 首先我们要明白&#xff1a;购物车系统在电商系统中的角色是作为用户选购商品和最终下单的桥…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

Unity2013.1.19_DOTS_Burst compiler

Unity2013.1.19_DOTS_Burst compiler DOTS是一种新产品&#xff0c;现在尚在起步阶段。由于它处于持续发展中&#xff0c;随着我们努力使其达到最佳状态&#xff0c;您将看到API会不断演变和日趋成熟。 DOTS包含以下元素&#xff1a; 实体组件系统(ECS) - 提供使用面向数据的…

有个朋友被骗了,大家要擦亮眼睛

1.引言 大家好&#xff0c;我是Leo哥&#x1fae3;&#x1fae3;&#x1fae3;&#xff0c;昨天凌晨有个粉丝朋友找到Leo哥&#xff0c;咨询一些问题&#xff0c;现在的朋友们真卷呐&#xff0c;大半夜还在挑灯夜战。可无奈Leo哥12点之前已经睡了&#xff0c;身体为重&#xf…

云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测

腾讯云轻量应用服务器2核4G5M配置一年优惠价165元、252元15个月、三年756元&#xff0c;100%CPU性能&#xff0c;5M带宽下载速度640KB/秒&#xff0c;60GB SSD系统盘&#xff0c;月流量500GB&#xff0c;折合每天16.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支…

安装ProxySQL,教程及安装链接(网盘自提)

一、网盘下载&#xff0c;本地直传 我网盘分享的是proxysql-2.5.5-1-centos8.x86_64.rpm&#xff0c;yum或者dnf直接安装就行 提取码&#xff1a;rhelhttps://pan.baidu.com/s/1nmx8-h8JEhrxQE3jsB7YQw 官方安装地址 官网下载地址https://repo.proxysql.com/ProxySQL/ 二、…

[项目设计] 从零实现的高并发内存池(三)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 4.CentralCache实现 4.1 CentralCache整体架构 4.2 围绕Span的相关设计…

从0到1入门C++编程——09 STL、string容器、vector容器、deque容器

文章目录 一、标准模板库STL二、容器算法迭代器应用1、遍历容器中整型数据2、遍历容器中自定义数据类型3、容器中嵌套容器 三、string容器1、构造函数2、赋值操作3、字符串拼接4、查找和替换5、字符串比较6、字符访问与存取7、插入和删除8、子串 四、vector容器1、构造函数2、赋…

灯丝灯双通道低过温高压线性恒流芯片SM2082ED的应用及特性解析

双通道低过温高压线性恒流芯片是一种电子芯片&#xff0c;它具有双通道设计&#xff0c;可以在高电压条件下工作&#xff0c;并具有低过温特性。这种芯片通常用于需要高电流和高电压的应用&#xff0c;如LED照明、激光器、电机驱动等。 双通道设计意味着该芯片可以同时处理两个…

高级软件开发知识点

流程 算法题简历上项目用到技术、流程、遇到问题HR 准备 常考的题型和回答思路刷100算法题&#xff0c;理解其思想&#xff0c;不要死记最近一家公司所负责的业务和项目&#xff1a; 项目背景、演进之路&#xff0c;有哪个阶段&#xff0c;每个阶段主要做什么项目中技术选型…