激活函数的比较和优缺点,sigmoid,tanh,relu,softmax
1、什么是激活函数
2、为什么要用
3、都有什么激活函数
4、sigmoid,Relu,softmax
1. 什么是激活函数
如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。
2. 为什么要用
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
3. 都有什么激活函数
(1) sigmoid函数
公式:
曲线:
导数:
sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
在特征相差比较复杂或是相差不是特别大时效果比较好。
sigmoid缺点:
- 激活函数计算量大,反向传播求误差梯度时,求导涉及除法
- 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
- Sigmoids函数饱和且kill掉梯度。
- Sigmoids函数收敛缓慢。
下面解释为何会出现梯度消失:
反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:
sigmoid 原函数及导数图形如下:
由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象
(2) Tanh函数
公式
曲线
也称为双切正切函数,取值范围为[-1,1]。
tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。
(3) ReLU
Rectified Linear Unit(ReLU) - 用于隐层神经元输出
公式
曲线
RELU特点:
输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入
ReLU 的优点:
Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
(4) softmax函数
Softmax - 用于多分类神经网络输出
公式
举个例子来看公式的意思:
就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。
4. sigmoid ,ReLU, softmax 的比较
Sigmoid 和 ReLU 比较:
sigmoid 的梯度消失问题,ReLU 的导数就不存在这样的问题,它的导数表达式如下:
曲线如图
对比sigmoid类函数主要变化是:
1)单侧抑制
2)相对宽阔的兴奋边界
3)稀疏激活性。
Sigmoid 和 Softmax 区别:
softmax is a generalization of logistic function that “squashes”(maps) a K-dimensional vector z of arbitrary real values to a K-dimensional vector σ(z) of real values in the range (0, 1) that add up to 1.
sigmoid将一个real value映射到(0,1)的区间,用来做二分类。
而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。
二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题
softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:
利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:
最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为
另一个类别概率的为
这与 logistic回归是一致的。
softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。
5. 如何选择
选择的时候,就是根据各个函数的优缺点来配置,例如:
如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout.
激活函数的比较和优缺点,sigmoid,tanh,relu,softmax相关推荐
- 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算
1. 三种激活函数--Sigmoid, Tanh, ReLU 1.1 Sigmoid 1.1.1 公式 S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} ...
- 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish
本文总结深度学习的损失函数及其优缺点. 激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性.常见的激活函数有sigmoid,tanh,ReLU等 1.sigmoid Sigmoid 非线性 ...
- 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)
首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...
- 常用的激活函数汇总-Sigmoid, tanh, relu, elu
激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...
- 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU
①激活函数:主要通过加入非线性因素,你不线性模型表达能力不足的缺陷,因为神经网络中的数学基础是处处可微分的函数,故要求激活函数也应该保证数据的输入与输出是可微分. ②激活函数可以分为饱和激活函数与不饱 ...
- 常见激活函数持续更新)sigmoid Tanh Relu Leaky-ReLU RReLU
激活函数是来向神经网络中引入非线性因素的,通过激活函数,神经网络就可以拟合各种曲线. sigmoid 公式: 函数图像: Sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范 ...
- 激活函数--Sigmoid,tanh,RELU,RELU6,Mish,Leaky ReLU等
激活函数 目前自己使用比较多的激活函数RELU, RELU6; LeakyReLU; SELU; Mish :激活函数看:计算量:准确率: 大多数激活函数pytorch里有已经包装好了: Non-li ...
- 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)
激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题 激活函数通常有以下性质 – 非线性 – 可微性 – 单调性 –
- 激活函数(阶跃,sigmoid,relu,恒等,softmax)
一般说"感知机"指的是"朴素感知机",即使用阶跃函数为激活函数的单层感知机: 而"多层感知机"就是指神经网络,即使用sigmoid函数等平滑 ...
- 【学习经验分享NO.16】超全代码-python画Sigmoid,ReLU,Tanh等十多种激活函数曲线及其梯度曲线(持续更新)
文章目录 前言 1. Sigmoid 2. tanh 3. ReLU 4. Leaky ReLU 5. ELU 6.PReLU 7. Softmax 8. Swish 9. Maxout 10. So ...
最新文章
- 命名实体识别的三中标注方法BIO,BIOES,BMES
- asp.net html5 异步,asp.net core 系列 5 项目实战之:NetCore 的 async 和 await(参考自:Microsoft教程)...
- 反编译apk文件教程(查看java代码篇)
- DataTables提示:DataTables warning: table id=queueInfo_table - Requested unknown parameter 'type' for r
- java rhino 运行 js_Mozilla Rhino :如何从Java调用JS函数
- 关于解决Permission is only granted to system apps
- vmware 克隆centos 6.4网卡不识别
- 洛谷P3642 [APIO2016]烟火表演
- kafka权威指南-总结
- 三种交换方式:电路交换、分组交换、报文交换
- 打通Linux内存管理任督二脉
- c语言lookup函数怎么用,lookup函数的使用方法,lookup函数怎么用?
- 2022智源大会议程公开 | 预训练大模型论坛
- 微信小游戏制作学习笔记
- 神经网络可以解决的问题,人工神经网络通过调整
- 光E电做好个人理财规划理财如此简单
- 像素级分层语义图像分割
- 计算机辅助翻译技术的好处,计算机辅助翻译原理与实践
- Matlab学习1.0
- matlab常用指令