一、前言

前段时间通过引入新的激活函数Dice,带来了指标的提升,借着这个机会,今天总结下常用的一些激活函数。

激活函数在深度学习中起着非常重要的作用,本文主要介绍下常用的激活函数及其优缺点。主要分为以下几个部分:

  1. 引入激活函数的目的
  2. sigmoid激活函数带来的梯度消失和爆炸问题
  3. 常用激活函数对比

扩展:关于之前Dice激活函数的实现,可以参见下面的链接:

绝密伏击:深度学习中Batch Normalization和Dice激活函数​zhuanlan.zhihu.com

二、引入激活函数的目的

图1:带一层隐藏层的神经网络

先看一个只含一层隐藏层的神经网络,如图1所示。输入为

条样本
,隐藏层
的权重和偏置分别为
,输出层
的权重和偏置分别为
。输出层的计算为:

将(1),(2)联合起来可得:

从(3)可以看出,虽然加入了隐藏层,但是还是等效于单层的神经网络:权重为

,偏置为

上述的根本原因在于全连接只是对数据做仿射变换,而多个仿射变换的叠加仍然是一个放射变换。因此有必要引入非线性变换,这个非线性变换就是今天要讲的激活函数

三、sigmoid激活函数带来的梯度消失和爆炸问题

为了解决前面的问题,后来提出了sigmoid激活函数。sigmoid函数可以将元素的值变换到0和1之间,定义如下:

图2:sigmoid激活函数

sigmoid激活函数的导数为:

sigmoid激活函数虽然增强了模型的非线性表达能力,但是却带来了梯度消失和爆炸的问题,下面具体分析下是如何导致的。

3.1 sigmoid可能带来的梯度消失

图3:多层神经网络示意图

图3是一个多层的神经网络,假设其损失函数为

,前一层
和后一层
的关系可以表示如下:

其中

,则反向传播计算
的梯度为:

从(8)可以看出,

梯度的计算依赖
的计算方式如下:

根据公式(5)可知

,而网络权重一般会进行标准化,因此
通常会小于1,从而
,因此:

从公式(10)可以看出,随着反向传播链式求导,层数越多最后的梯度越小,最终导致梯度消失

3.2 sigmoid可能带来的梯度爆炸

3.1节讨论了sigmoid可能会带来梯度消失,那么会不会导致梯度爆炸呢?这个还是有可能的,如果

,即权重参数
比较大的时候,就会出现梯度爆炸。那么这个可能性到底有多大,下面具体分析下。

备注:为了便于表示,后面的

都取其中的一个元素,并简记为

因为

,因此必须
,才可能出现
。由
可得出
的取值范围为:

由于

,故公式(11)可以变换为:

因此

的数值变化范围为公式(12)中的右边-左边,即:
图4:梯度爆炸x的数值范围

图4显示了公式(13)中的

数值范围随
的变化,可以看到
的最大数值范围也仅仅为0.45,

因此仅仅在很窄的范围内才可能出现梯度爆炸

根据3.1和3.2节,可以得出以下结论:

  • sigmoid激活函数在深层神经网络中极大概率会引起梯度消失
  • sigmoid激活函数很小的概率会出现梯度爆炸

由于sigmoid的局限性,所以后来很多人又提出了一些改进的激活函数,比如:ReLU,Leaky-ReLU,PReLU,Dice,RReLU等。后面具体介绍下几个激活函数的区别。

四、常用激活函数对比

4.1 ReLU

ReLU是Krizhevsky、Hinton等人在2012年《ImageNet Classification with Deep Convolutional Neural Networks》论文中提出的一种激活函数,可以用来解决梯度消失的问题,其定义如下:

图5:ReLU激活函数

从公式(14)可以看出ReLU在正区间的导数为1,因此不会发生梯度消失。关于ReLU的缺点,可以参见下面的描述:

神经网络在训练的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。因为:ReLU的导数在

