本文总结深度学习的损失函数及其优缺点。

激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性。常见的激活函数有sigmoid,tanh,ReLU等

1.sigmoid

Sigmoid 非线性函数将输入映射到 【0,1】之间。它的数学公式为:

历史上, sigmoid 函数曾非常常用,然而现在它已经不太受欢迎,实际很少使用了,因为它主要有两个缺点:

函数饱和使梯度消失

sigmoid 神经元在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个代价函数关于该单元输出的梯度相乘,结果也会接近为 0 。

这样,几乎就没有信号通过神经元传到权重再到数据了,因此这时梯度就对模型的更新没有任何贡献。

除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。

sigmoid 函数不是关于原点中心对称的

这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。

因为如果输入都是正数的话(如 x>0 中 ),那么关于 w的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式f(x)而定),这将会导致梯度下降权重更新时出现 z 字型的下降。

当然,如果是按 batch 去训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。因此,该问题相对于上面的神经元饱和问题来说只是个小麻烦,没有那么严重。

2.tanh

tanh 函数同样存在饱和问题,但它的输出是零中心的,因此实际中 tanh 比 sigmoid 更受欢迎。

tanh 函数实际上是一个放大的 sigmoid 函数,数学关系为:

在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,

3.Relu

近些年来非常流行。它的数学公式为:

ReLU 的效果如上图:

ReLU 的优点:

相较于 sigmoid 和 tanh 函数, ReLU 对于 SGD 的收敛有巨大的加速作用(Alex Krizhevsky 指出有 6 倍之多)。有人认为这是由它的线性、非饱和的公式导致的。

相比于 sigmoid/tanh , ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的(指数)运算、

ReLU 的缺点是,它在训练时比较脆弱并且**可能“死掉”**。

举例来说:一个非常大的梯度经过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0 。

也就是说,这个 ReLU 单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。

合理设置学习率,会降低这种情况的发生概率。

ReLU相比sigmoid和tanh的一个缺点是没有对上界设限.在实际使用中,可以设置一个上限,如ReLU6经验函数: f(x)=min(6,max(0,x))f(x)=min(6,max(0,x)).

4.Leaky ReLU

Leaky ReLU 是为解决“ ReLU 死亡”问题的尝试。

ReLU 中当 x<0 时,函数值为 0 。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01 。

有些研究者的论文指出这个激活函数表现很不错,但是其效果并不是很稳定。

5.随机纠正线性单元(RReLU)

“随机纠正线性单元”RReLU也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,aji是从一个均匀的分布U(I,u)中随机抽取的数值。形式上来说,我们能得到以下结果:

6.ELU

7.PRelu

PReLU(Parametric Rectified Linear Unit), 顾名思义:带参数的ReLU。二者的定义和区别如下图: 

如果ai=0,那么PReLU退化为ReLU;如果ai是一个很小的固定值(如ai=0.01),则PReLU退化为Leaky ReLU(LReLU)。 有实验证明,与ReLU相比,LReLU对最终的结果几乎没什么影响。

PReLU的几点说明

