【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish

article/2025/9/21 18:38:44

文章目录

  • 一、Tanh
  • 二、Sigmoid
  • 三、ReLU
  • 四、Leaky ReLU
  • 五、ELU
  • 六、SiLU
  • 七、Mish

本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点

在这里插入图片描述

最简单的激活函数被称为线性激活,其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练,但不能学习复杂的映射函数。线性激活函数仍然用于预测一个数量的网络的输出层(例如回归问题)。

非线性激活函数是更好的,因为它们允许节点在数据中学习更复杂的结构 。两个广泛使用的非线性激活函数是 sigmoid 函数和 双曲正切 激活函数。

在这里插入图片描述

一、Tanh

在这里插入图片描述

Tanh 函数公式如下,数值范围在 (-1, 1),导数范围为 (0, 1]

Tanh 函数的优点:

  • 以 0 为中心,能够达到正负平衡,避免出现梯度的不稳定性

Tanh 函数的缺点:

  • 会导致梯度消失问题!

二、Sigmoid

在这里插入图片描述

Sigmoid 函数公式如下,数值范围为 (0, 1),导数范围为 (0, 0.25]:

  • f ( x ) = 1 1 + e − z f(x) = \frac{1}{1+e^{-z}} f(x)=1+ez1

sigmoid 函数优点:

  • 可以把输入映射到 (0, 1)区间,可以用来表示概率,在物理意义上最为接近生物神经元

sigmoid 函数缺点:

  • 梯度消失问题 :由于 sigmoid 的导数 f′(zl) 区间为 (0, 0.25],所以其极易落入饱和区,导致梯度非常小,权重接近不变,无法正常更新
  • sigmoid 的输出并不是均值为 0 的,所有输出数据的大于0,会增加梯度的不稳定性
  • 当输出接近饱和或剧烈变化时,对输出范围的这种缩减往往会带来一些不利影响

三、ReLU

在这里插入图片描述

f ( x ) = max ( 0 , x ) f(x) = \text{max}(0, x) f(x)=max(0,x)

ReLU 函数的优点:

  • 摒弃了复杂的计算, 比 sigmoid/tanh 收敛的更快 (大概快 6x)
  • 其导数在其权重和(z) 大于 0 的时候为 1,不存在梯度消失现象权重可以正常更新,但也要防止 ReLU 的梯度爆炸

ReLU 函数的缺点:

  • 小于 0 的输出经过 ReLU 之后会全都变成 0,梯度值为0,从而权重无法正常更新
  • 输出具有偏移现象,即输出均值恒大于零
  • 当使用了较大的学习速率时,易受到饱和的神经元的影响。

四、Leaky ReLU

在这里插入图片描述

公式如下:

  • f ( x ) = α x , x < 0 f(x) = \alpha x, \ x<0 f(x)=αx, x<0
  • f ( x ) = x , x > = 0 f(x) = x, \ x>=0 f(x)=x, x>=0

为了防止模型 dead 的情况,出现了很多 ReLU 的改进版本,如 Leaky ReLU,在 0 右侧和 ReLU 一样,左侧从全零变成了一个斜率很小的直线

优点:

  • 避免了小于零的特征被处理为 0 导致特征丢失的情况,同时左右两侧梯度都是恒定的,不会出现梯度消失现象

缺点:

  • Leaky ReLU中的 α \alpha α 为常数,一般设置 0.01。这个函数通常比 ReLU 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLU 使用的并不多。

五、ELU

在这里插入图片描述

在这里插入图片描述

ELU(Exponential Linear Unit,指数线性单元)尝试加快学习速度。基于ELU,有可能得到比ReLU更高的分类精确度。

优点:

  • 解决了 ReLU 可能导致的网络 dead 的问题

缺点:

  • 计算量较大

六、SiLU

在这里插入图片描述

f ( x ) = x ∗ sigmoid ( β x ) f(x) = x *\text{sigmoid}(\beta x) f(x)=xsigmoid(βx) β = 1 \beta=1 β=1 时就是 SiLU

优点:

  • 相比 ReLU 增加了平滑性的特点

缺点:

  • 引入了指数计算,增加了计算量

七、Mish

在这里插入图片描述

f ( x ) = x ∗ tanh ( ln ( 1 + e x ) ) f(x) = x * \text{tanh}(\text{ln}(1+e^x)) f(x)=xtanh(ln(1+ex))

优点:

  • 平滑、非单调、无上界、有下界

缺点:

  • 引入了指数函数,增加了计算量

绘图代码:

