激活函数总结(四):Hard系列激活函数补充(HardSigmoid、HardTanh、Hardswish)

激活函数总结(四):Hard系列激活函数补充

  • 1 引言
  • 2 激活函数
    • 2.1 HardSigmoid激活函数
    • 2.2 HardTanh激活函数
    • 2.3 Hardswish激活函数
  • 3. 总结

1 引言

在前面的文章中已经介绍了过去大家较为常见的激活函数 (SigmoidTanhReLULeaky ReLUPReLUSwishELUSELUGELUSoftmaxSoftplusMishMaxout)。在这篇文章中,会接着上文提到的众多激活函数继续进行介绍,给大家带来更多不常见的激活函数的介绍。这里放一张激活函数的机理图:
在这里插入图片描述

最后,对于文章中没有提及到的激活函数,大家可以通过评论指出,作者会在后续的文章中进行添加补充。

2 激活函数

2.1 HardSigmoid激活函数

HardSigmoid(硬Sigmoid)激活函数是一种近似于Sigmoid函数的非线性激活函数。HardSigmoid 激活函数通过对Sigmoid函数进行修剪和缩放,使其更加接近于一个分段线性函数。其数学表达式和数学图像分别如下所示:
H a r d S i g m o i d ( x ) = m a x ( 0 , m i n ( 1 , α ∗ x + β ) ) HardSigmoid(x) = max(0, min(1, α * x + β)) HardSigmoid(x)=max(0,min(1,αx+β)) 在这里插入图片描述
其中, α α α 是斜率参数, β β β 是偏移参数。通常情况下, α α α 取值为1/6, β β β 取值为1/3,这样 HardSigmoid 函数在x取值在[-3, 3]范围内比较接近于Sigmoid函数。对于超出这个范围的输入,其输出将被限制在0和1之间

优点:

  • 更加高效:相比于Sigmoid函数,HardSigmoid函数计算更加简单,因为它只涉及最大值、最小值和简单的线性变换。这使得HardSigmoid函数在一些资源有限的设备上更容易实现,并且可以减少计算负担
  • 计算稳定:sigmoid函数的输入在绝对值较大时,其输出会趋近于0或1,导致梯度消失;而hardsigmoid的输出在0和1之间波动,避免了这种情况
  • 增加稀疏性:由于hardsigmoid的输出是截断的,超过一定阈值的输入将被截断成1,从而增加了神经元对输入的敏感程度,有利于网络产生稀疏表示

缺点:

  • 非光滑性:HardSigmoid是一个分段线性函数,在某些点上存在不连续性。这意味着在这些点上梯度不连续,可能导致优化过程中出现问题。在反向传播时,梯度的不连续性可能会影响训练的稳定性,增加收敛时间,甚至导致模型无法收敛。
  • 信息丢失:由于HardSigmoid对输入进行硬剪裁,将超过一定范围的值限制在0和1之间,因此它会导致部分信息的丢失。这可能会对模型的表达能力产生一定的负面影响,尤其是对于那些需要更精确输出的任务。
  • 缺乏灵活性:HardSigmoid是一个固定形状的激活函数,其斜率和偏移参数在大多数情况下是固定的。这使得它相对缺乏灵活性,难以适应复杂的数据分布或任务。
  • 不适用于梯度爆炸问题:HardSigmoid虽然在某些情况下有助于缓解梯度消失问题,但对于梯度爆炸问题并没有提供明显的改进。在深度神经网络中,梯度爆炸问题可能导致训练不稳定或无法收敛。

当前还是ReLU的天下,连续的激活函数往往更令人喜欢!!!HardSigmoid几乎没见人用过。。。

2.2 HardTanh激活函数

HardTanh(硬切线激活函数)是一种非线性激活函数,它是Tanh函数的一种变体。与标准的Tanh函数相比,HardTanh函数进行了简单的截断和缩放,使其更接近于一个分段线性函数。其数学表达式和数学图像分别如下所示:
H a r d T a n h ( x ) = m a x ( − 1 , m i n ( 1 , x ) ) HardTanh(x) = max(-1, min(1, x)) HardTanh(x)=max(1,min(1,x))在这里插入图片描述

该函数将输入x限制在区间[-1, 1]之间。在输入小于-1时,输出值将被固定为-1,在输入大于1时,输出值将被固定为1。只有当输入在[-1, 1]之间时,HardTanh函数才对输入进行线性变换。

优点:

  • 简单性:HardTanh函数的计算非常简单,只涉及最大值、最小值和简单的线性变换,因此在硬件加速或资源受限的设备上实现起来相对容易。
  • 非线性性:尽管HardTanh函数在输入在[-1,1]之间是线性的,但它在输入小于-1和大于1时是非线性的,因此可以引入一些非线性特性,有助于提高模型的表达能力。
  • 有界输出:HardTanh函数的输出范围被限制在[-1, 1]之间,这有助于避免梯度爆炸和梯度消失问题,并提供更稳定的训练过程。

