神经网络中的激活函数
文章目录
- 1. 什么是激活函数?
- 2. Sigmoid函数
- 3. Tanh函数
- 4. Relu函数
- 5. Softplus函数
- 6. Softmax函数
- 参考
1. 什么是激活函数?
激活函数: 就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
常见的激活函数包括
- Sigmoid
- TanHyperbolic(tanh)
- ReLu
- softplus函数
- softmax
2. Sigmoid函数
在逻辑回归中我们介绍过sigmoid函数,该函数是将取值为 (−∞,+∞) 的数映射到 (0,1) 之间。sigmoid函数的公式以及图形如下:
对sigmoid函数进行求导,得:
sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点:
(1)容易出现梯度消失(gradient vanishing)的现象:当激活函数接近饱和区时,变化太缓慢,导数接近0,根据后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。
(2)Sigmoid的输出不是0均值(zero-centered):这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。以 f=sigmoid(wx+b)为例, 假设输入均为正数(或负数),那么对w的导数总是正数(或负数),这样在反向传播过程中要么都往正方向更新,要么都往负方向更新,导致有一种捆绑效果,使得收敛缓慢。
(3)幂运算相对耗时。
3. Tanh函数
tanh函数相较于sigmoid函数要常见一些,该函数是将取值为 (−∞,+∞) 的数映射到 (−1,1) 之间,其公式与图形为:
Tanh函数的导数:
Tanh函数及其导数图像:
tanh:有数据中心化的效果,让均值接近于0,而不是0.5,这实际让下一层的学习更方便点。tanh几乎在所有场合都更优越,一个例外是输出层,因为y如果真实值为0或1,那么我们希望y帽介于0和1之间,而不是-1和1之间,这时sigmoid更适合。
Tanh和sigmoid的一个共同缺点:当z很大或很小时,那么这个函数的斜率会很小,很接近于0,这样会拖慢梯度下降法。
tanh函数将输入值压缩到 -1~1 的范围,因此它是0均值的,解决了Sigmoid函数的非zero-centered问题,但是它也存在梯度消失和幂运算的问题。
其实 tanh(x)=2sigmoid(2x)-1
4. Relu函数
ReLu函数的全称为Rectified Linear Units,称为修正线性单元,是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。
函数表达式为:
其导数为:
优点:
(1)SGD算法的收敛速度比 sigmoid 和 tanh 快;(梯度不会饱和,解决了梯度消失问题)
(2)计算复杂度低,不需要进行指数运算;
(3)适合用于后向传播。
缺点:
(1)ReLU的输出不是zero-centered;
(2)Dead ReLU Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大。 解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
(3)ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。
ReLu函数的其他变体
5. Softplus函数
softplus函数是平滑版的ReLu函数,其函数表达式如下:
其函数图像ReLu函数图像
可以看到,softplus可以看作是ReLu的平滑。根据神经科学家的相关研究,softplus和ReLu与脑神经元激活频率函数有神似的地方。也就是说,相比于早期的激活函数,softplus和ReLu更加接近脑神经元的激活模型,
而神经网络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪潮。
softplus和ReLu相比于Sigmoid的优点在哪里呢?
采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
需要注意的是:tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来,但有是,在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了。
还有一个东西要注意,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,否则激活后的值都会进入平坦区,使隐层的输出全部趋同,但是 ReLU 并不需要输入归一化来防止它们达到饱和。
6. Softmax函数
Softmax - 用于多分类神经网络输出
下面为大家解释一下为什么softmax是这种形式。我们知道指数函数的值域取值范围是零到正无穷。与概率取值相似的地方是它们都是非负实数。那么我们可以利用指数函数将多分类结果映射到零到正无穷。然后进行归一化处理,便得到了近似的概率。
总结一下softmax如何将多分类输出转换为概率:
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。
Sigmoid 和 Softmax 区别:
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"类别。
参考
神经网络常见的激活函数汇总
神经网络中常用的几种激活函数的理解
激活函数的比较和优缺点,sigmoid,tanh,relu,softmax
激活函数—Sigmoid、Tanh、ReLu、softplus、softmax
深度学习中激活函数的优缺点
非线性激励函数sigmoid,tanh,softplus,Relu
常用激活函数比较
神经网络中的激活函数相关推荐
- 基于Python实现神经网络中的激活函数图像绘制
神经网络中的激活函数图像绘制 在深度学习中,常用的激活函数主要有:Sigmoid函数,Tanh函数,ReLU函数等. 图像绘制效果: 图像绘制代码下载链接:激活函数绘制.py Sigmoid函数 该函 ...
- 深度学习:神经网络中的激活函数
http://blog.csdn.net/pipisorry/article/details/71157037 激活函数 神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数, ...
- 神经网络中的激活函数与损失函数深入理解推导softmax交叉熵
神经网络中的激活函数与损失函数&深入理解softmax交叉熵 前面在深度学习入门笔记1和深度学习入门笔记2中已经介绍了激活函数和损失函数,这里做一些补充,主要是介绍softmax交叉熵损失函数 ...
- 神经网络中的激活函数的比较
常见激活函数 神经网络中,常见的激活函数有以下几种: 1. sigmoid f(x)=11+e−xf(x) = \frac{1}{1+e^{-x}}f(x)=1+e−x1 f′(x)=f(x)(1− ...
- 神经网络激活函数对数函数_神经网络中的激活函数
神经网络激活函数对数函数 Activation function, as the name suggests, decides whether a neuron should be activated ...
- 神经网络中的激活函数介绍
转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...
- 从sigmoid到GELU——神经网络中的激活函数
目录 一.激活函数及其作用 二.激活函数的分类 1.sigmoid 2.tanh激活函数 3.RELU函数--Rectified Linear Unit--整流线性单元 4.Leaky ReLU 5. ...
- 神经网络中的激活函数的作用和选择
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是 ...
- 神经网络中常用激活函数总结
好久没写博客和学习笔记了,感觉最近总是没有学习状态呀,就很烦.虽说确实是有在看一些视频课程但是总是精神有力,每天过得也好快总感觉啥都没学时间就过去了阿西.还是得逼最近写写笔记才能不那么恍惚.前几天开始 ...
- 机器学习:神经网络中的激活函数
随着深度学习的兴起,神经网络也似乎成了所有计算机视觉任务的标配,大家除了研究各种各样的网络结构之外,还有研究优化方法的,以及激活函数的,这篇博客就对当前各种各样的激活函数做一个总结,分析其背后的性质. ...
最新文章
- 第一课.Linux系统的介绍与ubuntu虚拟机安装
- brew改源无效问题之一
- 学习方法之05六步法则,考上清华北大的路径
- flink的分桶策略BucketAssigner与hive的分区的对应关系
- 域名解析是否生效实时检测(阿里云DNS检测)
- online游戏服务器架构--网络架构
- python二值化特征_OpenCV-Python系列之轮廓特征高阶
- Wine DLL库安装工具winetricks
- vba移动文件_VBA代码如何移动文件,如何复制文件
- 通讯录管理系统 指针 链表 学生管理系统 人员管理系统
- html文字闪光效果,css实现字体闪烁效果
- 考研数学数学二有手就行系列之多元函数微分学(六)
- 使用python读取官方节假日文件,获取放假日期
- html 引入 BootCDN 上的库
- org.springframework.util.AntPathMatcher:URL 与 匹配规则
- 系统之美 作者:德内拉梅多斯
- QQ群排名优化到霸屏的策略怎么做?
- 【第24篇】YOLOR:多任务的统一网络
- Android ViewPager嵌套ViewPager+Fragment问题
- 通过keil使用汇编语言生成二进制文件,并使用vivado仿真cortexm0处理器
热门文章
- 用exp无法导出空表解决方法/用exp导出数据时表丢失原因
- opengl 关于glGenBuffers函数没有定义
- influxdb 配置
- Linux window查询网络端口
- java第五周课后作业
- Python进阶-----类的内置item属性方法
- 【求助】C# Charting控件 画散点图,当所有的点X=0时,X轴的位置画错了,代码如下...
- bat脚本:Java一键编译(Javac java)
- 【Qt点滴】UDP协议实例:简易广播实现
- [leetcode]Length of Last Word