机器学习 10:激活函数大全

news2024/11/13 15:29:29

虽称为激活函数大全,但也不敢太过自满,如有遗漏与错误,还请指正

文章目录

  • 线性激活函数
  • Sigmoid 函数
    • LogSigmoid
    • Swish
  • Tanh / 双曲正切激活函数
    • TanhShrink
  • Softsign
  • ReLU 函数
    • BReLU
    • Leaky ReLU
      • PReLU
      • RReLU
    • ELU
      • SELU
      • CELU
    • GELU
  • Softmax 函数
  • Maxout 函数
  • Softplus 函数

线性激活函数

f ( x ) = a x f ( x ) ∈ ( − ∞ , ∞ ) f(x)=ax\\f(x)\in(-\infin,\infin) f(x)=axf(x)(,)


Sigmoid 函数

σ ( x ) = 1 1 + e − x \sigma(x)=\frac1{1+e^{-x}} σ(x)=1+ex1优点:

  • 对神经元的输出进行归一化
  • 用于将预测概率作为输出的模型
  • 梯度平滑
  • 明确的预测,输出非常接近 1 或 0

缺点:

  • 倾向于梯度消失
  • 输出不是以 0 为中心,会降低权重更新效率
  • 指数运算速度慢

LogSigmoid

f ( x ) = log ⁡ ( 1 1 + e − x ) f(x)=\log(\frac1{1+e^{-x}}) f(x)=log(1+ex1)

Swish

f ( x ) = x ∗ s i g m o i d ( x ) = x 1 + e − x f(x)=x*sigmoid(x)=\frac x{1+e^{-x}} f(x)=xsigmoid(x)=1+exxSwish 的设计受到了 LSTM 和高速网络中 gating 的 sigmoid 函数使用的启发。我们使用相同的 gating 值来简化 gating 机制,这称为 self-gating。

self-gating 的优点在于它只需要简单的标量输入,而普通的 gating 则需要多个标量输入。这使得诸如 Swish 之类的 self-gated激活函数能够轻松替换以单个标量为输入的激活函数(例如 ReLU),而无需更改隐藏容量或参数数量。

优点:

  • 无界性有助于防止训练期间,梯度逐渐接近 0 并导致饱和(有界性也是有优势的,因为有界激活函数可以具有很强的正则化,并且较大的负输入问题也能解决)
  • 导数恒 > 0 >0 >0
  • 平滑度在优化和泛化中起了重要作用。

在这里插入图片描述

Tanh / 双曲正切激活函数

f ( x ) = t a n h ( x ) = 2 1 + e − 2 x − 1 f(x)=tanh(x)=\frac2{1+e^{-2x}}-1 f(x)=tanh(x)=1+e2x21与 sigmoid 相比,它的优点就是以 0 为中心,收敛速度比 Sigmoid 快

一般在二分类问题中,tanh 用于隐藏层,而 sigmoid 用于输出层

TanhShrink

f ( x ) = x − t a n h ( x ) f(x)=x-tanh(x) f(x)=xtanh(x)
在这里插入图片描述

Softsign

在这里插入图片描述
f ( x ) = x 1 + ∣ x ∣ f(x)=\frac x{1+|x|} f(x)=1+xxSoftsign 是 tanh 的一个替代选择,相比于tanh,Sotsign 的曲线更平坦,导数下降的更慢一点,这使得它可以缓解梯度消失问题,可以更高效的学习。

ReLU 函数

σ ( x ) = max ⁡ ( 0 , x ) \sigma(x)=\max(0,x) σ(x)=max(0,x)优点:

  • 当输入为正时,不存在梯度饱和问题
  • 计算速度快

缺点:

  • Dead ReLU 问题,当输入为负时 ReLU 失效。在正向传播过程中有些区域会很敏感,有些不敏感。但是在反向传播过程中,如果输入负数,则梯度完全为 0。

梯度饱和:

有些函数(如 Sigmoid 或 Tanh)自变量进入某个区间后,梯度会非常小,函数曲线越来越趋近一条水平直线。梯度饱和会导致训练过程中梯度变化缓慢,从而造成模型训练缓慢。梯度饱和是造成梯度消失的原因之一。

BReLU

限制 ReLU 的输出不超过 n n n f ( x ) = min ⁡ ( max ⁡ ( 0 , x ) , n ) f(x)=\min(\max(0,x),n) f(x)=min(max(0,x),n)

Leaky ReLU