的时候是1,在
的时候是0。如果
,那么ReLU的输出是0,那么反向传播中梯度也是0,权重就不会被更新,导致神经元不再学习。

在实际训练中,如果学习率设置的太高,可能会发现网络中40%的神经元都会死掉,且在整个训练集中这些神经元都不会被激活。所以,设置一个合适的较小的学习率,会降低这种情况的发生。为了解决神经元节点死亡的情况,有人提出了Leaky-ReLU,PReLu,RReLU,ELU等激活函数。

总结一下ReLU的优缺点。

优点:

  • ReLU解决了梯度消失的问题
  • 由于ReLU线性特点,神经网络的计算和训练比sigmoid快很多

缺点:

  • ReLU可能会导致神经元死亡,权重无法更新。

4.2 Leaky-ReLU

Leaky-ReLU是Andrew L. Maas等人在2013年《Rectifier Nonlinearities Improve Neural Network Acoustic Models(Leaky ReLU)》论文中提出的一种激活函数。由于ReLU将所有负数部分的值设为0,从而造成神经元的死亡。而Leaky-ReLU是对负值给与一个非零的斜率,从而避免神经元死亡的情况。Leaky-ReLU定义如下:

图6:Leaky-ReLU激活函数

Leaky-ReLU很好的解决了ReLU中神经元死亡的问题。因为Leaky-ReLU保留了

时的梯度,在
时,不会出现神经元死亡的问题。总结一下Leaky-ReLU的优缺点。

优点:

  • Leaky-ReLU解决了ReLU中神经元死亡的问题
  • 由于Leaky-ReLU线性特点,神经网络的计算和训练比sigmoid快很多

缺点:

  • Leaky-ReLU中的超参

    需要人工调整

4.3 PReLU

PReLU是Kaiming He等人在2015年《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》论文中提出的激活函数。和Leaky-ReLU相比,将

变成可训练的参数,不再依赖于人工调整。PReLU的定义如下:

其中

是可训练的参数。

4.4 Dice

Dice是Guorui Zhou等人在2018年《Deep Interest Network for Click-Through Rate Prediction》论文中提出的激活函数。Dice是对PRelu做了平滑,使得拐点不再是固定的0,而是依赖于数据的分布,定义如下:

图7:Dice激活函数和PReLU的对比

4.5 RReLU

RReLU(Randomized Leaky ReLU)的首次提出是在Kaggle比赛NDSB中,也是Leaky-ReLU的一个变体。RReLU在训练的过程中,

是从均匀分布
中随机选取的,RReLU在训练过程中的定义如下:

其中:

公式(18)中的

表示第
个样本的第
维输入。
图8:RReLU激活函数

在测试阶段,

取值为训练阶段所有
的平均值,即:
。NDSB竞赛冠军设置的均匀分布为:

扩展:

Bing Xu等人在2015年《Empirical Evaluation of Rectified Activations in Convolution Network》文章中关于ReLU,Leaky ReLU,PReLU,RReLU效果进行了详细的对比,可以参考下面的链接:

https://arxiv.org/pdf/1505.00853.pdf​arxiv.org

五、总结

从最初的sigmoid到后面的Leaky ReLU、PReLU,再到近期的SELUs、GELUs,激活函数的改进从来没有中断过。激活函数不仅解决了深层神经网络的梯度消失和爆炸问题,同时对于模型的拟合能力和收敛速度起着至关重要的重用。因此了解激活函数的相关原理还是非常有必要的。

六、Reference

  1. https://ziyubiti.github.io/2016/11/06/gradvanish/
  2. 神经网络梯度消失和梯度爆炸及解决办法
  3. https://zhuanlan.zhihu.com/p/25631496
  4. 梯度消失和ReLU - heixialee - 博客园

