Swish和H-Swish激活函数:提升模型训练效率

文章目录

    • Swish激活函数
    • H-Swish激活函数
    • 实现
    • 总结
    • 参考

在深度学习领域,激活函数是神经网络中的关键组成部分,它决定了网络的输出和性能。近年来,研究人员提出了许多新的激活函数,其中Swish激活函数因其独特的性能优势而备受关注。这种函数在2017年被重新发现,并被认为是Swish函数的一个变体。Swish函数不仅性能卓越,还能有效缓解梯度消失问题,因此在神经网络中得到了广泛应用。

Swish激活函数

Swish激活函数的数学定义如下:

Swish ( x ) = x σ ( β x ) \text{Swish}\left(x\right) = x\sigma\left(\beta x\right) Swish(x)=xσ(βx)

其中, σ \sigma σ 是Sigmoid函数, β \beta β 是一个可学习的参数

  • β = 1 \beta=1 β=1时,该函数简化为 Swish ( x ) = x σ ( x ) \text{Swish}(x) = x \sigma(x) Swish(x)=xσ(x), 这与2016年首次提出的Sigmoid线性单元(SiLU)等价。SiLU后来在2017年被重新发现,作为强化学习中的Sigmoid加权线性单元(SiL)函数。SiLU/SiL在被最初发现一年多后再次被重新发现为Swish函数,最初提出时没有可学习的参数 β \beta β,因此β隐式等于1。然后,Swish论文被更新,提出了带有可学习参数β的激活函数,尽管研究人员通常让 β = 1 \beta=1 β=1,并不使用可学习的参数β

  • 对于 β = 0 β=0 β=0,该函数变为缩放线性函数 f ( x ) = x / 2 f(x)=x/2 f(x)=x/2

  • β → ∞ β → ∞ β时,sigmoid组件趋向于点对点的0-1函数,因此swish函数点对点趋向于ReLU函数。因此,它可以被视为一个平滑函数,它非线性地在线性函数和ReLU函数之间插值。这个函数利用了非单调性,并且可能影响了具有这种特性的其他激活函数的提出,例如Mish。

当考虑正值时,Swish是Sigmoid收缩函数的特殊情况。

2017年,在对ImageNet数据集进行分析后,谷歌的研究人员发现,将Swish函数作为人工神经网络的激活函数,可以提高模型的性能,相较于ReLU和sigmoid函数。人们认为,性能提升的一个原因是Swish函数有助于在反向传播过程中缓解梯度消失问题。


Swish函数的性能优势主要体现在以下几个方面:

  1. 缓解梯度消失问题:Swish函数在正向传播过程中能够产生较大的梯度,有助于缓解梯度消失问题,从而提高模型的训练效率。
  2. 非单调性:Swish函数具有非单调性,这意味着它在某些区间内能够提升模型的表达能力,有助于提高模型的性能。
  3. 平滑性:Swish函数在输入值较大时接近线性函数,这使得它在神经网络中能够平滑地插值于线性函数和ReLU函数之间,从而提高模型的泛化能力。

Swish函数在反向传播中的作用:

在反向传播过程中,Swish函数的导数 ∂ Swish ( x ) ∂ x \frac{\partial \text{Swish}(x)}{\partial x} xSwish(x) Swish ( x ) ⋅ σ ′ ( β x ) \text{Swish}(x) \cdot \sigma'(\beta x) Swish(x)σ(βx),其中 σ ′ \sigma' σ 是Sigmoid函数的导数。这个导数在 β \beta β 的影响下,能够保持较大的值,从而有助于提高模型的训练效率。

H-Swish激活函数

Hard Swish是Swish的一个变体,它被开发出来以简化公式的计算。原始的Swish公式包括Sigmoid函数,这在计算上相对昂贵。Hard Swish用一个分段线性函数替换Sigmoid函数,这使得计算变得更加简单。

h-swish ( x ) = x ReLU6 ( x + 3 ) 6 \text{h-swish}\left(x\right) = x\frac{\text{ReLU6}\left(x+3\right)}{6} h-swish(x)=x6ReLU6(x+3)

在上述公式中,x是激活函数的输入值,而ReLU6是Rectified Linear Unit(ReLU)函数的一个变体。

H-Swish相对于原始Swish的优势主要包括:

  1. 计算效率:H-Swish使用分段线性函数替换了Sigmoid函数,这使得计算变得更加简单,降低了计算成本。
  2. 易于集成:H-Swish易于集成到现有的机器学习应用中,无需对算法架构进行重大更改,使得开发人员能够快速采用。
  3. 性能保持:尽管H-Swish简化了计算过程,但它仍然保持了与原始Swish类似的性能优势,如缓解梯度消失问题和非单调性。

