tensorflow学习——-激活函数(activation function)
1. 激活函数
激活函数(activation function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。
神经网络之所以能解决非线性问题,本质上是激活函数加入了非线性因素,弥补了线性模型的表达能力,把“激活的神经元的特征”通过函数保留并映射到下一层。
神经网络的数学基础是处处可微,所以激活函数要能保证数据输入与输出也是可微的。
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力;
激活函数应该具备的性质:
- 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
- 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
- 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate
激活函数不会更改输入数据的维度,激活函数在Tensorflow的神经网络模块(Neural Network),即tf.nn模块
2.激活函数的分类:
2.1非线性激活函数
- sigmoid
- tanh
- elu
- softplus
softsign
2.1.1 sigmoid函数
函数定义
f(x)=11+e−x f ( x ) = 1 1 + e − x
函数图像:
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。
然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0
lim