当前位置: 首页 > news >正文

【概念梳理】激活函数

一、引言

常用的激活函数如下:
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 limxf(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+ex1

Sigmoid的几何图像如下:
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)(1f(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+e2x1e2x=ex+exexex=e2x+1e2x1=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,x0x>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(α(ex1),x)={x,α(ex1),x>0x0
其中,α\ \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>0x0
其中,α\ \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>0x0

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)=xtanh(ln(1+ex))

Mish函数及其导数的几何图像如下图:
在这里插入图片描述
这与另一个被称为Swish函数的激活函数非常相似,Swish函数的数学形式如下:
f(x)=x∗Sigmoid(x)\ f(x)=x*Sigmoid(x) f(x)=xSigmoid(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 激活函数

声明

本博客的目的仅为学习交流和记录,谢谢大家的浏览。

相关文章:

【概念梳理】激活函数

一、引言 常用的激活函数如下&#xff1a; 1、Sigmoid函数 2、Tanh函数 3、ReLU函数 4、ELU函数 5、PReLU函数 6、Leaky ReLU函数 7、Maxout函数 8、Mish函数 二、激活函数的定义 多层神经网络中&#xff0c;上层节点的输出和下层节点的输入之间具有一个函数关系&#xff0c;…...

【python】@property 和 @staticmethod

property 和 staticmethod 是 Python 中的两个装饰器&#xff0c;它们分别用于在类中创建属性或静态方法。它们的作用如下&#xff1a; property property&#xff1a;用于将类的一个方法作为属性访问。在 Python 中&#xff0c;使用“getter” 和“setter”方法来实现属性&a…...

Spring题集 - Spring AOP相关面试题总结

文章目录01. Spring AOP 的理解?02. Spring AOP 思想的代码实现03. Spring AOP 的相关术语有哪些&#xff1f;04. Spring AOP 基于注解的切面实现&#xff1f;05. Spring AOP 的通知有哪些类型&#xff1f;06. AOP 有哪些实现方式&#xff1f;07. Spring AOP 和 AspectJ AOP 有…...

分考场

[蓝桥杯 2017 国 C] 分考场(假题&#xff1a;最小色数) 题目描述 nnn 个人参加某项特殊考试。 为了公平&#xff0c;要求任何两个认识的人不能分在同一个考场。 求最少需要分几个考场才能满足条件。 输入格式 第一行&#xff0c;一个整数 n(1<n<100)n(1<n<100…...

BI技巧丨DAX Studio

DAX Studio DAX Studio&#xff0c;作为PowerBI外部插件使用率排名第一的插件&#xff0c;相信各位小伙伴或多或少都听说过&#xff0c;那么DAX Studio具体有哪些功能呢&#xff1f; PS&#xff1a;DAX Studio的下载链接&#xff0c;小伙伴们可以自行搜索&#xff0c;这里就不…...

Java 8常用时间 API

Date: 你不爱我了吗? &#x1f6a1;本地时间时区相关格式化在Java 8中&#xff0c;Instant类用于表示时间戳&#xff0c;相当于旧的Date类&#xff1b;LocalDateTime类用于表示日期和时间&#xff0c;相当于旧的Calendar类&#xff1b;DateTimeFormatter类用于格式化日期和时间…...

C++运算符

C运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 1. 算术运算符 运算符描述实例把两个操作数相加A B 将得到 30-从第…...

低/无代码赋能企业,IT与业务的角色正在悄然改变

现在这个社会&#xff0c;年轻人的压力是真的大&#xff0c;需要会的技能多到数不清。想学习多点技能也不知道去哪学&#xff0c;主要是网络资源太丰富&#xff0c;很难找到一个适合自己的。那接下来推荐4个大神级别的资源网站你可一定得码住&#xff0c;都是年轻人特别 …...

SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断

文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类&#xff0c;并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…...

Spring 源码解析 - @Async 注解下的循环依赖问题原理

一、Async 注解下的循环依赖问题 我们都知道 Spring IOC 单例模式下可以帮助我们解决循环依赖问题&#xff0c;比如下面自己依赖自己循环依赖的场景&#xff1a; Component public class TestAsync {ResourceTestAsync async;public void test() {System.out.println("t…...

8个全球性编程比赛,天才程序员的梦想舞台

很多编程爱好者在学习之初&#xff0c;都渴望与全球的程序员一较高下&#xff0c;以证明自己的实力。 一些全球性的编程竞赛为他们提供了这样的机会&#xff0c;不仅可以与全世界的顶尖程序员们交流&#xff0c;还有机会获得丰厚的奖金和进入顶级公司的机会&#xff0c;更重要…...

2023年中国海洋大学计算机及电子信息考研分析

考研时间跨度&#xff1a; 初试时间&#xff1a; 2022年8月23 海大推免及创新人才计划接收通知。 2022年9月13 海大专业目录及人数&#xff0c;包含推免。 2022年10月18 2022年硕士研究生计划 &#xff0c;不含推免。 海大2022年硕士研究生计划 网上第一次时间为2022年9月24日…...

【C++笔试强训】第六天

选择题 1. 解析&#xff1a;十进制转换为八进制就是不断的除8&#xff0c;取余数。十进制转换成其他进制的数就是除以进制&#xff0c;取余。 解析&#xff1a;注意printf的转换&#xff0c;%%只会打印一个%&#xff0c;所以选A。 解析&#xff1a;由于()的原因p先和*结合&…...

Redission 中的 RedLock 原理实现, springboot 你造吗?

分布锁之RedLock 锁住你的心我的爱 &#x1f682;为什么需要使用 RedLock锁被误释放时钟不一致问题锁的“延迟释放”而不是死锁Redlock是啥redlock 存在什么问题惊群效应时钟漂移Redisson 实现 RedLock在 Redisson 中, RedLock的实现类是哪一个类?这一招叫抛砖引玉springboot …...

【沐风老师】3dMax一键房屋创建者插件使用方法详解

3dmax一键房屋创建者&#xff0c;一键生成墙体、窗洞和门洞的插件&#xff01;这个脚本主要用于创建或捕获一些架构项目所代表的平面&#xff0c;这是通过导入它们并在每个所需的层添加值来实现的。传统方法&#xff0c;但是省事儿多了&#xff01; 【版本要求】 3dMax 2015及…...

C/C++ 变量详解

文章目录前言一、静态变量与动态变量1. 概念2. 区别3. 使用方法和注意事项3.1 静态变量3.2 动态变量4. 结论二、全局变量与局部变量1. 区别2. 全局变量的使用方法和注意事项3. 局部变量的使用方法和注意事项4. 总结前言 对C学习感兴趣的可以看看这篇文章哦&#xff1a;C/C教程…...

新SSD盘安装操作系统启动不了

今天打算给电脑升级下装备&#xff0c;加装一块固态硬盘。 电脑原本自带两块硬盘&#xff08;SSD128GSATA1T&#xff09;&#xff0c;SSD清理了许久还是没空间&#xff0c;于是就买了块1TSSD&#xff0c;打算扩容下。 打开电脑后盖傻眼了&#xff0c;没有备用插槽&#xff0c…...

基于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期刊推荐&#xff1a; IEEE Transactions on Network and Service Management: 这是一个IEEE旗下的期刊&#xff0c;涵盖了网络与服务管理方面的研究。主要关注网络管理、服务管理和其它相关领域的创新和最新研究。 Computer Networks: 这是一本著…...

netty入门(二十六)任务加入异步线程池源码剖析

1.handler中加入线程池和Context添加线程池 1.1 源码剖析目的 &#xff08;1&#xff09;在 Netty 中做耗时的&#xff0c;不可预料的操作&#xff0c;比如&#xff1a;数据库、网络请求、会严重影响 Netty 对 Socket 的处理速度。 &#xff08;2&#xff09;而解决方法就是…...

神经网络算法入门和代码

文章内容 感知机&#xff08;Perceptron&#xff09;反向传播算法&#xff08;Back Propagation algorithm&#xff09;RBF(Radial Basis Function&#xff0c;径向基函数) 网络&#xff1a;单一层前馈网络&#xff0c;它使用径向基作为隐层神经元激活函数ART(Adaptive Resona…...

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?

作者&#xff1a;华钟明 本文我们将介绍 Apache Dubbo 灵活的多协议设计原则&#xff0c;基于这一设计&#xff0c;在 Dubbo 框架底层可灵活的选用 HTTP/2、HTTP/REST、TCP、gRPC、JsonRPC、Hessian2 等任一 RPC 通信协议&#xff0c;同时享用统一的 API 与对等的服务治理能力。…...

ToBeWritten之杂项2

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

Linux三剑客之awk命令详解

1、概述 Linux三剑客&#xff1a;grep、sed、awk。grep主打查找功能&#xff0c;sed主要是编辑行&#xff0c;awk主要是分割列处理。本篇文章我们详细介绍awk命令。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编…...

C++异常处理:掌握高效、健壮代码的秘密武器

C异常处理全面解析&#xff1a;底层原理、编译器技巧与实用场景C异常机制&#xff1a;让我们迈向更安全、更可靠的代码C异常处理&#xff1a;掌握基本概念什么是异常&#xff1f;异常处理的重要性C异常处理的组成部分&#xff1a;try、catch、throw探索C异常处理的核心&#xf…...

Jetpack Compose基础组件之按钮组件

概述 按钮组件Button是用户和系统交互的重要组件之一&#xff0c;它按照Material Design风格实现&#xff0c;我们先看下Button的参数列表&#xff0c;通过参数列表了解下Button的整体功能 Composable fun Button(onClick: () -> Unit, // 点击按钮时的回调modifier: Modi…...

利用json-server快速在本地搭建一个JSON服务

1&#xff0c;json-server介绍 一个在前端本地运行&#xff0c;可以存储json数据的server。 通俗来说&#xff0c;就是模拟服务端接口数据&#xff0c;一般用在前后端分离后&#xff0c;前端人员可以不依赖API开发&#xff0c;而在本地搭建一个JSON服务&#xff0c;自己产生测…...

可重入函数与线程安全

指令乱序和线程安全 先来看什么是指令乱序问题以及为什么有指令乱序。程序的代码执行顺序有可能被编译器或CPU根据某种策略打乱指令执行顺序&#xff0c;目的是提升程序的执行性能&#xff0c;让程序的执行尽可能并行&#xff0c;这就是所谓指令乱序问题。理解指令乱序的策略是…...

一文彻底读懂异地多活

文章目录 系统可用性单机架构主从副本风险不可控同城灾备同城双活两地三中心伪异地双活真正的异地双活如何实施异地双活1、按业务类型分片2、直接哈希分片3、按地理位置分片异地多活总结系统可用性 要想理解异地多活,我们需要从架构设计的原则说起。 现如今,我们开发一个软件…...