为什么使用激活函数
如果没有激活函数,神经网络就变成了线性模型,输出是输入的线性组合,使用一层与使用多层没有区别。如下式所示,输入为x,经过线性层计算出a1,将a1输入下个线性层得到a2,展开后可以看出,最终得到的仍然是wx+b的线性组合,只是参数值不同。
另外,线性层无法解决非线性问题,如在预测房价问题中,如果不使用激活函数,则房价可能计算成负值,这也与实际不符。理论上,加了激活函数后,模型可以逼近任意函数。
激活函数又分线性激活函数和非线性激活函数,一般使用的都是非线性激活函数,线性激活函数与线性层类似,只在输出层偶尔使用,不在此展开讨论。
何时使用激活函数
激活函数一般放置在线性变换之后,在线性变换和激活函数之间,常常插入归一化层,用于解决饱和的非线性激活函数问题(下面Sigmoid函数部分详细说明)。
如何选择激活函数
从一些当前流行的深度学习网络代码中,可以看到,当前使用的激活函数绝大部分是ReLU;在一些特殊情况下,也使用Sigmoid,比如二分类问题的最后一层使用Sigmoid将输出转换到0-1之间;又如使用注意力网络时,注意力加权需要使用0-1之间的权值时,