import matplotlib.pyplot as plt
import numpy as np
import math
#
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False## sigmoid
def sigmoid(x):return 1 / (1 + np.exp(-x))
x1 = np.arange(-10.0, 10.0, 0.1)
y1 = sigmoid(x1)
plt.plot(x1, y1, color='purple', label='sigmoid')
plt.legend()## ReLU
def ReLU(x):return np.maximum(0, x)  # ReLU函数的定义
x2 = np.arange(-10.0, 10.0, 0.1)
y2 = ReLU(x2)
plt.plot(x2, y2, color='orange', label='ReLU')
plt.legend()## tanh
def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
x3 = np.arange(-10.0, 10.0, 0.1)
y3 = tanh(x3)
plt.plot(x3, y3, color='yellow', label='Taanh')
plt.legend()## Leaky ReLU
def Leaky_ReLU(xx):return [x if x > 0 else 0.1 * x for x in xx]
x4 = np.arange(-10, 10.0, 0.1)
y4 = Leaky_ReLU(x4)
plt.plot(x4, y4, color='black', label='Leaky ReLU(alpha=0.1)')
plt.legend()## ELU
def ELU(xx):return [x if x > 0 else 1 * (np.exp(x) - 1) for x in xx]
x5 = np.arange(-10.0, 10.0, 0.1)
y5 = ELU(x5)
plt.plot(x5, y5, color='green', label='ELU(alpha=1)')
plt.legend()# silu
def SiLU(xx):return [x * (1 / (1 + np.exp(-x))) for x in xx]
x6 = np.arange(-10.0, 10.0, 0.1)
y6 = SiLU(x6)
plt.plot(x6, y6, color='red', label='SiLU')
plt.legend()## Mish
def Mish(xx):return [x * tanh(np.log(1 + np.exp(x))) for x in xx]
def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
x7 = np.arange(-10.0, 10.0, 0.1)
y7 = Mish(x7)
plt.plot(x7, y7, color='pink', label='Mish')
plt.legend()# 获得当前的axis
ax = plt.gca()
# 设置图像的上边、右边axis为无色
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')# 设置x轴坐标在下部
ax.xaxis.set_ticks_position('bottom')
# 设置x轴位于图像y=0处
ax.spines['bottom'].set_position(('data', 0))
# 设置x轴坐标在左部
ax.yaxis.set_ticks_position('left')
# 设置y轴位于图像x=0处
ax.spines['left'].set_position(('data', 0))
plt.show()

http://chatgpt.dhexx.cn/article/VuGHslMp.shtml

相关文章

神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

神经网络激活函数汇总&#xff08;Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout&#xff09; 常规 sigmoid 和 tanh sigmoid 特点&#xff1a;可以解释&#xff0c;比如将0-1之间的取值解释成一个神经元的激活率&#xff08;firing rate&#xff09; 缺陷&#xff1…

神经网络激活函数优缺点和比较(sigmod,tanh,relu,softmax,leaky relu,ELU,SELU)

文章目录 前言一、sigmoid函数二、tanh函数三&#xff0c;ReLU函数四&#xff0c; Leaky ReLU五&#xff0c;ELU指数线性单元函数&SELU函数六&#xff0c;softmax函数 前言 理想的激活函数应该有的性质 非线性&#xff1a;这个条件是多层神经网络形成的基础&#xff0c;保…

常用激活函数:Sigmoid/Softmax/ELU/ReLU/LeakyReLU/Tanh...(Pytorch)

激活函数 一、Sigmoid1.介绍2.实例 二、Softmax1.介绍2.实例 三、ELU&#xff1a;指数线性单元函数1.介绍2.实例 四、ReLU&#xff1a;整流线性单元函数1.介绍2.实例 五、ReLU61.介绍2.实例 六、LeakyReLU1.介绍2.实例 七、Tanh&#xff1a;双曲正切函数1.介绍2.实例 一、Sigmo…

【深度学习】论文导读:ELU激活函数的提出(FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS))

论文下载&#xff1a; FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)&#xff08;2016&#xff0c;Djork-Arne Clevert, Thomas Unterthiner & Sepp Hochreiter&#xff09; 一、简介 ELU的表达式&#xff1a; 四种激活函数&#xff0…

ReLU、LReLU、PReLU、CReLU、ELU、SELU

ReLULReLUPReLUCReLUELUSELUReLU tensorflow中:tf.nn.relu(features, name=None) LReLU (Leaky-ReLU) 其中 ai 是固定的。 i 表示不同的通道对应不同的

机器学习中的数学——激活函数(五):ELU函数

分类目录&#xff1a;《机器学习中的数学》总目录 相关文章&#xff1a; 激活函数&#xff1a;基础知识 激活函数&#xff08;一&#xff09;&#xff1a;Sigmoid函数 激活函数&#xff08;二&#xff09;&#xff1a;双曲正切函数&#xff08;Tanh函数&#xff09; 激活函…

npm的安装,卸载以及版本回退

我之前在电脑上安装了Node.js V15.12.0这个版本&#xff0c;它对应的npm版本为 7.6.3 后来因为npm install --registryhttps://registry.npm.taobao.org总是报错。 度娘说npm7.x的版本比npm6.x更严格。 因此我回退npm版本到6.X。 于是我重装了node V13.10.1&#xff0c;但是…