缺点:

  • 非光滑性:HardTanh是一个分段线性函数,在某些点上存在不连续性。这意味着在这些点上梯度不连续,可能导致优化过程中出现问题。类似于HardSigmoid,梯度的不连续性可能会影响训练的稳定性,并增加收敛时间。
  • 信息丢失:HardTanh对输入进行硬剪裁,将超过一定范围的值限制在固定的范围内(通常为-1和1之间)。这会导致一些信息的丢失,特别是对于那些需要更大范围输出的任务,HardTanh可能无法准确地表示输出。
  • 硬剪裁的影响:HardTanh的硬剪裁可能导致梯度的消失问题,尤其是在较深的神经网络中。当输入位于硬剪裁的边界附近时,梯度可能变得非常小,导致模型的学习速度减慢甚至停止学习。
  • 不适用于梯度爆炸问题:类似于HardSigmoid,HardTanh对于梯度爆炸问题并没有提供明显的改进。在深度神经网络中,梯度爆炸问题可能导致训练不稳定或无法收敛。
  • 参数缺少:HardTanh激活函数通常不具有可调整的参数,这使得它在某些情况下缺乏灵活性。无法调整参数可能会导致HardTanh难以适应复杂的数据分布或任务。

同样地,对于不连续的HardTanh激活函数,几乎没有人使用。。。

2.3 Hardswish激活函数

论文链接:https://arxiv.org/abs/1905.02244

