概述
本篇中你将了解几种常见的激活函数,并看到在浅层神经网络中向后传播及梯度下降是如何进行的。
5.0 上篇回顾
在上一篇中,你见到了一个单输出的浅层(双层)神经网络是如何进行向前传播的,就同 Logistic 回归网络一样,不过多重复了几次单层网络的向前传播过程而已。
对于隐藏层而言,所有的隐藏单元与输入层都构成了简单的单层网络结构,所有的隐藏单元均进行一次向前传播(图1-0左),所有隐藏单元完成向前传播后,隐藏层的输出数据就作为输出层的输入数据,继续向前推进,完成输出层的向前传播(图1-0右)。
如果你了解了 Logistic 回归的向前传播过程,那么浅层神经网络当中的向前传播是很好理解的。
还记得在上篇的末尾留下了一个问题,即激活函数的选择。在之前我们一直使用的是 sigmoid 函数:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e−z1
sigmoid 函数帮助我们将 Logistic 线性回归值进行归一化处理,得到一个位于区间 [ 0 , 1 ] [0,1] [0,1] 的概率输出。但在浅层神经网络以至于在深层神经网络当中,尽管 sigmoid 函数可以继续用于输出层,但往往不会作为隐藏层的激活函数,而是使用其它的一些函数,如 tanh、ReLU、Leaky ReLU 等,这是为什么?下面就来了解一下这些新奇的函数,以及为什么要使用这些函数而不是 sigmoid 函数吧。
5.1 激活函数的选择
tanh
tanh 函数是双曲函数中的一个,更准确的说是双曲正切函数。首先来看一看 tanh 函数,它的函数表达式是这样的:
tanh ( z ) = e z − e − z e z + e − z \tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} tanh(z)=ez+e−zez−e−z
如果你对数学敏感的话,或许可以发现它与 sigmoid 函数的相似之处。如果观察图像的话,可以更加直观地看到,tanh 函数的形态与 sigmoid 函数是非常相似的,事实上 tanh 就是 sigmoid 函数的一个伸缩平移版本,两者是线性相关的。
你可能会疑惑,既然 tanh 函数与 sigmoid 函数形态如此相似,为什么不直接使用 sigmoid 函数而是要换用一个看上去更复杂的 tanh 函数?答案很简单,tanh 函数可以很好的规避 sigmoid 函数导致的 zigzag 现象。如果你观察 tanh 函数的值域的话,你会发现它处于区间 [ − 1 , 1 ] [-1,1] [−1,1],并且其中心点在坐标原点处,这意味着 tanh 是 0 均值的,这对神经网络的训练很有帮助。
零均值能避免 zigzag?能提高网络的训练效率?WHY?
如果你对原理不感兴趣,只需要知道上面一行黑体字是结论就行了。不过如果感兴趣,我们来从根本上看一看 s