首页-沐鸣娱乐-官方注册站

全国加盟咨询热线:

400-123-4567

当前位置: 首页 > 沐鸣资讯 > 行业动态

在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗?

文章作者:佚名 浏览次数:发表时间:2024-04-15 12:32:05
在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗?啥时选sigmoid,选tanh呢?

讨论这两个函数本身的话,除了平移和拉伸以外,本质上没区别。

但是不知道激活函数对这两个操作是否敏感

bengio deep learning书6.3.2节:

When a sigmoidal activation function must be used, the tanh activation function typically performs better than the logistic sigmoid It resembles the identity function more closely.

大意是tanh更接近y=x,所以比sigmoid好。后面还有一句解释,符号太多,大意是tanh过原点,而sigmoid不过,而且因为tanh在原点附近与y=x函数形式相近,所以当激活值较低时,可以直接进行矩阵运算,训练相对容易。

这个问题之前我也没想太清楚,看了斯坦福 cs231n 的课程后,稍稍领会了一些,在这里交流下:


从数学上看,这两个函数可以通过线性变化等价,唯一的区别在于值域是 (0,1) 和 (-1, 1)。

作为激活函数,都存在两端梯度弥散、计算量大的问题,sigmoid函数因为和生物上的神经元信号刺激的 firing rate 长得像,一度比较流行。。。

但是,作为非中心对称的激活函数,sigmoid有个问题:输出总是正数!!!

这意味着,神经网络的隐层每个节点的输出(activation)总是正数(注:bias可以看做activation为+1),会导致什么问题?看下图(请忽略粗糙程度 ):


其中因为激活函数使用 sigmoid, a1>0, a2>0,对上图应用链式法则求 w1、w2偏导:


得出结论,w1、w2的梯度方向均取决于同一个值,意味着,(w1,w2)梯度必须在第一和第三象限方向移动,如果生不逢时,初始值没那么幸运,优化路径容易出现zigzag现象,汇总到 cs231 的一张ppt里,就是这样:




最后,如果还想了解更多,可以看看视频:斯坦福2017季CS231n深度视觉识别课程视频(by Fei-Fei Li, Justin Johnson, Serena Yeung)(英文字幕)

在比较sigmoid和tanh函数之前,先将两个函数画在下面:

从上面的图看到tanh函数像是伸缩过的sigmoid函数然后向下平移了一格,确实就是这样,因为它们的关系就是线性关系,即

tanh(x)=\\frac{1-e^{-2x}}{1+e^{-2x}}=2(\\frac{1}{1+e^{-2x}})-1=2sigmoid(2x)-1

从公式看出,其实tanh函数就是sigmoid沿x轴缩小一倍,沿y轴伸展一倍,然后平移一格得到的,所以它们注定有很多相似点。

1.有饱和区,在输入较大或较小的地方,梯度变为0,神经元无法更新

2.都有指数运算,运算量很大

以上主要是两者相似的地方,但是两者也存在不同之处。

首先,提到激活函数,经常会提到是否是以零为中心的,如图所示,我们看出tanh函数是以零为中心的,sigmoid函数则不是,那么是否以零为中心对训练有什么影响呢?

如果激活函数为sigmoid时(不以零为中心),那么输出的值大于0,那么根据链式法则,后向传播跨层求w的局部梯度如下式:

\\frac{d_a}{d_w}=\\frac{d_a}{d_h}\\frac{d_h}{d_w}=a(1-a)*x

其中a=sigmoid(h) ,h=wxa*(1-a)>0 ,因此上式的梯度主要取决于x的符号,而x在输入层可能有正有负,但是在隐藏层中经过sigmoid激活函数后全为正数,因此,隐藏层w的更新要么全部往负向走,要么全部正向走(取决于最后一层\\frac{d_{loss}}{d_y} 传递上来的值),假如权重为二维,那么全为负的和全为正的权重相加分布在一三象限,因此会出现zigzag现象,导致收敛速度缓慢。如下图所示:

因此,以零为中心的激活函数不会出现zigzag现象,因此相对来说收敛速度会变快。

这篇博客说的比较好,直接拿了过来

1.首先尝试ReLU,速度快,但小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元

2.如果ReLU效果欠佳,尝试 Leaky ReLU、PReLU 、Maxout 或者 ELU函数

3.sigmoid、tanh 常应用在RNN(LSTM、注意力机制等),作为门控或者概率值

4.很少会把各种激活函数串起来在一个网络中使用

5.在ResNet 50上测试,同等条件下,性能对比 ReLU > RReLU > SELU(1.0) >ELU(1.0)=LeakyReLu(0.1) > LeakyReLu(0.2) > PReLU

参考内容

1.cs231n课程

2.blog.csdn.net/WJ_MeiMei

完整的各种常见激活函数介绍详见 深入理解深度学习中常见激活函数

sigmoid激活函数被广泛使用,和生物神经元的激活逻辑最接近,其定义如式子(4)所示,函数图像如图3所示。

f(x)=\\frac{1}{1+e^{-x}}\	ag{4}

图3 sigmoid函数

sigmoid函数的特点明显:(1) 连续光滑、严格单调;(2) 输出范围为(0,1),以(0, 0.5)为对称中心;(3) 当输入趋于负无穷时,输出趋近于0,当输入趋于正无穷时,输出趋近于1;(4) 输入在0附近时,输出变化趋势明显,输入离0越远,变化趋势越平缓且逐渐趋于不变。

根据sigmoid激活函数的特点,可以得到对应的优缺点。其优点包括:(1) 输出范围为(0,1),适合作为概率的使用;(2) 求导方便,如式子(5)所示,不需要额外的计算量。

