本文章参考斯坦福深度学习课程,图片也来自于课程截图
为什么我们需要激活函数:
没有激活函数的神经网络只不过是一个线性回归模型,它功率有限,并且大多数情况下执行得并不好。我们希望神经网络不仅仅可以学习和计算线性函数,而且还要比这复杂得多。
1.sigmoid函数
缺点:
1.饱和神经元(绝对值很大的数值)将使得梯度消失
x=10或-10时梯度为0,使用链式法则梯度相乘,梯度消失
2.sigmoid是一个非零中心的函数
当神经元的输入总是为正的时候,w的梯度在传回来时,乘以当前梯度,结果要不全部为正,要么全部为负。他们总是朝着一个方向移动,这样做参数更新的时候,对于梯度更新来说是十分低效的
如上图所示:W在二维的情况下更新,如果只能都为正和负,将沿着红线进行迭代,但最优的是沿着蓝线,所以这也是我们希望我们的输入x的均值为0的原因,这样就能得到正的或负的数值,就不会出现这种问题。
3.使用了指数函数,计算代价较高
2.tanh函数
优点:是个以零为中心的函数,比sigmoid好一点
缺点:当饱和时依然会梯度消失
3.ReLU函数
f(x) = max(0,x)
优点:
1.在正的范围内不会饱和
2.计算高效(只是一个max函数)
3.收敛快(在实际中比sigmoid和tanh快6倍)
4.更具备生物学上的合理性(与sigmod函数相比,对结果有更精准的估计)
缺点:
1.非0中心函数
2.负半轴依然会造成梯度消失(会导致一部分数据挂掉 )
4.Leaky ReLU函数(ReLU函数变种)
f(x) = max(0.01x,x)
Parametric Rectifier(PReLU):f(x) = max(α*x,x)
优点:
1.不会饱和
2.计算高效
3.收敛快(如ReLU)
4.没有挂掉的问题
5. ELU函数(ReLU函数变种)
优点:
1.有ReLU所有的优点
2.输出均值接近于0
3.能达到负饱和,和Leaky ReLU相比添加了一些对于噪声的健壮性
缺点:
1.计算需要exp()
5. Maxout "Neuron"(最大神经元)
缺点:参数/神经元的数量是双倍的
在实际操作中:
1.使用ReLU,谨慎调整学习速率
2.尝试Leaky ReLU/Maxout/ELU
3.尝试tanh,但不要抱太大期望
4.不要使用sigmoid
什么样的函数可以作为激活函数:
1.非线性: 当激活函数是线性的,一个两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即f(x)=x,就不满足这个性质,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的
2.可微性: 当优化方法是基于梯度的时候,就体现了该性质;
3.单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数;
4.f(x)≈x: 当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;
5.输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate。
REFERENCE:
链接:https://www.zhihu.com/question/59031444/answer/177786603
来源:知乎