通过这些优势,H-Swish成为了一个优化的激活函数选择,特别是在需要高效计算和快速模型训练的场景中。

实现

在下面的代码示例中,将使用Numpy库来实现Swish、H-Swish以及其他相关函数,并绘制它们的图形表示。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error# define cost functions
def mish(x):return x * np.tanh(np.log(1+np.exp(x)))def swish(x):return (x*np.exp(x))/(np.exp(x)+1)def relu(x):return np.maximum(x,0)def hard_swish(x, a_max=6, amin=0, add=3, divide=6):return x*np.clip(x+add, a_min=amin, a_max=a_max)/divide# Plot
x = np.linspace(-6, 6, num=1000)
y_mish = mish(x)
y_swish = swish(x)
y_hard_swish = hard_swish(x)
fig,ax = plt.subplots(1, 1, figsize=(12,10))
ax.plot(x, y_mish, label='mish', lw=3,color='#b5002e')
ax.plot(x, y_swish, label='swish', lw=3, color='#001b6e')
ax.plot(x, y_hard_swish, label='hard-swish', lw=3, color='#afb723')
ax.legend()

这段代码定义了Swish、H-Swish、ReLU6函数,并使用Matplotlib库绘制了它们的图形表示。通过观察这些图形,可以直观地看到这些激活函数的特性,如Swish和H-Swish的平滑性等。

总结

Swish和H-Swish激活函数在深度学习领域的重要性不容忽视。它们不仅提供了优异的性能,还在神经网络的训练过程中发挥着关键作用。

Swish激活函数因其能够有效缓解梯度消失问题而受到重视。这种函数的非单调性和平滑性使其在模型训练中能够更好地表达复杂的函数关系,从而提高模型的泛化能力。此外,Swish函数的简单性和高效性也使其在实际应用中得到了广泛的应用。

H-Swish激活函数则是在Swish的基础上进一步优化的结果。它通过使用分段线性函数替代Sigmoid函数,大大提高了计算效率,使得模型训练更加快速。同时,H-Swish保持了与Swish类似的性能优势,使得它成为了一种既高效又有效的激活函数选择。

总的来说,Swish和H-Swish激活函数在神经网络中的应用为深度学习的发展提供了新的思路和可能性。它们的出现不仅丰富了激活函数家族,也为模型训练的效率和性能提升提供了新的可能。随着研究的不断深入,可以期待这些激活函数在未来发挥更大的作用,推动深度学习技术的发展。

参考

  • Ramachandran, Prajit; Zoph, Barret; Le, Quoc V. “Searching for Activation Functions”
  • Hendrycks, Dan; Gimpel, Kevin. “Gaussian Error Linear Units (GELUs)”
  • Elfwing, Stefan; Uchibe, Eiji; Doya, Kenji . “Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning”
  • Misra, Diganta (2019). “Mish: A Self Regularized Non-Monotonic Neural Activation Function”.
  • Atto, Abdourrahmane M.; Pastor, Dominique; Mercier, Gregoire. “Smooth sigmoid wavelet shrinkage for non-parametric estimation”
  • Serengil, Sefik Ilkin. “Swish as Neural Networks Activation Function”
  • https://serp.ai/hard-swish/

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

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

相关文章

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

基于SpringBoot的合家云社区物业管理平台 - 项目介绍

合家云社区物业管理平台 2.合家云需求&设计 2.1 项目概述 2.1.1 项目介绍 合家云社区物业管理平台是一个全新的 ”智慧物业解决方案“&#xff0c;是一款互联网的专业社区物业管理系统。平台通过社区资产管理、小区管理、访客管理、在线报修、意见投诉等多种功能模块&a…

[iOS]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中&#xff0c;一个组件是指一个独立的、可替换的软件单元&#xff0c;它封装了一组相关的功能。组件通过定义的接口与外界交互&#xff0c;并且这些接口隔离了组件内部的实现细节。在Swift语言中&#xff0c;组件可以是一个模块、一…

基于arcpro3.0.2版的使用深度学习检测对象之椰子树

基于arcpro3.0.2版的使用深度学习检测对象之椰子树 GPU显卡Nivda 1080 训练模型图 (四)检测对象之椰子树 使用深度学习检测对象 打开 detect objects using deep learning,参数 输入栅格为要检测的影像 模型定位为上一步输出的.emd文件 cpu模式Max Overlap Ratio0.4 运行时间…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

服务器数据恢复—StorNext文件系统下raid5阵列数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;8个存放数据的存储柜1个存放元数据的存储柜。 元数据存储&#xff1a;8组RAID1阵列1组RAID10阵列4个全局热备硬盘。 数据存储&#xff1a;32组RAID5阵列&#xff0c;划分2个存储系统。 服务器故障&#xff1a; 数据…

