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

news2024/9/28 1:18:34

文章目录

    • 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.coloradmin.cn/o/1644017.html

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

相关文章

Matlab模拟森林火灾传播

在这个博客中,我们将会介绍一个简单的模拟森林火灾传播的程序,该程序基于一个基本的规则,根据树木状态的不同,以一定的概率生长、燃烧或是灭火,来模拟森林中火灾的传播过程。 目录 一、模拟效果 二、背景介绍 三、模…

Leetcode—1396. 设计地铁系统【中等】

2024每日刷题(127) Leetcode—1396. 设计地铁系统 实现代码 class UndergroundSystem { public:typedef struct Checkin {string startStation;int time;} Checkin;typedef struct Checkout{int tripNum;int totalTime;} Checkout;UndergroundSystem()…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹,但是其他颜色好像导出的时候不会转换。 于是,我们首先要转换背景,将黑色背景转成白色背景, 然后将…

buu相册

010分析是一个rar文件,7z打开发现是一个apk文件 但没发现什么敏感信息 全局搜索mail 然后就是查看引用与出处 base解密完是一个邮箱,提交对了。

dynamic_cast 静态转换

dynamic_cast 静态转换 const_cast 常量转换 重新解释转换(reinterpret_cast) 最不安全

用LangChain打造一个可以管理日程的智能助手

众所周知,GPT可以认为是一个离线的软件的,对于一些实时性有要求的功能是完全不行,比如实时信息检索,再比如我们今天要实现个一个日程管理的功能,这个功能你纯依赖于ChatGPT或者其他大语言模型(后文简称llm&…

C++ | Leetcode C++题解之第61题旋转链表

题目: 题解: class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if (k 0 || head nullptr || head->next nullptr) {return head;}int n 1;ListNode* iter head;while (iter->next ! nullptr) {iter iter->next;n…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型,但是实际中使用的还是四层模型比较多,我们主要是为了考试,那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层,本质上是…

JVM笔记4-虚拟机类加载机制

1、概述 Java虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。这个过程称为虚拟机的类加载机制。 2、类加载的时机 一个类型从被加载到内存中开始,到卸载出内存…

3. 深度学习笔记--优化函数

深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、Adagrad、Adadelta、RMSprop、Adam、Nadam、AdaMax、AdamW ) 0. GD (梯度下降) Gradient Descent(梯度下降)是一种迭代优化算法&#xf…

你必须要知道的P沟道MOSFET场效应管AO3401电流-4A电压-30V

概述 多年前,P沟道MOSFET是很少的,国内新兴的半导体厂家还都没开起来,这个时候出了一款SOT23封装的P沟道MOSFET,这就是AO3401,对于小电流输出的电源控制,就变的简单起来。目前国内已有多家厂商可以生产各种…

【字符串】Leetcode 最长回文子串

题目讲解 5. 最长回文子串 算法讲解 dp[i][j]表示i~j这一段区间的子串是否是回文 当s[i] s[j]的时候&#xff0c;此时是有三种情况的&#xff1a; ij说明一个字符肯定是回文 i1 j也说明一个字符是回文 i1 < j说明需要判断[i1, j-1]这一段区间是否是回文 此时我们就可以…

【每日刷题】Day32

【每日刷题】Day32 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1652. 拆炸弹 - 力扣&#xff08;LeetCode&#xff09; 2. 2058. 找出临界点之间的最小和最大距离 …

深圳网站推广怎么做

深圳是中国最具活力和创新精神的城市之一&#xff0c;拥有众多的互联网企业和创新型公司。如果你是一家深圳企业&#xff0c;想要在市场上获得成功&#xff0c;互联网是不可或缺的一部分。网站推广是你在线上推销你的企业或产品的一种方式&#xff0c;让更多的人知道你&#xf…

Linux: Netfilter 简介

文章目录 1. 前言2. Netfilter 简介2.1 Netfilter 的功能2.2 Netfilter 示例2.3 Netfilter 实现概览2.3.1 Netfilter hook 的 注册 和 注销2.3.2 Netfilter hook 的触发2.3.2.1 NF_INET_PRE_ROUTING2.3.2.2 NF_INET_LOCAL_IN2.3.2.3 NF_INET_FORWARD2.3.2.4 NF_INET_LOCAL_OUT2…

八、Linux进程检测与控制

章节目标 了解进程和程序的关系了解进程的特点能够使用top动态查看进程信息能够使用ps静态查看进程信息能够使用kill命令给进程发送信号能够调整进程的优先级&#xff08;扩展&#xff09; 引言 在运维的日常工作中&#xff0c;监视系统的运行状况是每天例行的工作&#xff…

python数据分析——业务数据描述

业务数据描述 前言一、数据收集数据信息来源 二、公司内部数据&#xff08;1&#xff09;客户资料数据&#xff08;2&#xff09;销售明细数据&#xff08;3&#xff09;营销活动数据 三、市场调查数据1 观察法2 提问法3 实验法 四、公共数据五、第三方数据六、数据预处理七、数…

Vue工程化开发和脚手架Vue CLI

目录 一、介绍 二、使用步骤 1. 全局安装&#xff08;一次&#xff09; 2.查看Vue版本 3.创建项目架子&#xff08;项目名不能使用中文&#xff09; 4.启动项目 一、介绍 Vue CLI是Vue官方提供的一个全局命令工具。可以帮助我们快速创建一个开发的Vue项目的标准化基础架子…

【HCIP】OSPF综合实验报告

一、分析要求 R4为ISP&#xff0c;直连设备间使用公网网段R3、R5、R6、R7为MGRE环境&#xff0c;R3为NHS合理划分172.16.0.0/16网段做NAT配置使私网能够访问R4环回ospf优化&#xff08;汇总和特殊区域&#xff09;&#xff0c;减少计时器时间加快收敛&#xff0c;设备之间做认…

解决:mybatisplus分页查询失效,总是查询到所有数据

目录 问题描述&#xff1a;解决方案&#xff1a;1.配置mybatisplus拦截器PaginationInterceptor2.自行编写SQL语句查询 问题描述&#xff1a; 在前端使用Map<String, Object> params&#xff0c;把page&#xff0c;limit参数作为请求体传送到后端&#xff0c;但是分页查…