深度学习常用激活函数

来源:互联网 发布:淘宝德国啤酒杀人酒 编辑:程序博客网 时间:2024/05/18 06:04

在感知器模型、神经网络模型、深度学习模型中均会看见激活函数的声影。激活函数又被称为转移函数、激励函数、传输函数或限幅函数,其作用就是将可能的无限域变换到一指定的有限范围内输出,这类似于生物神经元具有的非线性转移特性。

这里写图片描述

常用的激活函数有:线性函数、斜坡函数、阶跃函数、符号函数、Sigmoid函数、双曲正切函数、Softplus函数、Softsign函数、Relu函数及其变形、Maxout函数等。

线性函数

线性函数是最简单的激活函数:

y=F(x)=kx.

其中y为输出值,x为输入信号的加权和,k是一个常数,表示直线的斜率。

这里写图片描述

在深度学习模型中,线性函数几乎不被用到。因为其体现不出深度学习模型的价值,如假定深度学习模型有m层,则最终的输出为y=kmkm1...k1x,其等价于单层的线性模型y=kxk=kmkm1...k1)的输出。

斜坡函数

斜坡函数的定义如下所示:

y=F(x)=r,x,r,xr|x|<rxr

rr分别是处理单元的最大值和最小值,称为饱和值,一般|r|=1

这里写图片描述

阶跃函数

阶跃函数属于硬限幅函数的一种:

