5.5 激活函数
引入激活函数可以增加神经网络模型的非线性,以便增强对样本的拟合能力。
5.5.1 Sigmoid函数
S
(
x
)
=
1
1
+
e
−
x
S(x)=\frac{1}{1+e^{-x}}
S(x)=1+e−x1
S
(
x
)
′
=
S
(
x
)
[
1
−
S
(
x
)
]
S(x)'=S(x)[1-S(x)]
S(x)′=S(x)[1−S(x)]
优点:
- 函数的导数容易计算
- 函数曲线平滑,在变量接近0时变化幅度最大
缺点:
- 函数的计算相对耗时
- 函数容易造成梯度弥散,在两侧
前面介绍的BN层可以用来防止梯度消失的发生。
5.5.2 Softmax激活函数
S i = e v i ∑ j C e v j S_i=\frac{e^{v_i}}{\sum_j^Ce^{v_j}} Si=∑jCevjevi
5.5.3 ReLU激活函数
ReLU激活函数,即修正线性单元(Rectified linear unit, ReLU).
R
(
x
)
=
m
a
x
(
0
,
x
)
R(x)=max(0,x)
R(x)=max(0,x)
优点:
- 单侧抑制,可以使得神经网络中的神经元具有稀疏激活的特性,让激活的更加“专一”,使模型更好挖掘相关特征
- 不会有梯度消失,加快收敛
- 导数易求
5.5.4 Keras中激活函数的使用
from keras.models import Sequential
from keras.layers import Conv2D,Dense
model = Sequential()
model.add(Conv2D(
kernel_size=(9, 9),
activation='relu',
filters=48,
strides=(4,4),
input_shape=input_shape
))
from keras.layers import Activation, Dense
model.add(Dense(64))
model.add(Activation('sigmoid'))
model.add(Dense(64, activation='sigmoid'))
- 指数线性单元 elu
- 可伸缩的指数线性单元 SELU
- 双曲正切激活函数 tanh
- Softplus激活函数
- Softsign激活函数
- Hard sigmoid 激活函数
- 带泄露的修正线性单元 LeakyReLU
- 参数化的修正线性单元 PReLU