c++初阶——类和对象(中)

大家好&#xff0c;我是小锋&#xff0c;我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类&#xff0c;但是空类真的什么都没有吗&#xff1f; 其实并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以…

武汉星起航:跨境电商的领航者,全方位孵化助力中国卖家出海

在数字化浪潮的推动下&#xff0c;跨境电商行业蓬勃发展&#xff0c;成为国内外商家争相涌入的新蓝海。武汉星起航电子商务有限公司&#xff0c;作为自营亚马逊跨境电商及卖家孵化服务的佼佼者&#xff0c;以其专业的团队、丰富的经验和卓越的服务品质&#xff0c;在行业中脱颖…

如何一个人,一边上班一边做抖音小店?23岁的他告诉你答案

大家好&#xff0c;我是电商笨笨熊 做抖音小店可以兼职去做吗&#xff1f; 可以。 一个不需要自备货源、自己进货发货也不需要自己直播带货的项目&#xff0c;抖音小店的各方面操作都相比其他传统电商来说更适合普通人做。 换句话说&#xff0c;只要掌握对方法&#xff0c;…

新书推荐机器学习大数据平台的构建、任务实现与数据治理

在大数据与机器学习日新月异的今天&#xff0c;构建稳定、安全、可扩展的数据平台已成为企业和研究机构的迫切需求。这本书应运而生&#xff0c;提供了详尽且实用的指南&#xff0c;帮助读者在云计算环境中构建、优化和治理大数据平台。 作者以清晰明了的写作风格&#xff0c;…

会计稳健性Cscore模型(2000-2022年)

01、数据介绍 会计稳健性是指在财务报告中&#xff0c;对损失和收益的确认存在不对称的延迟。具体来说&#xff0c;对于损失或坏消息&#xff0c;企业应尽早确认&#xff1b;而对于收益或好消息&#xff0c;企业应延迟确认。这种稳健的会计处理方式有助于提高财务报告的质量&a…

前端实现将二进制文件流,并下载为excel文件

目录 一、关于二进制流二、项目实践三、常见问题及解决 一、关于二进制流 含义&#xff1a;二进制流是一种计算机文件格式&#xff0c;它的数据以二进制形式存储&#xff0c;与文本文件不同。 二进制文件可以包含任意类型的数据&#xff0c;例如&#xff1a;图像、音频、视频…

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

【海思Hi3516CV610】是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC

海思Hi3516CV610是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC&#xff0c;除了开发普通摄像机&#xff0c;还可以打造极具竞争力的枪球一体机、双目长短焦摄像机产品&#xff1b; 处理器内核: 支持ARM Cortex-A7 MP2 时钟速率950MHz 支持…

Redis线程模型及性能优化概述

redis线程模型&#xff1a; 网络模块命令处理 redis的性能&#xff1a; 一个取决于物理内存&#xff0c;另一个是对于socket请求的处理速度。 4.0以前 单线程模式 请求流程&#xff1a;对于一个请求&#xff0c;线程会根据操作产生相应的事件&#xff08;读&#xff0c;写事…

【EI会议|稳定检索】2024年航空航天、空气动力学与自动化工程国际会议(ICAAAE 2024)

2024 International Conference on Aerospace, Aerodynamics, and Automation Engineering 一、大会信息 会议名称&#xff1a;2024年航空航天、空气动力学与自动化工程国际会议 会议简称&#xff1a;ICAAAE 2024 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Schol…

C语言 | Leetcode C语言题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; double myPow(double x, int n){if(n 0 || x 1){return 1;}if(n < 0){return 1/(x*myPow(x,-(n1)));}if(n % 2 0){return myPow(x*x,n/2);}else{return x*myPow(x*x,(n - 1)/2);} }

前端发送请求,显示超时取消

前端发送请求&#xff0c;显示超时取消 问题说明&#xff1a;后台接口请求60s尚未完成&#xff0c;前端控制台显示取消&#xff08;canceled&#xff09; 原因 1、前端设置60s超时则取消 2、后台接口响应时间过长&#xff0c;过长的原因统计的数据量多&#xff08;实际也才17…

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况&#xff1a;当你手持手机或相机准备拍摄视频时&#xff0c;心中已经构想了完美的画面&#xff0c;但却因为实际的限制无法捕捉到理想中的角度&#xff1f;这种情况可能会让人感到挫折。例如&#xff0c;如果想要从地面一只蚂蚁的视角拍摄&#xff…

UG NX二次开发(C++)-获取模型中所有的拉伸(Extrude)特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG 12中创建几个拉伸特征3、UFun中获取对象类型4、通过NXOpen过渡5.测试结果1、前言 在采用UG NX二次开发时,有时需要在模型中获取特定的对象,比如拉伸特征、关联特征等等。但是通过…