【概念梳理】激活函数
一、引言
常用的激活函数如下:
1、Sigmoid函数
2、Tanh函数
3、ReLU函数
4、ELU函数
5、PReLU函数
6、Leaky ReLU函数
7、Maxout函数
8、Mish函数
二、激活函数的定义

多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(Activation Function)。
三、激活函数的作用
一句话总结:为了提高模型的表达能力。
激活函数能让中间输出多样化,从而能够处理更复杂的问题。如果不使用激活函数,那么每一层的输出都是上一层输入的线性函数,最后的输出也只是最开始输入数据的线性组合而已。而激活函数可以给神经元引入非线性因素,当加入到多层神经网络时,就可以让神经网络拟合任何线性函数或非线性函数,从而使得网络可以适合更多的非线性问题,而不仅仅是线性问题。
激活函数被定义为一个几乎处处可微的函数。
四、饱和的概念
当函数满足limx→+∞f′(x)=0\ lim_{x\to+\infty}f'(x)=0 limx→+∞f′(x)=0时,称为右饱和;
当函数满足limx→−∞f′(x)=0\ lim_{x\to-\infty}f'(x)=0 limx→−∞f′(x)=0时,称为左饱和;
当f(x)\ f(x) f(x)同时满足左饱和和右饱和时,称为饱和
在饱和定义的基础上,如果存在常数C1\ C1 C1,当x>C1\ x >C1 x>C1时,恒满足f′(x)=0\ f'(x)=0 f′(x)=0,称为右硬饱和;同样,如果存在常数C2\ C2 C2,当x<C2\ x <C2 x<C2时,恒满足f′(x)=0\ f'(x)=0 f′(x)=0,称为左硬饱和
相对的,只有当x\ x x趋于极值时,f′(x)=0\ f'(x)=0 f′(x)=0,则称为软饱和。
五、常用的激活函数
1、Sigmod函数
Sigmoid 是常用的非线性的激活函数,它的数学形式如下:
f(x)=11+e−x\ f(x) = \frac{1}{1+e^{-x}} f(x)=1+e−x1
Sigmoid的几何图像如下:

特点:
它能够把输入的连续实值映射为0和1之间的输出,特别的,如果是非常大的负数,输出就是0;如果是非常大的正数,输出就是1。
优点:
(1)单调递增,容易优化;
(2)求导容易。
缺点:
(1)Sigmod函数是软饱和,容易产生梯度消失;
(2)求导收敛速度慢;
(3)幂运算导致训练耗时。
Sigmod函数导数如下:
f′(x)=f(x)(1−f(x))\ f'(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x))
导数的集合图像

2、Tanh函数
tanh函数为双切正切函数,过(0,0)点,数学形式如下:
f′(x)=sinh(x)cosh(x)=1−e−2x1+e−2x=ex−e−xex+e−x=e2x−1e2x+1=2Sigmod(x)−1\ f'(x)=\frac{sinh(x)}{cosh(x)}=\frac{1-e^{-2x}}{1+e^{-2x}}=\frac{e^x-e^{-x}}{e^x+e^{-x}}=\frac{e^{2x}-1}{e^{2x}+1}=2Sigmod(x)-1 f′(x)=cosh(x)sinh(x)=1+e−2x1−e−2x=ex+e−xex−e−x=e2x+1e2x−1=2Sigmod(x)−1
tanh函数及其导数的几何图像如下图:

tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是零均值(zero-centered)输出的问题。然而,梯度消失(gradient vanishing)的问题和幂运算导致的耗时问题仍然存在。
优点:
(1)收敛速度相比Sigmod快
缺点:
(1)未能解决梯度消失的问题
3、ReLU函数
ReLU函数的数学形式如下:
f(x)=max(0,x)={0,x≤0x,x>0\ f(x)=max(0,x)=\begin{cases} 0,&x\leq0\\ x,&x>0 \end{cases} f(x)=max(0,x)={0,x,x≤0x>0
ReLU函数及其导数的几何图像如下图:

优点:
(1)收敛速度快与Sigmod函数和Tanh函数;
(2)有效缓解了梯度消失问题(在正区间);
(3)训练耗时优于Sigmod函数和Tanh函数;
(4)对神经网络可以使用稀疏表达;
缺点:
(1)在训练过程中容易出现神经元死亡(Dead ReLU Problem),之后梯度永远为0。
产生该问题的原因有两点:
(1)非常不幸的参数初始化,这种情况比较少见;
(2)学习率(learning rate)太大导致在训练过程中参数更新幅度太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将学习率设置太大或使用adagrad等自动调节学习率的优化算法。
4、ELU函数
ELU函数(Exponential Linear Units)的数学形式如下:
f(x)=max(α(ex−1),x)={x,x>0α(ex−1),x≤0\ f(x)=max(\alpha(e^x-1),x)=\begin{cases} x,& x>0 \\ \alpha(e^x-1),&x\le0\end{cases} f(x)=max(α(ex−1),x)={x,α(ex−1),x>0x≤0
其中,α\ \alpha α是可学习的参数。
ELU函数及其导数的几何图像如下图:

优点:
(1)ELU是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,并可以消除ReLU中神经元死亡问题,在输入为负数时,具有一定输出,而且这部分输出具有一定的抗干扰能力。
缺点:
(1)幂运算增加了训练耗时。
5、PReLU函数
PReLU函数的数学形式如下:
f(x)=max(αx,x)={x,x>0αx,x≤0\ f(x)=max(\alpha x,x)=\begin{cases} x,& x>0 \\ \alpha x,&x\le0\end{cases} f(x)=max(αx,x)={x,αx,x>0x≤0
其中,α\ \alpha α是可学习的参数。
优点:
(1)相比于ELU函数,PReLU函数在负数区域是线性的,斜率虽小,但不会趋于0,因为没有了幂运算,训练速度也会快一些。
6、Leaky ReLU函数
Leaky ReLU函数的数学形式如下:
f(x)=max(0.01x,x)={x,x>00.01x,x≤0\ f(x)=max(0.01 x,x)=\begin{cases} x,& x>0 \\ 0.01 x,&x\le0\end{cases} f(x)=max(0.01x,x)={x,0.01x,x>0x≤0
Leaky ReLU函数及其导数的几何图像如下图:

相比于PReLU函数,当α\ \alpha α为0.01时,PReLU函数就变成了Leaky ReLU函数了。
7、Maxout函数
待更新
8、Mish函数
Leaky ReLU函数的数学形式如下:
f(x)=x∗tanh(ln(1+ex))\ f(x)=x*tanh(ln^{(1+e^x)}) f(x)=x∗tanh(ln(1+ex))
Mish函数及其导数的几何图像如下图:

这与另一个被称为Swish函数的激活函数非常相似,Swish函数的数学形式如下:
f(x)=x∗Sigmoid(x)\ f(x)=x*Sigmoid(x) f(x)=x∗Sigmoid(x)
Mish函数及其导数的几何图像如下图:

Mish函数是YOLOv4中使用的激活函数,原因是它的低成本和它的平滑、非单调、上无界、有下界等特点。
Mish函数的性能详细说明如下:
(1)无上界有下界:无上界是任何激活函数都需要的特性,因为它避免了导致训练速度急剧下降的梯度饱和,可加快训练过程。有下界属性有助于实现强正则化效果,适当的拟合模型(Mish的这个性质类似于ReLU和Swish的性质,其范围是(≈0.31,+∞]\ (\approx0.31,+\infty] (≈0.31,+∞]);
(2)非单调函数:这种性质有助于保持小的负值,从而稳定网络梯度流。大多数常用的激活函数,如ReLU、 Leaky ReLU,由于其差分为0,不能保持负值,因此大多数神经元没有得到更新;
(3)无穷阶连续性和光滑性:Mish是光滑函数,具有较好的泛化能力和结果的有效优化能力,可以提高结果的质量。在图中,可以看到ReLU和Mish之间的一个随机初始化的神经网络在宏观平滑度上的剧烈变化。然而,在Swish和Mish的情况下,宏观上或多或少还是相似的;

(4)计算量较大,但是效果更好:与ReLU相比,它的计算量比较大,但在深度神经网络中显示了比ReLU更好的结果。
(5)自门控:此属性受到Swish函数的启发,其中标量输入被提供给gate。它优于像ReLU这样的点式激活函数,后者只接受单个标量输入,而不需要更改网络参数。
参考资料
1、常用激活函数(激励函数)理解与总结
2、YOLOv4 中的 Mish 激活函数
声明
本博客的目的仅为学习交流和记录,谢谢大家的浏览。
相关文章:
【概念梳理】激活函数
一、引言 常用的激活函数如下: 1、Sigmoid函数 2、Tanh函数 3、ReLU函数 4、ELU函数 5、PReLU函数 6、Leaky ReLU函数 7、Maxout函数 8、Mish函数 二、激活函数的定义 多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,…...
【python】@property 和 @staticmethod
property 和 staticmethod 是 Python 中的两个装饰器,它们分别用于在类中创建属性或静态方法。它们的作用如下: property property:用于将类的一个方法作为属性访问。在 Python 中,使用“getter” 和“setter”方法来实现属性&a…...
Spring题集 - Spring AOP相关面试题总结
文章目录01. Spring AOP 的理解?02. Spring AOP 思想的代码实现03. Spring AOP 的相关术语有哪些?04. Spring AOP 基于注解的切面实现?05. Spring AOP 的通知有哪些类型?06. AOP 有哪些实现方式?07. Spring AOP 和 AspectJ AOP 有…...
分考场
[蓝桥杯 2017 国 C] 分考场(假题:最小色数) 题目描述 nnn 个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求最少需要分几个考场才能满足条件。 输入格式 第一行,一个整数 n(1<n<100)n(1<n<100…...
BI技巧丨DAX Studio
DAX Studio DAX Studio,作为PowerBI外部插件使用率排名第一的插件,相信各位小伙伴或多或少都听说过,那么DAX Studio具体有哪些功能呢? PS:DAX Studio的下载链接,小伙伴们可以自行搜索,这里就不…...
Java 8常用时间 API
Date: 你不爱我了吗? 🚡本地时间时区相关格式化在Java 8中,Instant类用于表示时间戳,相当于旧的Date类;LocalDateTime类用于表示日期和时间,相当于旧的Calendar类;DateTimeFormatter类用于格式化日期和时间…...
C++运算符
C运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 1. 算术运算符 运算符描述实例把两个操作数相加A B 将得到 30-从第…...
低/无代码赋能企业,IT与业务的角色正在悄然改变
现在这个社会,年轻人的压力是真的大,需要会的技能多到数不清。想学习多点技能也不知道去哪学,主要是网络资源太丰富,很难找到一个适合自己的。那接下来推荐4个大神级别的资源网站你可一定得码住,都是年轻人特别 …...
SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断
文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类,并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…...
Spring 源码解析 - @Async 注解下的循环依赖问题原理
一、Async 注解下的循环依赖问题 我们都知道 Spring IOC 单例模式下可以帮助我们解决循环依赖问题,比如下面自己依赖自己循环依赖的场景: Component public class TestAsync {ResourceTestAsync async;public void test() {System.out.println("t…...
8个全球性编程比赛,天才程序员的梦想舞台
很多编程爱好者在学习之初,都渴望与全球的程序员一较高下,以证明自己的实力。 一些全球性的编程竞赛为他们提供了这样的机会,不仅可以与全世界的顶尖程序员们交流,还有机会获得丰厚的奖金和进入顶级公司的机会,更重要…...
2023年中国海洋大学计算机及电子信息考研分析
考研时间跨度: 初试时间: 2022年8月23 海大推免及创新人才计划接收通知。 2022年9月13 海大专业目录及人数,包含推免。 2022年10月18 2022年硕士研究生计划 ,不含推免。 海大2022年硕士研究生计划 网上第一次时间为2022年9月24日…...
【C++笔试强训】第六天
选择题 1. 解析:十进制转换为八进制就是不断的除8,取余数。十进制转换成其他进制的数就是除以进制,取余。 解析:注意printf的转换,%%只会打印一个%,所以选A。 解析:由于()的原因p先和*结合&…...
Redission 中的 RedLock 原理实现, springboot 你造吗?
分布锁之RedLock 锁住你的心我的爱 🚂为什么需要使用 RedLock锁被误释放时钟不一致问题锁的“延迟释放”而不是死锁Redlock是啥redlock 存在什么问题惊群效应时钟漂移Redisson 实现 RedLock在 Redisson 中, RedLock的实现类是哪一个类?这一招叫抛砖引玉springboot …...
【沐风老师】3dMax一键房屋创建者插件使用方法详解
3dmax一键房屋创建者,一键生成墙体、窗洞和门洞的插件!这个脚本主要用于创建或捕获一些架构项目所代表的平面,这是通过导入它们并在每个所需的层添加值来实现的。传统方法,但是省事儿多了! 【版本要求】 3dMax 2015及…...
C/C++ 变量详解
文章目录前言一、静态变量与动态变量1. 概念2. 区别3. 使用方法和注意事项3.1 静态变量3.2 动态变量4. 结论二、全局变量与局部变量1. 区别2. 全局变量的使用方法和注意事项3. 局部变量的使用方法和注意事项4. 总结前言 对C学习感兴趣的可以看看这篇文章哦:C/C教程…...
新SSD盘安装操作系统启动不了
今天打算给电脑升级下装备,加装一块固态硬盘。 电脑原本自带两块硬盘(SSD128GSATA1T),SSD清理了许久还是没空间,于是就买了块1TSSD,打算扩容下。 打开电脑后盖傻眼了,没有备用插槽,…...
基于Spring、SpringMVC、MyBatis的病历管理系统
文章目录 项目介绍主要功能截图:登录首页医院公告管理用户管理科室信息管理医生管理出诊信息管理预约时间段管理预约挂号管理门诊病历管理就诊评价管理轮播图管理功能架构图部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历…...
QT编程从入门到精通之三十四:“第五章:Qt GUI应用程序设计”之“5.5 Qt Creator使用技巧”
目录 第五章:Qt GUI应用程序设计 5.5 Qt Creator使用技巧 第五章:Qt GUI应用程序设计 在“Qt 程序创建基础”上,本章将继续深入地介绍Qt Creator设计GUI应用程序的方法,包括Qt创建的应用程序项目的基本组织结构,可视化设计的UI界面文件的原理和运行机制,信号与槽的使用…...
网络工程方向有哪些SCI期刊推荐? - 易智编译EaseEditing
以下是网络工程领域的一些SCI期刊推荐: IEEE Transactions on Network and Service Management: 这是一个IEEE旗下的期刊,涵盖了网络与服务管理方面的研究。主要关注网络管理、服务管理和其它相关领域的创新和最新研究。 Computer Networks: 这是一本著…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