y=F(x)={1,0,x>0x0

这里写图片描述

符号函数

符号函数也是属于硬限幅函数的一种,其是根据输入变量的正负情况决定输出,若输入变量为正,则输出1;若输入变量为负,则输出-1;输入变量为0时可为1或-1:

y=F(x)={1,1,x>0x0

这里写图片描述

注:硬限幅函数虽说简单直观,但在深度学习中,很多时候将其应用在隐藏层意义不大,还会适得其反,因此其主要被应用在输出层。

Sigmoid函数

Sigmoid函数为S型函数的一种,函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,并且求导容易(因深度学习在更新参数时,常采用梯度下降法,此时需要对激活函数求导)。但由于其软饱和性,当|x|1时,y趋于0或1,导致其导数无限趋于0,容易产生梯度消失,此时会使训练出现问题。并且其输出并不是以0为中心的。

y=F(x)=11+ex.

这里写图片描述

注: Sigmoid函数的导数为F(x)=F(x)(1F(x))

双曲正切函数

双曲正切函数(tanh函数)也是S型函数的一种,Sigmoid函数存在的问题它基本上也都存在,不过相对于Sigmoid函数,它是原点对称的。而且在0周围,曲线变化趋势更陡,因此在训练过程中,权重每次更新的步长更大,能够更快地收敛到最优值(也可能是局部最优)。并且当s=0时有y=0,即同时具有双级输出。当要求输出(-1 1)范围的信号时,它常被采用。

y=F(x)=exexex+ex.

这里写图片描述

注: tanh函数的导数为F(x)=(1F(x))2

Softplus函数

Softplus被定义为:

y=F(x)=log(1+ex).

这里写图片描述

Softsign函数

Softsign函数被被定义为:

y=F(x)=x1+|x|.

这里写图片描述

Relu函数及其变形

ReLU是最近几年非常受欢迎的激活函数。虽说Sigmoid和tanh效果不错,但是很容易出现梯度消失现象–当输入|x|较大时,梯度变得非常小,从而导致SGD收敛速度下降或者无法收敛。ReLU函数被定义为:

y=F(x)=max{0,x}.

这里写图片描述

不过ReLU也不是十全十美的,观察其定义便可以发现在x>0时,梯度恒为1,可以保证稳定的下降速度;可当x0时,梯度却恒为0。虽说这样的特性能强化神经网络的稀疏表达能力,但随着训练的进行,可能会出现神经元不可逆转的死亡,权重从此以后便无法更新。

为了缓解上面的问题,ReLU的变形LReLU、PReLU与RReLU应运而生。其基本思想均是,当x0时不再是恒为0输出,而是为其乘上一个比较小的系数α,因此激活函数的定义变成:

y=F(x)=max{αx,x}.

在LReLU中,α固定为非常小的值。α的引入虽说可以避免梯度消失问题,但如何选择合适的α也是一件非常头疼的事情。通常都是通过先验知识人工赋值的。但有人观察到,损失函数对α的导数是可以求得的,因此可以将它作为一个参数进行训练,如同用梯度下降法训练各个层之间的权重。于是自适应PReLU方法被提出。

这里写图片描述

RReLU是LReLU的“随机”版本–α是随机的。核心思想就是在训练过程中,α是从一个高斯分布U(l,u)中随机生成的(αU(l,u),l<u,l,u[0,1]),然后在测试过程中进行修正。

Maxout函数

Maxout函数的定义如下:

y=F(x)=maxj[1,k]zj.

相当于在每个输出神经元前面隐藏地又多了一层。这一层有k个神经元,此时Maxout网络的输出为k个“隐隐层”神经元中的最大值。公式中zj的计算公式为:
zj=Wjx+wj0.

如果设置Maxout的参数k=5,Maxout层就如下所示:

这里写图片描述

上面左图显示的是传统的激活策略,采用Maxout的时候,会发现参数个数成k倍增加。因为本来在第i层到第i+1层,单个输出神经元只对应一组参数,但现在却需要对此神经元同时训练k组参数,然后选择激活值最大的作为激活值。也有人在看到“隐隐层”的输入-输出映射关系时,会疑惑Maxout似乎等价于线性激活函数,其实不然,因为在激发函数中有了max操作,所以整个Maxout网络其实是一种非线性的变换。

Maxout的拟合能力是非常强的,已有证明表明两层Maxout可以拟合任意的的凸函数。其实这块很好理解,首先是任意的凸函数都可以由分段线性函数以任意精度拟合,而Maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层”节点也是线性的,所以Maxout激活函数并不是一个固定的函数,它是一个分段线性函数。

简单总结一下

其实激活函数的主要作用就是将输入进行线性或非线性映射,对于其范围没有限制,上面介绍的只是一些常见的,其他的如sinxarctanx等也都可以。为什么在训练深度学习模型时常用ReLU、Sigmoid、tanh等函数,主要是在深度学习训练过程中,不宜使用过度复杂的函数,因为在参数优化时会增加求导及计算成本。

具体哪种激活函数最优?目前还不存在定论。一般需要综合考虑各个激活函数的优缺点,再结合自己的实际情况选择到底使用哪个。并且在一个模型中,不同层可以选定不同的激活函数,如第一层选用ReLU函数、第二次选用Sigmoid函数、……、输出层选用线性函数。

参考资料

  1. http://blog.csdn.net/hjimce/article/details/50414467 深度学习(二十三)Maxout网络学习
  2. http://www.cnblogs.com/rgvb178/p/6055213.html 浅谈深度学习中的激活函数
  3. https://item.jd.com/12128543.html 《深度学习》[美] Ian,Goodfellow,[加] Yoshua,Bengio,[加] Aaron Courville著
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 itunes刷机失败怎么办 钻石外汇跑路怎么办 华为p9音质不好怎么办 蝰蛇音效不处理怎么办 停机错过的短信怎么办 手机卡丢了信息怎么办 手机qq消息延迟怎么办 手机无法注册qq怎么办 邮箱发ppt打不开怎么办 263邮箱网页打不开怎么办 电脑网页打不开邮箱怎么办 OPPO邮件卸载了怎么办 刘海扎起来了怎么办 车子过户行驶证怎么办 车辆过户登记证怎么办 当泥石流时应该怎么办 无法接通激活服务器怎么办 金蝶提示服务器怎么办 怎么办word发到qq邮箱 iphone邮箱账户错误怎么办 mac邮箱账户错误怎么办 速腾邮箱打不开怎么办 附近功能已屏蔽怎么办 网易支付被冻结怎么办 华为账号服务器繁忙怎么办? 电脑服务器删了怎么办 感觉自己没排卵怎么办 淘宝卖家骂人怎么办 淘宝遇到恶意买家怎么办 起诉不知道地址怎么办 不知道被告地址怎么办 被报复收到冥币怎么办 划伤伤口肿了怎么办 小孩跳舞不肯跳怎么办 买的豆沙馅太干怎么办 买的豆沙馅太甜怎么办 卷筒发型不会做怎么办 变频器stop灯亮怎么办 增压泵频繁启停怎么办 大理石地面没铺平怎么办 瓷砖拼花压平机跳匝怎么办