神经网络的激活函数作用是将输入信号经过非线性计算输出传递给下一个节点。常见的激活函数有这么三种,分别是Relu激活函数,sigmoid激活函数和tanh激活函数。
sigmoid激活函数:
图1:
tanh激活函数:
图2:
Relu激活函数:
图3:
上述三种常用的激活函数的优缺点如下:
sigmoid激活函数和tanh激活函数在z特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度。但是tanh激活函数效果总是优于 sigmoid 函数。因为函数值域在-1 和+1的激活函数,tanh函数均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh 函数代替sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5。此外如果是输出一个二分类问题,那么输出层可以采用sigmoid激活函数使得输出只有0和1,而不是-1和1。Relu激活函数是一个性能比较好的激活函数,其不会因为z过大或者过小而产生梯度弥散问题,而且Relu比sigmoid和tanh学习更快。
快速概括一下不同激活函数的过程和结论:
sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它,但是sigmoid函数求导容易,单调连续,优化稳定,会梯度消失。
tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合,比sigmoid收敛速度快,会梯度消失。
ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu。
attention:
当你随机初始化权重矩阵或者偏差矩阵的过程中,最好能将最后初始化的权重矩阵或者偏差矩阵再乘以0.01,通常倾向于初始化为很小的随机数,因为如果你采用了sigmoid或者tanh作为激活函数,当你的权重初始值或者偏差矩阵初始化值很大,最后根据公式 就会使得z很大,很有可能或产生梯度消失。