sigmoid函数_深度学习中激活函数总结
一、前言
前段时间通过引入新的激活函数Dice,带来了指标的提升,借着这个机会,今天总结下常用的一些激活函数。
激活函数在深度学习中起着非常重要的作用,本文主要介绍下常用的激活函数及其优缺点。主要分为以下几个部分:
- 引入激活函数的目的
- sigmoid激活函数带来的梯度消失和爆炸问题
- 常用激活函数对比
扩展:关于之前Dice激活函数的实现,可以参见下面的链接:
绝密伏击:深度学习中Batch Normalization和Dice激活函数zhuanlan.zhihu.com
二、引入激活函数的目的
先看一个只含一层隐藏层的神经网络,如图1所示。输入为
将(1),(2)联合起来可得:
从(3)可以看出,虽然加入了隐藏层,但是还是等效于单层的神经网络:权重为
上述的根本原因在于全连接只是对数据做仿射变换,而多个仿射变换的叠加仍然是一个放射变换。因此有必要引入非线性变换,这个非线性变换就是今天要讲的激活函数。
三、sigmoid激活函数带来的梯度消失和爆炸问题
为了解决前面的问题,后来提出了sigmoid激活函数。sigmoid函数可以将元素的值变换到0和1之间,定义如下:
sigmoid激活函数的导数为:
sigmoid激活函数虽然增强了模型的非线性表达能力,但是却带来了梯度消失和爆炸的问题,下面具体分析下是如何导致的。
3.1 sigmoid可能带来的梯度消失
图3是一个多层的神经网络,假设其损失函数为
其中
从(8)可以看出,
根据公式(5)可知
从公式(10)可以看出,随着反向传播链式求导,层数越多最后的梯度越小,最终导致梯度消失。
3.2 sigmoid可能带来的梯度爆炸
3.1节讨论了sigmoid可能会带来梯度消失,那么会不会导致梯度爆炸呢?这个还是有可能的,如果
备注:为了便于表示,后面的
因为
由于
因此
图4显示了公式(13)中的
因此仅仅在很窄的范围内才可能出现梯度爆炸。
根据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》论文中提出的一种激活函数,可以用来解决梯度消失的问题,其定义如下:
从公式(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定义如下:
Leaky-ReLU很好的解决了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相比,将
其中
4.4 Dice
Dice是Guorui Zhou等人在2018年《Deep Interest Network for Click-Through Rate Prediction》论文中提出的激活函数。Dice是对PRelu做了平滑,使得拐点不再是固定的0,而是依赖于数据的分布,定义如下:
4.5 RReLU
RReLU(Randomized Leaky ReLU)的首次提出是在Kaggle比赛NDSB中,也是Leaky-ReLU的一个变体。RReLU在训练的过程中,
其中:
公式(18)中的
在测试阶段,
扩展:
Bing Xu等人在2015年《Empirical Evaluation of Rectified Activations in Convolution Network》文章中关于ReLU,Leaky ReLU,PReLU,RReLU效果进行了详细的对比,可以参考下面的链接:
https://arxiv.org/pdf/1505.00853.pdfarxiv.org
五、总结
从最初的sigmoid到后面的Leaky ReLU、PReLU,再到近期的SELUs、GELUs,激活函数的改进从来没有中断过。激活函数不仅解决了深层神经网络的梯度消失和爆炸问题,同时对于模型的拟合能力和收敛速度起着至关重要的重用。因此了解激活函数的相关原理还是非常有必要的。
六、Reference
- https://ziyubiti.github.io/2016/11/06/gradvanish/
- 神经网络梯度消失和梯度爆炸及解决办法
- https://zhuanlan.zhihu.com/p/25631496
- 梯度消失和ReLU - heixialee - 博客园
sigmoid函数_深度学习中激活函数总结相关推荐
- 深度学习中激活函数的作用
0.从深度学习开始说起 今天检索多标签分本分类的文献时,遇到一个关于激活函数的疑惑: 如果有大牛看到,知道如何更好的理解这句话的含义,希望在评论里解惑! 由惑而生,所以我打算总结一下深度学习模型中常用 ...
- 差分隐私 深度学习_深度学习中的差异隐私
差分隐私 深度学习 I would like to thank Mr. Akshay Kulkarni for guiding me on my journey in publishing my fi ...
- nfa确定化 dfa最小化_深度学习中的优化:梯度下降,确定全局最优值或与之接近的局部最优值...
深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器. 一般而言,神经网络的整体性能取决于几个因素.通常最受关注的是网络架构,但这只是众多重要元素之一.还有一个常常 ...
- cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇
前言 在深度学习中的参数梯度推导(三)中篇里,我们总结了CNN的BP推导第一步:BP通过池化层时梯度的计算公式.本篇(下篇)则继续推导CNN相关的其他梯度计算公式. 注意:本文默认读者已具备深度学习上 ...
- eta 深度学习 参数_深度学习中的参数梯度推导(一)
必备的数学知识 矩阵微分与求导 前言 深度学习向来被很多人认为是"黑盒",因为似乎很多人都不清楚深度学习的运作方式,本系列<深度学习中的数学>的连载文章主要目的就是向大 ...
- gan 总结 数据增强_深度学习中的数据增强(下)
言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...
- softmax激活函数_深度学习中的激活函数,从softmax到sparsemax数学证明
softmax激活函数 The objective of this post is three-fold. The first part discusses the motivation behind ...
- 深度学习中激活函数的优缺点
在神经网络中,激活函数决定来自给定输入集的节点的输出,其中非线性激活函数允许网络复制复杂的非线性行为. 为什么要使用非线性激活函数? 答:如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函 ...
- nfa确定化 dfa最小化_深度学习中的不确定性
原文:What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? (NIPS 2017) 深度学习模型给出 ...
最新文章
- NetDevOps — ncclient
- mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器
- java中Comparable实现对象的比较
- web.xml中webAppRootKey
- 【英语学习】【English L06】U01 Breakfast L6 Make at home vs. eat out
- 马化腾加持开源,参与构建全球科技共同体
- 数据统计作业0429_因子分析/FA
- zabbix提示错误:zabbix server is not running: the information displayed may not be current
- Unity.Interception(AOP)
- FFT,NTT 专题
- 【计算机网络安全基础(第五版)袁津生 课后习题答案】
- PDF文档只能读,不能修改和复制怎么办?
- 对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序。每次迭代时,从输入数据中移除一个元素,并原地将其插入到已排好序的链表中。
- 【云IDE】取次花丛懒回顾
- 【计量经济学】SPSS——一元线性回归【方差分析、残差分析】
- 身份验证错误,指定的句柄无效
- 2020年中国滚刀行业产销及市场规模分析[图]
- SQL Server 中的身份认证讲解
- 8.12 纪中集训 Day12
- 关于.Net与J2EE的比较,到底用微软平台还是Java平台的问题
热门文章
- 唯美红色圣诞节背景素材,节日气氛尽显
- 传递情感贺卡海报,你知道怎么设计么?让设计更简单,从临摹PSD模板开始
- 干货素材|UI设计师需要了解的APP弹窗模板
- 常见的UI设计素材模板
- matlab imagesc参数设置,[转载]matlab 中imagesc的用法
- opengl 如何加阴影_零基础如何2个月上岗C++工程师(内附资料)
- html 为元素附空值,HTML空(void)元素有哪些?
- 什么是Intel LBR(上次分支记录),BTS(分支跟踪存储)和AET(体系结构事件跟踪)?
- Linux内存管理:为什么 Linux 需要虚拟内存?为什么 Linux 默认页大小是 4KB?
- 介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)