在这里插入图片描述
一种专门设计用于解决 Dead ReLU 问题的激活函数 f ( x ) = { x x > = 0 a x x < 0 f(x)=\begin{cases}x&x>=0\\ax&x<0\end{cases} f(x)={xaxx>=0x<0其中 a a a 值很小,一般在 0.01 左右。

注意: 从理论上来讲,Leaky ReLU 具有 ReLU 的所有优点,且不会有 Dead ReLU 问题,但在实际使用中,没有完全证明 Leaky ReLU 总是比 ReLU 好。

PReLU

和 Leaky ReLU 很像,唯一的不同是函数中的 a a a 是一个可通过反向传播学习的参数。

RReLU

对 Leaky ReLU 的另一种改进。在训练时, a a a 是给定范围内取样的随机变量,而测试时 a a a 变为固定值。这里 a a a 服从均匀分布。

ELU

在这里插入图片描述

ELU 的提出也解决了 ReLU 的一些问题。 g ( x ) = { x x > = 0 a ( e x − 1 ) x < 0 g(x)=\begin{cases}x&x>=0\\a(e^x-1)&x<0\end{cases} g(x)={xa(ex1)x>=0x<0优点:

  • ReLU 的所有优点
  • 没有 Dead ReLU
  • 与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。
  • 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。

缺点:

  • 有指数运算,计算强度更高
  • 从理论上来讲,ELU 具有 ReLU 的所有优点,但在实际使用中,没有完全证明 ELU 总是比 ReLU 好。

SELU

SELU和ELU的形式比较类似,但是多出一个 scale。 g ( x ) = s c a l e ∗ { x x > = 0 a ( e x − 1 ) x < 0 g(x)=scale*\begin{cases}x&x>=0\\a(e^x-1)&x<0\end{cases} g(x)=scale{xa(ex1)x>=0x<0优点:

  • 能够对神经网络进行自归一化

CELU

g ( x ) = { x x > = 0 a ( e x a − 1 ) x < 0 g(x)=\begin{cases}x&x>=0\\a(e^\frac xa-1)&x<0\end{cases} g(x)={xa(eax1)x>=0x<0

GELU

在这里插入图片描述
f ( x ) = 1 2 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) f(x)=\frac12x(1+\tanh(\sqrt{\frac2\pi}(x+0.044715x^3))) f(x)=21x(1+tanh(π2 (x+0.044715x3)))GELU 函数结合了 ReLU、Dropout、Zoneout 的思想,并且加入了正态分布的方法。

  • ReLU: 输入大于 0 则输出,否则不输出。
  • Dropout:随机决定是否输出。
  • Zoneout:Dropout 的一个变种,在时间维度上随机决定是否输出,或者可以理解为是否跳过这一步直接到达下一步。

这三者的相同点总结为一句话,就是通过对输入乘上 1 或 0 来控制神经元是否输出。而 GELU 也采用了这个思想,但它是否输出是由自身分布情况决定的,更具体一点,由输入项有多大概率大于其它输入而决定。

更具体一点:
将输入 x x x 乘以一个服从伯努利分布的数 m m m,而该伯努利分布由依赖于 x x x m ∼ Bernoulli ( Φ ( x ) ) where  Φ ( x ) = P ( X ≤ x ) m\sim\text{Bernoulli}(\Phi(x))\\\text{where }\Phi(x)=P(X\le x) mBernoulli(Φ(x))where Φ(x)=P(Xx)由于神经元的输入往往遵循正太分布(尤其是深度网络中普遍存在 Batch Normalization 的情况下),所以公式中 X X X 表示其它输入,服从标准正态分布 X ∼ N ( 0 , 1 ) X\sim N(0,1) XN(0,1),那么 Φ ( x ) \Phi(x) Φ(x) 就表示标准正态分布的累计分布函数。此时 GELU 函数可以写成: GELU ( x ) = x Φ ( x ) + 0 ∗ x ( 1 − Φ ( x ) ) = x Φ ( x ) \text{GELU}(x)=x\Phi(x)+0*x(1-\Phi(x))=x\Phi(x) GELU(x)=xΦ(x)+0x(1Φ(x))=xΦ(x)另外累积分布函数 Φ ( x ) \Phi(x) Φ(x) 可以用误差函数表示: Φ ( x ) = 1 2 [ 1 + erf ( x 2 ) ] \Phi(x)=\frac12[1+\text{erf}(\frac x{\sqrt2})] Φ(x)=21[1+erf(2 x)] 而误差函数是一个非初等函数,所以我们又需要用一个初等函数 tanh 去拟合,最终就有了上面 GELU 的公式。

优点:

  • 似乎是 NLP 领域的当前最佳,尤其在 Transformer 模型中表现最好
  • 能避免梯度消失问题

Softmax 函数

用于多分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K K K 的任意实向量,Softmax 可以将其压缩为长度为 K K K,值在 ( 0 , 1 ) (0,1) (0,1) 范围内,并且向量中元素值的总和为 1 的实向量。 S o f t m a x ( z ⃗ ) = e z i ∑ j = 1 K e z j Softmax(\vec z)=\frac{e^{z_i}}{\sum^K_{j=1}e^{z_j}} Softmax(z )=j=1KezjeziSoftmax 与正常的 max 函数不同,max 函数仅输出最大值,但 Softmax 会确保较小的值具有较小的概率,并不会直接丢弃。可以认为它是 argmax 函数的概率版本。

缺点:

  • 在 0 点不可微
  • 负输入的梯度为零,这意味着对于该区域,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

Maxout 函数

f ( x ) = max ⁡ ( w 1 T x + b 1 , w 2 T x + b 2 , ⋯   , w n T x + b n ) f(x)=\max(w_1^Tx+b_1,w_2^Tx+b_2,\cdots,w_n^Tx+b_n) f(x)=max(w1Tx+b1,w2Tx+b2,,wnTx+bn)可以看出 ReLU 就是它的一个变形。它可以近似任何一个连续函数。只有 2 个 maxout 节点的多层感知机就可以拟合任意的凸函数。单个 Maxout 节点可以解释为对一个实值函数进行分段线性近似 (PWL) ,其中函数上任意两点之间的线段位于凸函数的上方。

但它增加了参数和计算量。


Softplus 函数

在这里插入图片描述
f ( x ) = ln ⁡ ( 1 + e x ) f(x)=\ln(1+e^x) f(x)=ln(1+ex)类似 ReLU 函数,和 ReLU 一样是单侧抑制,但是相对平滑。

优点:

  • 与 ReLU 不同的是,SoftPlus 的导数是连续的、非零的、无处不在的,这一特性可以防止出现 Dead ReLU 现象。

缺点:

  • SoftPlus 是不对称的,不以0为中心,存在偏移现象。
  • 其导数常常小于1,也可能会出现梯度消失的问题。

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

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

相关文章

Android 实现多语言

工具下载连接 链接&#xff1a;https://pan.baidu.com/s/1Wq9DTzhP2fkHXLEbOQFr9A?pwdlmcz 提取码&#xff1a;lmcz 1.将你需要的翻译的strings放到exe目录下 2.双击执行xml转xls.exe 英文 日文 韩文&#xff08;使用空格分割&#xff09;回车&#xff0c;会在当前目录下生…

jvm学习的开端(一)----类的加载(类加载子系统)

文章目录1.Loading&#xff08;加载阶段&#xff09;2.Linking&#xff08;链接阶段&#xff09;2.lnitialization&#xff08;初始化阶段&#xff09;来自 百度百科&#xff1a; 类加载器子系统负责从文件系统或者网络中加载class文件&#xff0c;class文件在文件开头有特定的…

【java项目】飞机大战

文章目录项目-飞机大战窗口的创建背景图片的添加/点击事件的启动游戏物体父类的编写背景的移动双缓存技术--解决文字闪动背景图片循环出现我方战斗机的添加和鼠标控制添加首颗子弹批量添加子弹敌方飞机的批量添加功能我方子弹与敌方飞机的碰撞检测我方子弹与敌方飞机碰撞时的处…

单片机基础之单片机中断、定时器中断、PWM及SG90舵机的初识认知

目录 一、初探单片机中断 二、定时器中断相关寄存器 1、中断寄存器 2、中断结构 3、用定时器中断方式控制LED&#xff0c;代码编程测试 三、初识PWM 1、什么是占空比 2、如何输出PWM信号 四、SG90舵机基本认知 1、什么是舵机 2、怎么控制舵机 3、舵机编程实战 一、…

Jetson nano 入手系列之2—板载摄像头IMX219启动

Jetson nano 入手系列之2—板载摄像头IMX219启动1.亚克力板安装2.摄像头启动3.nvgstcapture常用命令3.1 Set sensor orientation3.2 Get Image Capture Resolution3.3 Capture3.4 quit参考文献Jetson nano 入手系列&#xff1a; Jetson nano 入手系列之1—如何SSH远程登录 Jets…

Redis学习(一)

Redis入门 Redis是一个基于内存的key-value结构数据库&#xff0c;读写性能较高 Redis数据类型 Redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种数据类型&#xff1a; 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集…

Altium Designer 20 凡亿教育视频学习-01

课程视频&#xff1a;第1课 课程介绍.mp4_哔哩哔哩_bilibili 第一部分学习 学习方法 工程具备文件 一定需要先建立工程&#xff0c;再来创建原理图库、原理图等文件 栅格大小改变 栅格的大小我们常在绘制原理图的时候改变&#xff0c;因为有时候我们需要画一个细线&#…

【PCB专题】什么是通孔、盲孔、埋孔?

PCB板是由基板和PP叠加而成的。不同层上走了各种信号线和电源,这些信号和电源在不同的电路层之间切换时需要依靠过孔(通孔、盲孔和埋孔)连接。如下图所示的6层板,使用了2阶HDI方案:有机械孔和激光孔。 过孔的作用就像是水管一样,连接了不同的平面。PCB板上的过孔作用就是…

函数的定义和调用 与 this指向

1、函数的定义和调用 1.1、函数的定义方式 函数声明方式 function 关键字 (命名函数)函数表达式 (匿名函数)new Function() var fn new Function(参数1,参数2..., 函数体)&#xff08;1&#xff09;Function 里面参数都必须是字符串格式 &#xff08;2&#xff09;第三种方式…

已解决+ CategoryInfo: SecurityError: (:) [ ].ParentContainsErrorRecordException

已解决无法加载文件 E:\day_01\Scripts\activate.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的about_Execution_Policies。 CategoryInfo: SecurityError: &#xff08;:&#xff09; [ ]…

[LeetCode周赛复盘] 第 326 场周赛20230101

[LeetCode周赛复盘] 第 326 场周赛20230101 一、本周周赛总结二、 [Easy] 6278. 统计能整除数字的位数1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6279. 数组乘积中的不同质因数数目1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6196. 将字符串分割成值不超过 K 的子字…

路由 NAT(简介、静态NAT、动态NAT、NATServer、NAPT、Easy-ip、NAT地址映射表)

4.1.0 路由 NAT&#xff08;简介、静态NAT、动态NAT、NATServer、NAPT、Easy-ip、NAT地址映射表&#xff09; 目录简介NAT地址映射表静态NAT简介操作案例动态NAT简介操作案例NAT Server简介操作案例NAPT简介操作案例Easy-ip简介操作案例简介 为了有效节约公网IPv4地址&#xf…

QT 学习笔记(十二)

文章目录一、文件系统1. 文件系统简介2. 文件系统分类二、基本文件操作1. QFile 读文件2. QFile 写文件3. QFileInfo 获取文件信息三、基本文件操作代码1. 主窗口头文件 widget.h2. 主窗口源文件 widget.cpp由于每次代码都是在原有程序上修改&#xff0c;因此除了新建项目&…

物联网与射频识别技术,课程实验(三)

实验3—— 时隙ALOHA(S-ALOHA)算法的实现及其性能分析 实验说明&#xff1a; 1. 利用Python或Matlab模拟时隙ALOHA算法&#xff1b; 分析标签数量k、时隙大小t对信道利用率的影响&#xff0c;其中&#xff0c; 信道利用率发送数据的时间/(发送数据的时间信道空闲的时间) 3. …

10、中断系统概述

目录 0x01、异常类型 0x0001、系统异常清单 0x0002、外部中断清单 0x02、NVIC 简介 0x0001、NVIC 寄存器 0x0002、NVIC 中断配置固件库 0x03、优先级 0x0001、优先级定义 0x0002、优先级分组 0x0003、中断编程 0x01、异常类型 STM32F103 在内核水平上搭载了一个异常响…

重金打造SEA浩瀚架构,吉利的野心绝不仅仅是一个平台

&#xff08;作者&#xff1a;贝贝。常年供职于某外资整车企业产品规划部门&#xff0c;负责全球车型在国内的引入和投放&#xff09;最近几个月&#xff0c;吉利旗下的中高端电动车品牌极氪汽车销量一路走高。单凭借极氪001一款车型&#xff0c;10月、11月交付量连续破万&…

查找:折半查找、平衡二叉树、散列表(习题-1、5、6)二叉排序树(习题-2、3、4)

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.1 Last edited: 2023.1.1 目录 查找&#xff1a;折半查找、平衡二叉树、散列表&#xff08;习题-1、5、6&#xff09; 第1关&#xff1…

04.spring源码循环依赖终极讲解

1.Spring怎么解决循环依赖 我们都知道&#xff0c;单例Bean初始化完成&#xff0c;要经历三步&#xff1a; 注入就发生在第二步&#xff0c;属性赋值&#xff0c;结合这个过程&#xff0c;Spring 通过三级缓存解决了循环依赖&#xff1a; 一级缓存 : Map<String,Object>…

PUCCH传输UCI信息

上报HARQ-ACK 时序 传输HARQ-ACK信息的时序不再像4G那样固定&#xff0c;而是由基站侧配置给UE。有下面几种情况&#xff1a; 如果UE收到的是DCI format 1_0&#xff0c;其中的字段’PDSCH-to-HARQ_feedback timing indicatior’指示HARQ-ACK与PDSCH的时序关系&#xff0c;该…

Linux之孤儿进程、进程优先级、环境变量

本章目录1.孤儿进程2.状态优先级3.环境变量1.孤儿进程 父进程如果提前退出&#xff0c;那么子进程后退出&#xff0c;进入Z之后&#xff0c;那该如何处理&#xff1f; 父进程先退出&#xff0c;子进程还在&#xff0c;子进程就称之为“孤儿进程”。 孤儿进程被1号init进程&am…