1.3 激活函数的选择
在进行激活函数选择前,首先引入梯度消失和梯度爆炸的概念,以便更好的解释具体的选择原因。假定有一个由三个卷积层级联而成的网络结构,每一层的输出为 gk(wk×xk+bk),而每一层的期望值为 yk(其中 k 表示第 k 层网络,g 为该层的激活函数,w 为该层的权重,b 为该层的偏置)。则每一层的误差 loss=|ykgk(wk×xk+bk)|,而当在训练过程中进行反向传播时,通常采用的是梯度下降法来更正参数,则需将 w 修改为 wk+r×△wk,其中 r 是学习率。此时△w3便等于 dloss∕dw3=(dloss∕dg3)×(dg3 ∕dg2) ×(dg2 ∕dg1)×(dg1 ∕dw1),可见其中(dg3 ∕dg2 )和(dg2 ∕sdg1 )都是激活函数 g 的导数值。因此当 g 的导数值小于 1 时,在更深的网络层,△w 将变得非常小,便造成了梯度消失,使得权重每次迭代更新甚微甚至得不到更新,导致整体网络学习缓慢或受到停滞,令最终的检测效果大大折扣不说,还浪费了很长的时间。相反,当 g 的导数值大于 1 时,则会带来梯度爆炸现象,使得权重参数异常巨大或接近零值,以至超出所使用数据类型的表示范围而出现大量的 NAN 值,给网络带来很大的不稳定性。
因此无论现在已被广泛使用的 Sigmod 函数或 Tanh 函数,都会出现梯度消失的情况(其中 Tanh 的函数及其导数图像如图 1.3 所示),因为当其输入较大或较小时,其导数均接近于零。而当将其进行硬件实现时,因 Sigmod 函数或 Tanh 函数过高的复杂度只能采用多项式拟合或查表法来近似,以