基础知识掌握情况决定研究的高度,我们刚开始接触深度学习时,一般都是看到别人的概括,这个方法很好能让我们快速上手,但是也有一个很大的缺点, 知识理解的不透彻,导致我们对算法优化时一头雾水。我也是抱着知识总结的思想开始自己的深度学习知识精髓的探索,也希望能从中帮助到更多人。文章中间存在表述不清的地方希望各位研友(研究深度学习的朋友)提出,我会努力完善自己的文章。
一、作用:
提供网络的非线性建模能力。加入激活函数,深度神经网络才能具备分层的非线性映射学习能力。因此激活函数是神经网络不可或缺的一部分。
二、 激活函数需要具备的性质:
1、可微性(定义域内存在导函数): 当优化算法是基于梯度的时候,这个性质是必须的。
2、单调性:官方上说是,当激活函数是单调的时候,单层网络能够保证是凸函数。这样理解是比较笼统,我是这样理解的。从下面激活函数我们可以看出来,函数形式是当我输入一个数值,通过计算得到一个数值,里面没有超级参数,也就是说我们在保证函数分布不发生改变的情况下,对神经元的数值带来一个非线性的映射。但是需要保证单调的原因是不改变分布的规律发生大的改变。当不是单调的时候我们可能会有很多个局部最优,不能保证是一个凸函数,对后面我们做梯度下降时带来巨大影响。
输出范围:当激活函数的输出有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有权值的影响显著,当激活函数是输出是无限的时候,模型的训练速度会更加高效,不过这种情况下,一般要有小的learning rate。
三、常用的激活函数:
1、sigmode函数:
从图片可以看出signoid函数连续,光滑,严格单调,是一个非常好的阈值函数。求导简单。
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最接近生物神经元。但是,从上图可以看出,
该函数有两方面的缺陷:饱和性、非0均值。
饱和性体现在函数求导时,函数的倒数会趋向于零。包括软饱和和硬饱和。sigmoid函数是一个软饱和,方向传递时会出现一个f()的导数,一旦当x大于一个值时,就会落入饱和区,导数几乎为零导致传递的梯度变得非常小。网络参数得不到训练,产生梯度消失现象。一般五层就出出现梯度消失。
非零性导致输出大于零,产生便宜现象。这会导致下一层的神经元把上一层的非零信号作为输入。导致收敛的效果不好。
2、tanh函数:
tanh函数是一个常见的激活函数,与sigmoid相比,输出均值为零,会加快收敛速度。减少迭代次数。但是任然会出现梯度消失现象。
3、ReLU函数:f(x)=max(0,x)
ReLU是一种后来才出现的激活函数。从图中 可以看到,当x<0时,出现硬饱和,当x>0时,不存在饱和问题。因此,ReLU 能
够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更
新,这种现象被称为“神经元死亡”。与sigmoid类似,ReLU的输出均值也大于0。偏移现象和神经元死亡会共同影响网络的收敛性。
产生激活函数大面积为被激活的原因是:
1、初始化的参数设置时,使Relu没有被激活。
2、学习率太高,神经元在一定范围内波动,可能会发生数据多样性的丢失,这种情况下神经元不会被激活,数据多样性的丢失不可逆。
4、该函数融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU函数能够缓解梯度消失,而左侧软饱能够让ELU函数对输入变化或噪声更鲁棒。此外,ELU函数的输出均值接近于零,所以收敛速度更快。
参考文献:https://blog.csdn.net/u013989576/article/details/70185145