sigmoid函数_深度学习中激活函数总结相关推荐

  1. 深度学习中激活函数的作用

    0.从深度学习开始说起 今天检索多标签分本分类的文献时,遇到一个关于激活函数的疑惑: 如果有大牛看到,知道如何更好的理解这句话的含义,希望在评论里解惑! 由惑而生,所以我打算总结一下深度学习模型中常用 ...

  2. 差分隐私 深度学习_深度学习中的差异隐私

    差分隐私 深度学习 I would like to thank Mr. Akshay Kulkarni for guiding me on my journey in publishing my fi ...

  3. nfa确定化 dfa最小化_深度学习中的优化:梯度下降,确定全局最优值或与之接近的局部最优值...

    深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器. 一般而言,神经网络的整体性能取决于几个因素.通常最受关注的是网络架构,但这只是众多重要元素之一.还有一个常常 ...

  4. cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇

    前言 在深度学习中的参数梯度推导(三)中篇里,我们总结了CNN的BP推导第一步:BP通过池化层时梯度的计算公式.本篇(下篇)则继续推导CNN相关的其他梯度计算公式. 注意:本文默认读者已具备深度学习上 ...

  5. eta 深度学习 参数_深度学习中的参数梯度推导(一)

    必备的数学知识 矩阵微分与求导 前言 深度学习向来被很多人认为是"黑盒",因为似乎很多人都不清楚深度学习的运作方式,本系列<深度学习中的数学>的连载文章主要目的就是向大 ...

  6. gan 总结 数据增强_深度学习中的数据增强(下)

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  7. softmax激活函数_深度学习中的激活函数,从softmax到sparsemax数学证明

    softmax激活函数 The objective of this post is three-fold. The first part discusses the motivation behind ...

  8. 深度学习中激活函数的优缺点

    在神经网络中,激活函数决定来自给定输入集的节点的输出,其中非线性激活函数允许网络复制复杂的非线性行为. 为什么要使用非线性激活函数? 答:如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函 ...

  9. nfa确定化 dfa最小化_深度学习中的不确定性

    原文:What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? (NIPS 2017) 深度学习模型给出 ...

最新文章

  1. NetDevOps — ncclient
  2. mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器
  3. java中Comparable实现对象的比较
  4. web.xml中webAppRootKey
  5. 【英语学习】【English L06】U01 Breakfast L6 Make at home vs. eat out
  6. 马化腾加持开源,参与构建全球科技共同体
  7. 数据统计作业0429_因子分析/FA
  8. zabbix提示错误:zabbix server is not running: the information displayed may not be current
  9. Unity.Interception(AOP)
  10. FFT,NTT 专题
  11. 【计算机网络安全基础(第五版)袁津生 课后习题答案】
  12. PDF文档只能读,不能修改和复制怎么办?
  13. 对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序。每次迭代时,从输入数据中移除一个元素,并原地将其插入到已排好序的链表中。
  14. 【云IDE】取次花丛懒回顾
  15. 【计量经济学】SPSS——一元线性回归【方差分析、残差分析】
  16. 身份验证错误,指定的句柄无效
  17. 2020年中国滚刀行业产销及市场规模分析[图]
  18. SQL Server 中的身份认证讲解
  19. 8.12 纪中集训 Day12
  20. 关于.Net与J2EE的比较,到底用微软平台还是Java平台的问题

热门文章

  1. 唯美红色圣诞节背景素材,节日气氛尽显
  2. 传递情感贺卡海报,你知道怎么设计么?让设计更简单,从临摹PSD模板开始
  3. 干货素材|UI设计师需要了解的APP弹窗模板
  4. 常见的UI设计素材模板
  5. matlab imagesc参数设置,[转载]matlab 中imagesc的用法
  6. opengl 如何加阴影_零基础如何2个月上岗C++工程师(内附资料)
  7. html 为元素附空值,HTML空(void)元素有哪些?
  8. 什么是Intel LBR(上次分支记录),BTS(分支跟踪存储)和AET(体系结构事件跟踪)?
  9. Linux内存管理:为什么 Linux 需要虚拟内存?为什么 Linux 默认页大小是 4KB?
  10. 介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)