sigmoid函数
tf.nn.sigmoid(x)
特点:
- 易造成梯度消失。
- 输出非0均值,收敛慢。
- 幂运算复杂,训练时间长。
Tanh函数
tf.math.tanh(x)
特点:
- 输出是0均值。
- 易造成梯度消失
- 幂运算复杂,训练时间长。
Relu函数
tf.nn.relu(x)
优点:
- 解决了梯度消失问题(在正区间)
- 只需判断输入是否大于0,计算速度快。
- 收敛速度远快于sigmoid和tanh
缺点:
- 输出非0均值,收敛慢。
- Dead ReIU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
解决缺点:(减少负数特征)
- 改进随机初始化。
- 设置更小的学习率,减少参数分布的巨大变化,避免训练中产生过多的负数特征。
Leaky Relu函数
tf.nn.leaky_relu(x)
理论上讲,Leaky Relu有Relu的所有优点,外加不会有Dead Relu问题。但是在实际操作中,并没有完全证明Leaky Relu总好于Relu.
对于激活函数选择:
- 首选relu激活函数
- 学习率设置较小值
- 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布。
- 初始参数中心化,即让随机生成的参数满足以0为均值,(当前层输入特征个数)为标准差的正态分布。