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

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

文章目录

  • 前言
  • 一、sigmoid函数
  • 二、tanh函数
  • 三,ReLU函数
  • 四, Leaky ReLU
  • 五,ELU指数线性单元函数&SELU函数
  • 六,softmax函数


前言

理想的激活函数应该有的性质
非线性:这个条件是多层神经网络形成的基础,保证多层网络不退化成单层线性网络
几乎处处可微:保证了优化过程中梯度的可计算性
计算简单
非饱和性:饱和指的是在某些区间梯度接近于零(梯度消失)
单调性:即导数的符号不变,单调性使得在激活函数处的梯度方向不会经常改变利于收敛
输出范围有限
接近恒等变换:即约等于x,好处是使得输出的幅值不会随着网络深度的增加而 发生显著增加,从而使网络更加稳定,同时梯度也能够更容易回传。这与非线性是有些矛盾的,因此激活函数只能部分满足这个条件。如relu函数在x>0时满足。
参数少
归一化:如SELU函数,主要思想是使样本自动分布归一化到零均值,单位方差的分布,从而稳定训练。类似于batchnormalization。


提示:一些经典的激活函数列举

一、sigmoid函数

在这里插入图片描述
sigmoid函数曾经是传统神经网络中使用频率最高的函数,其特点和优势很明显:可以将任意输入映射到[0,1]的值域范围,是偏于求导的平滑函数,

但是有三个缺点造成了现在几乎没有神经网络用其做激活函数:
1,容易过饱和,换句话说,sigmoid函数只有在坐标原点附近有明显的梯度变化,其两端变化非常缓慢,这会导致在反向传播过程中更新参数是梯度弥散的现象,并该现象随着网络层数的加深而变得更加严重。
2,函数输出并不是中心对称的(非恒等变换),即sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。
3,所使用的幂运算相对耗时。

二、tanh函数

在这里插入图片描述
tanh函数很像是sigmoid函数的放大版。在实际使用中要略微优于sigmoid函数,因为它解决的中心对称问题。

三,ReLU函数

在这里插入图片描述
ReLU函数目前是神经网络中最流行,使用最广泛的函数。

其本质上是一个取最大值函数,非全区间可导。
ReLU在正区间内解决了梯度消失问题,只需要判断输入是否大于0,所以计算速度非常快(解决了问题1,3)
但它的输出同样也不是中心对称的。与此之外还产生了一个新问题:神经元失活(dead relu problem)即某些神经元可以永远不会参与计算,原因有二:

参数初始化不合适,没能达到激活值,而且这些神经元在反向传播过程中也不会被激活。

学习速率太高,从而导致训练过程中参数更新过大。在不解决这些问题的情况下,网络中大概会有10-20%的神经元失活。

解决方案:可采用Xavier初始化;Adagrad自动调节学习速率

四, Leaky ReLU

在这里插入图片描述
在这里插入图片描述
理论和实践矛盾,这就很奇怪~这也是为什么relu更流行的原因

五,ELU指数线性单元函数&SELU函数

在这里插入图片描述

六,softmax函数

在这里插入图片描述
softmax相比于ELU和SELU更为常用一样,但依然不如relu


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

相关文章

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

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

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

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

ReLU、LReLU、PReLU、CReLU、ELU、SELU

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

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

分类目录:《机器学习中的数学》总目录 相关文章: 激活函数:基础知识 激活函数(一):Sigmoid函数 激活函数(二):双曲正切函数(Tanh函数) 激活函…

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

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

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() {//采用静态局部变量计算…

C语言:静态局部变量(static局部变量)

题目概述&#xff1a; 考察静态局部变量的值。 编程&#xff1a; #include<stdio.h> int main() { int f(int);//函数声明 int a2,i;//自动局部变量 for(i0;i<3;i) printf("%d\n",f(a)); return 0; } int f(int a) { auto int b0;//自动局部变量 static int…

C中静态局部变量与局部变量的区别

#include<stdio.h> #include<stdlib.h> void fun() { int a 12;//局部变量 static int b 22;//静态局部变量 a; b; printf("a:%d,b:%d\n",a,b); } int main(void) { fun(); fun(); fun(); system("pause&quo…