f^{'}(x)=f(x)(1-f(x))=-(f(x)-\\frac{1}{2})^2+ \\frac{1}{4}\\in (0, \\frac{1}{4}]\	ag{5}

其缺点包括:(1) 当输入离0较远时,输出变化非常平缓,容易陷入梯度饱和状态,导致梯度消失问题;(2) 以(0, 0.5)为对称中心,原点不对称,容易改变输出的数据分布;(3) 导数取值范围为(0, 0.25](推导过程见式子(5)),连乘后梯度呈指数级减小,所以当网络加深时,浅层网络梯度容易出现梯度消失,详细原因见推导1;(4) 输出总是正数,使反向传播时参数w的梯度全正或全负,梯度下降出现zigzag形状,导致网络收速度慢,详细原因见分析1;(5) 计算包括指数项,耗时多。




推导1 sigmoid激活函数梯度消失问题

根据梯度反向传播式子(2.2)有 \\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}}=\\frac{\\partial{L}}{\\partial{\\mathbf y^{(i+1)}}}f^{'}(\\mathbf z^{(i+1)}) \\mathbf w^{(i+1)} ,而根据sigmoid的求导式子(5)有 f^{'}(x) \\leq \\frac{1}{4} ,w一般会进行标准化,因此w通常小于1,所以得到 |\\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}}| \\leq  \\frac{1}{4}|\\frac{\\partial{L}}{\\partial{\\mathbf y^{(i+1)}}}| ,可以看出,损失对y的梯度随着层数的增加按照每层1/4的大小缩小,当深度较深时,损失对y的梯度容易变得很小甚至消失。

根据式子(2.1)有 \\frac{\\partial{L}}{\\partial{\\mathbf w^{(i)}}}=\\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}}f^{'}(\\mathbf z^{(i)}) \\mathbf y^{(i-1)} ,参数w的梯度依赖于y的梯度,当损失对y的梯度消失时,参数w的梯度也随之消失,从而造成梯度消失问题。


分析1 sigmoid激活函数zigzag现象

1 参数w的梯度方向特点

参数w的梯度为 \\frac{\\partial{L}}{\\partial{\\mathbf w^{(i)}}}=\\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}}f^{'}(\\mathbf z^{(i)}) \\mathbf y^{(i-1)} ,由于sigmoid的导数  f^{'} 恒为正,y为上一层隐层经过sigmoid的输出,同样恒为正,因此参数w的梯度方向取决于 \\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}} 的梯度方向,而对同一层的所有参数w而言, \\frac{\\partial{L}}{\\partial{\\mathbf y^{(i)}}} 是相同的,所以同一层的参数w在更新时要么同时增大,要么同时减小,没有自己独立的正负方向。

2 为什么参数的梯度方向一致容易造成zigzag现象

当所有梯度同为正或者负时,参数在梯度更新时容易出现zigzag现象。zigzag现象如图4所示,不妨假设一共两个参数, w_0w_1 ,紫色点为参数的最优解,蓝色箭头表示梯度最优方向,红色箭头表示实际梯度更新方向。由于参数的梯度方向一致,要么同正,要么同负,因此更新方向只能为第三象限角度或第一象限角度,而梯度的最优方向为第四象限角度,也就是参数 w_0 要向着变小的方向, w_1 要向着变大的方向,在这种情况下,每更新一次梯度,不管是同时变小(第三象限角度)还是同时变大(第四象限角度),总是一个参数更接近最优状态,另一个参数远离最优状态,因此为了使参数尽快收敛到最优状态,出现交替向最优状态更新的现象,也就是zigzag现象。

图4 sigmoid激活函数zigzag现象

sigmoid函数在什么情况下会出现zigzag现象呢(有兴趣的朋友可以先思考一下再看后面的内容)。从上面的分析可以看出,当梯度更新的最优方向不满足所有参数梯度正负向一致时,也就是有的参数梯度正向,有的参数梯度负向,容易出现zigzag现象。

两个参数时,出现zigzag现象的梯度更新最优方向为图4中的绿色背景部分,即第二象限和第四象限。在深度学习中,网络参数非常巨大,形成高维的空间,梯度更新的最优方向非常容易出现不同参数的梯度正负向不一致的情况,也就更容易造成zigzag现象。

抛开激活函数,当参数量纲差异大时,也容易造成zigzag现象,其中的原因和sigmoid函数造成的zigzag现象,是相通的。


tanh激活函数如式子(6)所示,函数图像如图5所示。

f(x)=\\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}\	ag{6}

图5 tanh函数

tanh函数形状和sigmoid函数很相似,由tanh和sigmoid函数的定义有 tanh(x)=2sigmoid(2x)-1 ,因此tanh函数可以由sigmoid函数伸缩平移得到,所以tanh函数一些特点和sigmoid函数相同。

tanh函数特点:(1) 连续光滑、严格单调;(2) 输出范围为(-1,1),以(0, 0)为对称中心,均值为0;(3) 输入在0附近时,输出变化明显;输入离0越远,输出变化越小最后输出趋近于1不变。

根据tanh函数的特点可以得到其优缺点。

优点:输出关于原点对称,0均值,因此输出有正有负,可以规避zigzag现象,另外原点对称本身是一个很好的优点,有益于网络的学习。

缺点:存在梯度消失问题,tanh的导数计算为  f^{'}=\\frac{4e^{2x}}{(e^{2x}+1)^2} ,取值范围为(0,1],虽然取值范围比sigmoid导数更广一些,可以缓解梯度消失,但仍然无法避免随着网络层数增多梯度连乘导致的梯度消失问题。


推荐系列文章:

推荐模型结构-特征交叉

推荐基础知识点

工具

工作相关的内容会更新在【播播笔记】公众号,欢迎关注

生活的思考和记录会更新在【吾之】公众号,欢迎关注

回顶部

平台注册入口