关于神经网络:激活函数-sigmoidtanhrelu

39次阅读

共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。

激活函数(activation functions)的指标是,将神经网络非线性化。激活函数是间断的(continuous),且可导的(differential)。

  • 间断的:当输出值产生较小的扭转时,输入值也产生较小的扭转;
  • 可导的:在定义域中,每一处都是存在导数;


常见的激活函数:sigmoid,tanh,relu。


sigmoid

sigmoid 是平滑(smoothened)的阶梯函数(step function),可导(differentiable)。sigmoid 能够将任何值转换为 0~1 概率,用于二分类。细节能够参考。

公式:

导数:

导数 2:

图(红色导函数,蓝色原函数):

当应用 sigmoid 作为激活函数时,随着神经网络隐含层(hidden layer)层数的减少,训练误差反而加大。体现为:

  1. 凑近输入层的隐含层梯度较大,参数更新速度快,很快就会收敛;
  2. 凑近输出层的隐含层梯度较小,参数更新速度慢,简直和初始状态一样,随机散布;
  3. 在含有四个暗藏层的网络结构中,第一层比第四层慢了靠近 100 倍!

这种景象就是梯度弥散(vanishing gradient)。而另一种状况,梯度爆炸(exploding gradient),则是后面层的梯度,通过训练变大,导致前面层的梯度,以指数级增大。


因为 sigmoid 的导数值小于 1 /4,x 变动的速率要快于 y 变动的速率,随着层数的减少,连续不断执行 sigmoid 函数,就会导致,后面更新较大的幅度,前面更新较小的幅度,因而,网络在学习过程中,更偏向于,更新前面(凑近输入层)的参数,而不是后面的参数(凑近输出层)。

sigmoid 毛病:

  • 激活函数的计算量较大,在反向流传中,当求误差梯度时,求导波及除法;
  • 在反向流传中,容易就会呈现梯度隐没,无奈实现深层网络的训练;
  • 函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,

参考 1、参考 2


tanh

tanh,即双曲正切(hyperbolic tangent),相似于幅度增大 sigmoid,将输出值转换为 - 1 至 1 之间。tanh 的导数取值范畴在 0 至 1 之间,优于 sigmoid 的 0 至 1 /4,在肯定水平上,加重了梯度隐没的问题。tanh 的输入和输出可能放弃非线性枯燥回升和降落关系,合乎 BP(back propagation)网络的梯度求解,容错性好,有界。

公式:

导数:

图(红色导函数,蓝色原函数):

sigmoid 和 tanh:

  • sigmoid 在输出处于 [-1,1] 之间时,函数值变动敏感,一旦靠近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值;
  • tanh 的变动敏感区间较宽,导数值渐进于 0、1,合乎人脑神经饱和的法则,比 sigmoid 函数提早了饱和期;
  • tanh 在原点左近与 y = x 函数模式相近,当激活值较低时,能够间接进行矩阵运算,训练绝对容易;
  • tanh 和 sigmoid 都是全副激活(fire),使得神经网络较重(heavy)。

参考 1、参考 2、参考 3


relu

relu,即 Rectified Linear Unit,整流线性单元,激活局部神经元,减少稠密性,当 x 小于 0 时,输入值为 0,当 x 大于 0 时,输入值为 x.

公式:

图:

导数:

图:

relu 比照于 sigmoid:

  • sigmoid 的导数,只有在 0 左近,具备较好的激活性,而在正负饱和区的梯度都靠近于 0,会造成梯度弥散;而 relu 的导数,在大于 0 时,梯度为常数,不会导致梯度弥散。
  • relu 函数在负半区的导数为 0,当神经元激活值进入负半区,梯度就会为 0,也就是说,这个神经元不会被训练,即稠密性;
  • relu 函数的导数计算更快,程序实现就是一个 if-else 语句;而 sigmoid 函数要进行浮点四则运算,波及到除法;

relu 的毛病:

在训练的时候,ReLU 单元比拟软弱并且可能“死掉”。举例来说,当一个很大的梯度,流过 ReLU 的神经元的时候,可能会导致梯度更新到一种特地的状态,在这种状态下神经元将无奈被其余任何数据点再次激活。如果这种状况产生,那么从此所以流过这个神经元的梯度将都变成 0。也就是说,这个 ReLU 单元在训练中将不可逆转的死亡,因为这导致了数据多样化的失落。

如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过正当设置学习率,这种状况的产生概率会升高。

在神经网络中,隐含层的激活函数,最好抉择 ReLU。

对于 RNN 中为什么抉择 tanh,而不是 relu,参考。

作者:SpikeKing
链接:https://www.jianshu.com/p/857…
起源:简书
著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

正文完
 0