HardSwish(硬切线激活函数)是一种近似于Swish激活函数的非线性激活函数。HardSwish激活函数在2017年提出,是对Swish函数进行修剪和缩放,使其更加接近于一个分段线性函数。其数学表达式和数学图像分别如下所示:
H a r d S w i s h ( x ) = { 0 i f x < = − 3 x i f x > = + 3 x   ∗ ( x + 3 ) / 6 o t h e r w i s e HardSwish(x)=\left\{ \begin{matrix} \quad \quad \quad 0 \quad \quad \quad if \quad x <= -3 \\ \quad \quad \quad x \quad \quad \quad if \quad x >= +3 \\ x \ * (x+3)/6 \quad \quad otherwise \end{matrix} \right. HardSwish(x)= 0ifx<=3xifx>=+3x (x+3)/6otherwise在这里插入图片描述
优点:

  • 可在嵌入式上使用:swish非线性激活函数提高了检测精度,但不适合在嵌入式移动设备上使用,因为“S”型函数在嵌入式移动设备上的计算成本更高,求导较为复杂,在量化时计算较慢。而hardswish非线性激活函数与swish函数相比:在准确性上没有明显差别,但从部署在嵌入式移动设备上而言具有多重优势
  • 数值稳定性好:在量化模式下,它消除了由于近似Sigmoid形的不同实现而导致的潜在数值精度损失
  • 计算速度快:在实践中,hardswish激活函数可以实现为分段功能,以减少内存访问次数,从而大大降低了等待时间成本。

缺点:
虽然相比于swish具有较快的计算速度,但是相比ReLU6仍存在计算量较大的问题。

设计之初是为了应用于移动端,在MobileNetV3、YOLOv5中都有应用。其本身具有与Swish差不多的性能,且更快。因此,是一个当前较为流行的激活函数。

3. 总结

到此,使用 激活函数总结(四) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的激活函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue中使用qrcode说明

1.安装 npm i qrcode1.5.3 2.导入 import QRCode from qrcode 3.转换 说明&#xff1a;拿到服务器传来的字符串&#xff0c;转换成base64&#xff0c;然后通过img标签展示。 // 字符串转成二维码 let result await this.$API.reqPayInfo(this.orderId); 总结&#xff1a;

资深媒体人宋繁银加入《数据猿》任总编辑,全面负责公司整体内容工作

大数据产业创新服务媒体 ——聚焦数据 改变商业 2023年7月北京&#xff0c;《数据猿》宣布正式任命宋繁银为总编辑&#xff0c;全面负责公司整体内容工作。此次重要的人事任命标志着《数据猿》的发展迈上了一个新的台阶&#xff0c;对于《数据猿》团队而言&#xff0c;不仅是一…

客户端渲染和服务端渲染的区别

一、客户端渲染 页面的渲染工作都是由浏览器来完成的&#xff0c;服务器只是负责提供数据。前端去后端取数据生成DOM树。 **最少两次请求 ** 第一次请求拿到的是页面第二次请求拿到的是动态数据 二、服务端渲染 页面渲染的工作都是由服务端来完成的&#xff0c;数据也是由服…

python版《羊了个羊》游戏开发第一天

Python小型项目实战教学课《羊了个羊》 一、项目开发大纲&#xff08;初级&#xff09; 版本1.0&#xff1a;基本开发 课次 内容 技术 第一天 基本游戏地图数据 面向过程 第二天 鼠标点击和移动 面向对象 第三天 消除 设计模式&#xff1a;单例模式 第四天 完整…

OpenCV 中的光流 (C++/Python)

什么是光流? 光流是一项视频中两个连续帧之间每像素运动估计的任务。基本上,光流任务意味着计算像素的位移矢量作为两个相邻图像之间的对象位移差。光流的主要思想是估计物体由其运动或相机运动引起的位移矢量。 理论基础 假设我们有一个灰度图像——具有像素强度的矩阵。我…

JavaSE【继承和多态】(1)(重点:初始化、pretected封装、组合)

一、继承 继承 (inheritance) 机制 &#xff1a;是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性 的基础上进行扩展&#xff0c;增加新功能 &#xff0c;这样产生新的类&#xff0c;称 派生类 。 继承呈现了面向对象程序设计的层次结…

在vue项目使用数据可视化 echarts ,柱状图、折线图、饼状图使用示例详解及属性详解

官网地址&#xff1a;Apache ECharts ​一、下载插件并在页面中引入 npm install echarts --save 页面导入&#xff1a; import * as echarts from echarts 全局导入&#xff1a; main.js 中&#xff0c;导入并注册到全局 import echarts from echarts Vue.prototype.$echart…

Flume原理剖析

一、介绍 Flume是一个高可用、高可靠&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据&#xff1b;同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到各种数据接受方&#xff08;可定制&…

日常开发中Git命令指北

Git基本操作 创建化仓库 mkdir 目录 cd 目录 git init配置本地仓库 # 配置用户名&#xff0c;邮箱 git config user.name "cxf" git config user.email "1969612859qq.com" # 查看本地配置&#xff08;小写的 L&#xff09; git config -l # 重置配置&a…

【SpringCloud】RabbitMQ基础

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

【locust】使用locust + boomer实现对接口的压测

目录 背景 环境安装 脚本编写 master slave节点&#xff08;golang/boomer&#xff09; 问题 资料获取方法 背景 很早之前&#xff0c;考虑单机执行能力&#xff0c;使用locust做过公司短信网关的压测工作&#xff0c;后来发现了一个golang版本的locust&#xff0c;性能…

将程序添加到右键菜单快速启动

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 效果如下 以 Windows Terminal 为例 打开注册表编辑器&#xff1a;按下 Win R 键&#xff0c;输入 regedit&#xff0c;然后按回车键打开注册表编辑器。 在注册表编辑器中导航到以下路径&#xff1a; HKE…

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证&#xff0c;在工业机器人动态行为实验室中&#xff0c;设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素&#xff1a;带有直流电机和编码器的机器人;稳…

新的里程碑!纪念正月十六工作室博客总访问量突破两百万

时值盛夏&#xff0c;清风徐徐&#xff0c;不觉间我们的博客访问量又迈入了新的里程碑——访问量突破两百万&#xff01; 总访问量突破百万&#xff1a; 个人成就&#xff1a; 记得上次突破重大里程碑还是去年夏天&#xff0c;那时我们重修岳阳楼&#xff0c;追往忆&#…

【2.1】Java微服务:详解Hystrix

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; Java微服务 ✨特色专栏&#xff1a; 知识分享 &am…

考研408 | 【计算机网络】 数据链路层

导图&#xff1a; 数据链路层概念&#xff1a; 结点&#xff1a;主机、路由器 链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0…

【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙

前提介绍 如果要设计开发一套微服务基础架构&#xff0c;参数化配置是一个非常重要的点&#xff0c;而Netflix也开源了一个叫变色龙Archaius的配置中心客户端&#xff0c;而且Archaius可以说是比其他客户端具备更多生产级特性&#xff0c;也更灵活。*在NetflixOSS微服务技术栈…

uni-app使用vue语法进行开发注意事项

目录 uni-app 项目目录结构 生命周期 路由 路由跳转 页面栈 条件编译 文本渲染 样式渲染 条件渲染 遍历渲染 事件处理 事件修饰符 uni-app 项目目录结构 组件/标签 使用&#xff08;类似&#xff09;小程序 语法/结构 使用vue 具体项目目录如下&#xff1a; 生命…

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host&#xff0c;不应该填真实的host地址&#xff0c;而应该填localhost或者127.0.0.1 具体操作步骤见下图

opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

矩特征&#xff08;Moments Features&#xff09;是用于图像分析和模式识别的一种特征表示方法&#xff0c;用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以…