(1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同channels使用相同的ai时,参数就更少了。

(2) BP更新ai时,采用的是带动量的更新方式,如下:

8.SELU


经过该激活函数后使得样本分布自动归一化到0均值和单位方差(自归一化,保证训练过程中梯度不会爆炸或消失,效果比Batch Normalization 要好) 
其实就是ELU乘了个lambda,关键在于这个lambda是大于1的。以前relu,prelu,elu这些激活函数,都是在负半轴坡度平缓,这样在activation的方差过大的时候可以让它减小,防止了梯度爆炸,但是正半轴坡度简单的设成了1。而selu的正半轴大于1,在方差过小的的时候可以让它增大,同时防止了梯度消失。这样激活函数就有一个不动点,网络深了以后每一层的输出都是均值为0方差为1。

tensorflow中:tf.nn.selu(features, name=None)

9.Swish

Swish是Google在10月16号提出的一种新型激活函数,其原始公式为:f(x)=x * sigmod(x),变形Swish-B激活函数的公式则为f(x)=x * sigmod(b * x),其拥有不饱和,光滑,非单调性的特征,而Google在论文中的多项测试表明Swish以及Swish-B激活函数的性能即佳,在不同的数据集上都表现出了要优于当前最佳激活函数的性能.

参考地址:

https://www.cnblogs.com/ymjyqsx/p/6294021.html

https://blog.csdn.net/qq_23304241/article/details/80300149

https://www.colabug.com/3289623.html

激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish相关推荐

  1. [Pytorch 常用函数] 激活函数Relu, Leaky Relu

    修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数.它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为 ...

  2. 机器学习中的数学——激活函数(四):Leaky ReLU函数

    分类目录:<机器学习中的数学>总目录 相关文章: · 激活函数:基础知识 · 激活函数(一):Sigmoid函数 · 激活函数(二):双曲正切函数(Tanh函数) · 激活函数(三): 线 ...

  3. 激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

    神经网络中使用激活函数来加入非线性因素,提高模型的表达能力. ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softp ...

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

    文章目录 一.Tanh 二.Sigmoid 三.ReLU 四.Leaky ReLU 五.ELU 六.SiLU 七.Mish 本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被 ...

  5. 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)

    首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...

  6. 常用的激活函数汇总-Sigmoid, tanh, relu, elu

    激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...

  7. Python画Sigmoid、Relu、Softmax、Tanh、Leaky relu等函数(1)

    看鱼书有感,记录一下: 批处理的好处及小批量概念(2) Python(Numpy)实现均方差.交叉熵损失函数等(3) 纯Python实现:函数求导切线图.求偏导.梯度下降法(4) 纯Python实现反 ...

  8. 深度学习中的一些常见的激活函数集合(含公式与导数的推导)sigmoid, relu, leaky relu, elu, numpy实现

    文章目录 Sigmoid(x) 双曲正切 线性整流函数 rectified linear unit (ReLu) PReLU(Parametric Rectified Linear Unit) Lea ...

  9. Relu函数,sigmoid函数,leaky Relu

    Relu函数: y=max(0,x) 蓝色为Relu函数,红色曲线为Relu函数的导数. 优点: 1.在正区间内不会发生梯度消失问题, 2. 函数比较简单,求导计算复杂度较低. 3. 梯度能维持在不错 ...

最新文章

  1. C语言实现将彩色bmp图像转化为灰图、灰度图像反色
  2. ESFramework网络通信框架 4.0 性能测试
  3. 利用LSTM(长短期记忆网络)来处理脑电数据
  4. Java 线上问题排查神器 Arthas 快速上手与原理浅谈
  5. Linux 最常用命令
  6. .NET CoreCLR开发人员指南(上)
  7. 程序员们,节日快乐!
  8. 中国速度袋行业市场供需与战略研究报告
  9. NetofficeSystem协同办公系统今日发布
  10. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
  11. Oracle索引类型-参考
  12. w3school JavaScript笔记2 ——JavaScript HTML DOM
  13. 自己做量化交易软件(26)小白量化事件回测之MetaTrader5自动回测
  14. java new thread名字_Java的每个Thread都希望拥有自己的名称
  15. python pandas按照行数切分文件
  16. Microsoft 提供的 USB 驱动程序
  17. Xcode 8.0 Beta发布,详解Swift语言的重大变化
  18. 基于支付宝微信通知的一种个人收款回调方案
  19. 关于“打开数据库时出错: 到主机 的 TCP/IP 连接失败。”的解决方法
  20. numeric_limits

热门文章

  1. 计算机粘贴复制快捷键,详细教你使用电脑复制粘贴快捷键
  2. 思岚科技定位导航技术凸显 成为服务机器人企业首选品牌
  3. 用户故事地图,产品经理必须掌握的分析利器
  4. Self-supervised Graph Learning for Recommendation
  5. 秋招算法岗,面试复盘
  6. pc企业微信协议,企业微信HOOK接口
  7. 函数的极值与最大值最小值
  8. hbase数据库_实验目的
  9. 【Java核心技术大会 PPT分享】陈阳:深入理解 Java 虚拟机编译原理
  10. CI2451无线收发2.4Gsoc芯片集成无线收发器和 8 位 RISC(精简指令集)MCU