神经网络激活函数学习要点记录

如下图所示,在神经元中,输入通过加权,求和后,还被作用于一个函数,这个函数就是激活函数/激励函数 Activation Function。激活函数的作用是为了增加神经网络的非线性。

 

常用的激活函数:

1、Sigmoid函数:

Sigmoid 图像

特点:能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

缺点:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。

          解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

          其输出并不是以0为中心的。会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的。

不建议在网络中使用。

 

2、tanh函数:

Tanh函数图像

它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

不建议在网络中使用。

 

3、ReLU函数(Rectified Linear Unit,修正线性单元):

ReLU函数图像

优点:解决了梯度消失(gradient vanishing)问题 (在正区间)

          计算速度非常快,只需要判断输入是否大于0

          收敛速度远快于sigmoid和tanh

 缺点:随着训练的进行,可能会出现神经元死亡、权重无法更新的情况。可以通过设置learning rate来缓解。

 

 4、PReLU(Parametric Rectified Linear Unit)函数:

f(x) = max(ax, x)  一般来说a为很小的系数,在训练中取一定范围内的随机值,在测试时固定。当a=0.01时为Leaky ReLU。

有ReLU函数的优点,解决了神经元死亡的问题。

Softmax 函数:

多用于输出层,计算分类概率。

 

结论:

选择激活函数时,优先选择ReLU及其变体,而不是sigmoid或tanh。ReLU及其变体训练起来更快。如果ReLU导致神经元死亡,使用Leaky ReLU或者ReLU的其他变体。sigmoid和tanh受到消失梯度问题的困扰,不应该在隐藏层中使用。隐藏层使用ReLU及其变体较好。使用容易求导和训练的激活函数。

 

posted @ 2018-12-14 14:24  白水白水  阅读(269)  评论(0编辑  收藏  举报