常用激活函数的总结与比较
本文为 CS231n 中关于激活函数部分的笔记。
激活函数(Activation Function)能够把输入的特征保留并映射下来。
Sigmoid
Sigmoid 非线性函数将输入映射到 (0,1)(0,1) 之间。它的数学公式为:σ(x)=11+e−xσ(x)=11+e−x。
历史上,sigmoid 函数曾非常常用,然而现在它已经不太受欢迎,实际很少使用了,因为它主要有两个缺点:
1. 函数饱和使梯度消失
sigmoid 神经元在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个代价函数关于该单元输出的梯度相乘,结果也会接近为 0 。
这样,几乎就没有信号通过神经元传到权重再到数据了,因此这时梯度就对模型的更新没有任何贡献。
除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。
2. sigmoid 函数不是关于原点中心对称的
这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。
因为如果输入都是正数的话(如 f=wTx+bf=wTx+b 中每个元素都 x>0x>0 ),那么关于 ww 的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式 ff 而定),这将会导致梯度下降权重更新时出现 z 字型的下降。
当然,如果是按 batch 去训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。因此,该问题相对于上面的神经元饱和问题来说只是个小麻烦,没有那么严重。
tanh
tanh 函数同样存在饱和问题,但它的输出是零中心的,因此实际中 tanh 比 sigmoid 更受欢迎。
tanh 函数实际上是一个放大的 sigmoid 函数,数学关系为:tanh(x)=2σ(2x)−1tanh(x)=2σ(2x)−1
ReLU
ReLU 近些年来非常流行。它的数学公式为:f(x)=max(0,x)f(x)=max(0,x)。
ww 是二维时,ReLU 的效果如图:
ReLU 的优点:
- 相较于 sigmoid 和 tanh 函数,ReLU 对于 SGD 的收敛有巨大的加速作用(Alex Krizhevsky 指出有 6 倍之多)。有人认为这是由它的线性、非饱和的公式导致的。
- 相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的(指数)运算。
ReLU 的缺点是,它在训练时比较脆弱并且可能“死掉”。
举例来说:一个非常大的梯度经过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。
也就是说,这个 ReLU 单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。
合理设置学习率,会降低这种情况的发生概率。
Leaky ReLU
Leaky ReLU 是为解决“ ReLU 死亡”问题的尝试。
ReLU 中当 x<0 时,函数值为 0。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01。
有些研究者的论文指出这个激活函数表现很不错,但是其效果并不是很稳定。
Kaiming He 等人在 2015 年发布的论文 Delving Deep into Rectifiers 中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数来训练。然而该激活函数在在不同任务中表现的效果也没有特别清晰。
Maxout
Maxout 是对 ReLU 和 Leaky ReLU 的一般化归纳,它的函数公式是(二维时):max(wT1+b1,WT2+b2)max(w1T+b1,W2T+b2)。ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当 w1,b1=0w1,b1=0时)。
这样 Maxout 神经元就拥有 ReLU 单元的所有优点(线性和不饱和),而没有它的缺点(死亡的ReLU单元)。然而和 ReLU 对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。
如何选择激活函数?
通常来说,很少会把各种激活函数串起来在一个网络中使用的。
如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让你的网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
最好不要用 sigmoid,可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
参考资料
- http://cs231n.github.io/neural-networks-1/
- https://zhuanlan.zhihu.com/p/21462488
- http://blog.csdn.net/cyh_24/article/details/50593400
常用激活函数的总结与比较相关推荐
- 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)
目录 一.概念与定义 二.损失函数/代价函数(loss) 三.梯度下降法 二维w与loss: 三维w与loss: 四.常用激活函数 1.softmax激活函数 2.sigmoid激活函数 3.tanh ...
- 机器学习常用激活函数
机器学习常用激活函数 摘要: 激活函数就是神经网络输出端的一个节点,来连接两个神经网络.本文主要介绍激活函数的功能以及激活函数类型. 什么是激活函数? 激活函数就是神经网络输出端的一个节点,来连接两个 ...
- 一篇文章理解深度神经网络5个常用激活函数
一篇文章理解深度神经网络5个常用激活函数 1.Sigmoid 2.Tanh 3.ReLU 4.Leaky ReLU 5.Maxout 小结 1.Sigmoid Sigmoid非线性激活函数的数学表达式 ...
- Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...
- TensorFlow常用激活函数及其特点用法(6种)详解
每个神经元都必须有激活函数.它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个输出信号.你可以把它看作输入和输出之间的转换.使用适当的激活函数,可以将输出 ...
- NLP笔记:常用激活函数考察整理
NLP笔记:常用激活函数考察整理 0. 引言 1. 常用激活函数 1. sigmoid 2. softmax 3. relu系列 1. relu 2. leaky relu 3. elu 4. sel ...
- 常用激活函数--小白角度 TensorFlow 机器学习 神经网络 选取
常用激活函数--小白角度TensorFlow 机器学习 神经网络 选取 先简单介绍一下激活函数 常用激活函数review 1.阶跃函数 2.Sigmoid函数(logistic函数) 3.Hyperb ...
- 常用激活函数总结(深度学习)
前言 学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.在经过一段时间学习后,决定记录个人学习笔记. 一.激活函 ...
- CNN 基本部件-常用激活函数详解
背景知识 反向传播算法 梯度消失与梯度爆炸 激活函数的作用 七种常用激活函数 Sigmoid型函数 tanh(x)型函数 修正线性单元(ReLU) Leaky ReLU 参数化 ReLU 总结 参考资 ...
- 常用激活函数理解与总结
从左到右画sigmoid曲线,先是平的梯度消失--> zero-centered -->指数运算 引言 学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比 ...
最新文章
- 单点系统架构的可用性与性能优化
- 二、在应用中升级----网络部分
- LeetCode每日一题 416. 分割等和子集
- 副主任护师主要英语和计算机吗,有没有晋升副主任护师的
- 韩顺平 mysql sqlhelper类_(最全)韩顺平jsp购物车源代码(包含数据库)
- 在windows 2008 R2上无法运行vc 2015的程序,显示缺少api-ms-win-crt-string-|1-1-0.dll的解决
- c语言对称矩形的判定,江苏省扬州市仪征市2017年中考数学一模试卷(含解析).doc...
- 《东周列国志》第九十二回 赛举鼎秦武王绝胫 莽赴会楚怀王陷秦
- 当保险遇上AI,泰康保险集团智能化升级有秘籍
- php20以内的勾股数,[求助]编程求100以内的所有勾股数
- RMAN--obsolete 和 expired的区别
- Latex中的参考文献写法
- 解决安装PyMySQL一直停在Building wheels for collected package:cryptography, cffi, pycparser的问题...
- 扫盲:集线器、网桥、交换机、路由器、网关大解析
- 斯坦福21秋季:实用机器学习-李沐课程笔记
- app中我的页面头像及背景效果实现
- 【数量称谓】祖宗十八代
- CO Business Transaction-CO业务处理
- 微信URL Scheme码+长链接转短链接+短链接通过h5页面跳转到微信小程序
- [装机版]小路工作室GhostXP 2008贺岁版
热门文章
- 2,type-c,USB3.0/3.1,PD快充协议最详细的讲解;USB 3.0 Standard-A和Standard-B的引脚定义
- 爬虫 与反爬虫 及其应对措施
- 操作系统 死锁四个必要条件
- 命令行进入mysql
- Python文件中头部的 #!(shebang) 基本解释
- 虚拟机的安装及共享文件夹的创建
- orc表导致hiveserver2内存暴涨问题分析
- [高通平台]9008模式下如何读取MSMID和serial_number
- Java SortedMap接口总结 有序Map要实现的接口规范
- Anaconda安装问题