Linux安装与卸载nodejs/卸载npm

编译mediasoup, 需要先安装nodejs npm。但是我一不小心&#xff0c;安装了最新的14.x版本。结果老出问题&#xff1a; npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! <https://npm.community>npm …

npm 卸载及安装流程

1.卸载 1.将node的安装目录nodejs文件夹清空 2.查找.npmrc文件删除&#xff08;在用户文件夹下&#xff09; 2.安装 1.到node官网下载安装包 2.傻瓜式安装 3.完成后 node -v npm -v 查看是否安装成功&#xff0c;此时npm 并不是最新版 4.配置npm的全局模块的存放路径以及cac…

Node.js的卸载

Node.js的卸载 在控制面板-程序-程序和功能中卸载卸载后 到文件夹中进行进一步的删除检查环境变量中Path中有没有最后 重启一下 结束[随手记账单小程序 期待大家的反馈](https://mp.weixin.qq.com/s/RaFSpVov33bZDUn-aSXa1w) 在控制面板-程序-程序和功能中卸载 确保node.js没有…

npm的卸载与安装流程

安装&#xff08;npm 和node是一起的&#xff0c;安装成功node后就会自带npm&#xff09; 1、下载地址为&#xff1a;https://nodejs.org/en/ 2、检查是否安装成功&#xff1a;如果输出版本号&#xff0c;说明我们安装node环境成功 3、为了提高我们的效率&#xff0c;可以使用…

npm依赖、命令

NPM 的全称是 Node Package Manager&#xff0c;是随同 NodeJS 一起安装的包管理和分发工具&#xff0c;它可以很方便的让前端开发者下载、安装、上传以及管理已经安装的包。 1. npm 安装配置&#xff08;可选&#xff09; 现在安装的新版本的nodejs可以直接使用默认配置的即可…

npm——安装、卸载与更新

npm 官方文档&#xff1a;https://docs.npmjs.com/ 什么是npm npm&#xff08;“Node 包管理器”&#xff09;是 JavaScript 运行时 Node.js 的默认程序包管理器。 它也被称为“Ninja Pumpkin Mutants”&#xff0c;“Nonprofit Pizza Makers”&#xff0c;以及许多其他随机…

静态局部变量 普通全局变量 静态全局变量

1 计算机内部存储方面&#xff0c;在编译时&#xff0c;编译器会给它们分配地址&#xff0c;地址不会被回收。 2 静态局部变量 a 作用域是在于同局部变量。 b&#xff0c;地址不会回收&#xff0c;但是赋值同普通变量一样。 注意&#xff1a; 1 编译器在静态存储区内给静…

c语言局部变量 静态局部变量 全局变量与静态全局变量

基本概念&#xff1a; 作用域&#xff1a;起作用的区域&#xff0c;也就是可以工作的范围。 代码块&#xff1a;所谓代码块&#xff0c;就是用{}括起来的一段代码。 数据段&#xff1a;数据段存的是数&#xff0c;像全局变量就是存在数据段的 代码段&#xff1a;存的是程序代码…

什么是全局变量,局部变量,静态全局变量,静态局部变量

来源&#xff1a;公众号【编程珠玑】 作者&#xff1a;守望先生 前言 这些是编程语言中的基本概念&#xff0c;如果你还不是非常明确地清楚标题的问题&#xff0c;并且不知道作用域&#xff0c;链接属性&#xff0c;存储期等概念的具体含义&#xff0c;那么本文你不该错过。为了…

静态局部变量初始化

mask一下一直以来的一个误区 #include <stdio.h>void key(void) {static unsigned char key_up 1;printf("key_up %d \n", key_up);key_up 0;printf("key_up %d \n", key_up); }int main(void) {key();key();return 0; }原以为会每次调子函数时&…

C语言全局变量,局部变量,静态局部变量的区分

1.如果没有给全局变量和静态局部变量进行初始化赋值&#xff0c;全局变量与静态局部变量一样&#xff0c;默认值为数字0&#xff08;ASCII码为48&#xff09;&#xff1b; 2.非静态的局部变量没有初始化时&#xff0c;该变量的值是一个随机数&#xff0c;必须要赋值后才可以安…

C++中的静态局部变量

1 静态局部变量在静态存储区内分配存储单元。在程序运行期间都不释放。 2 对静态局部变量是在编译时赋初值的&#xff0c;即只赋值一次&#xff0c;在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上一次函数调用结束时的值。 3 静态局部变量&#x…

利用静态局部变量求阶乘

可以利用静态局部变量在在内存中不自动释放的特性&#xff0c;去计算阶乘&#xff0c;详细代码如下: #include <iostream> using namespace std;long CalcResult(int num) {static int result 1;result num*result;return result; }int main() {//采用静态局部变量计算…