基本概念
激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络之所以能够解决非线性问题(如语音、图像识别),本质上就是激活函数加入了非线性因素,弥补了线性模型的表达力,把"激活的神经元的特征"通过函数保留并映射到下一层。
Tensorflow里包括平滑非线性的激活函数,如sigmoid、tanh、elu、softplus和softsign,也包括连续但不是出处可微的激活函数,如relu、relu6、crelu和relu_x,以及随机正则化函数dropout。
tf.nn.relu()
tf.nn.sigmoid()
tf.nn.tanh()
tf.nn.elu()
tf.nn.bias_add()
tf.nn.crelu()
tf.nn.relu6()
tf.nn.softplus()
tf.nn.softsign()
tf.nn.dropout() #防止过拟合,用来舍弃某些神经元
常见的激活函数
sigmoid函数
这是传统神经网络中最常用的激活函数之一,如下图所示
该函数的导数:a’=a(1-a)。吴恩达老师建议,tanh函数效果几何总比sigmoid函数好,除了处理二元分类问题,一般不使用sigmoid函数。
tanh函数
效果几乎总比 sigmoid 函数好(除开二元分类的输出层,因为我们希望输出的结果介于 0 到 1 之间),因为函数输出介于 -1 和 1 之间,激活函数的平均值就更接近 0,有类似数据中心化的效果。但是和sigmoid函数一样会产生梯度消失问题。
relu函数
relu函数是目前最受欢迎的激活函数,
当 z > 0 时,梯度始终为 1,从而提高神经网络基于梯度算法的运算速度,收敛速度远大于 sigmoid 和 tanh。然而当 z < 0 时,梯度一直为 0,但是实际的运用中,该缺陷的影响不是很大。