深层神经网络激活函数的选择对网络的训练动力学和任务性能有着重要的影响。目前,最成功和广泛使用的激活函数是矫正线性单元(ReLU) ,它是 f (x) = max (0,x)。虽然有人提出了各种替代 ReLU 的办法,但由于收益不一致,没有一种办法能够取代它。因此,谷歌大脑团队提出了一个名为 Swish 的新激活函数,简称 f (x) = x s (x)。他们的实验表明,在一些具有挑战性的数据集上,Swish 比 ReLU 在更深层次的模型上工作得更好。例如,只需简单地用 Swish 单位替换 ReLUs,Mobile NASNetA 和 inception-resnet-v2的 ImageNet 上的前1分类准确率分别提高了0.9% 和0.6% 。Swish 的简单性及其与 ReLU 的相似性使得从业者可以很容易地在任何神经网络中用 Swish 单元替换 ReLUs。


swish激活函数的导数 swish 激活函数_swish激活函数的导数

Swish

对于 ReLU,一致性问题是,对于斜坡函数中输入 x 的一半值,它的导数为0,即 f (x) = max (0,x)。作为他们的参数更新算法,他们使用了随机梯度下降,如果参数本身是0,那么这个参数将永远不会更新,因为它只是将参数指派回自己,导致接近40% 的死亡神经元在神经网络环境当 θ = θ。各种各样的替代品,如 Leaky ReLU 或 SELU (自标准化神经网络)已经尝试去解决这个问题,但是没有成功,但是现在似乎有了一场永久的革命。


swish激活函数的导数 swish 激活函数_swish激活函数的导数_02

几种常见的激活函数

 

Swish 是一个平滑的、非单调的函数,在深度网络上始终匹配或优于 ReLU,适用于各种具有挑战性的领域,如图像分类和机器翻译。上下都无界 & 它是非单调的属性造成了差异。通过self-gating,它只需要一个标量输入,而在多选通场景中,它需要多个双标量输入。它的灵感来自于 LSTM (Hochreiter & Schmidhuber,1997)和Highway networks(Srivastava et al. ,2015)中使用的 S形函数,在这些网络中,‘self-gating’意味着门实际上是激活本身的‘ sigmoid’。

使用 BatchNorm (Ioffe & Szegedy,2015)时,我们可以比 ReLU 网络训练更深的 Swish 网络,尽管它具有梯度压扁特性。利用 MNIST 数据集,对 Swish 和 ReLU 进行比较,两种激活函数在40层之内都能获得相似的性能。然而,当优化变得困难时,Swish 在40到50层之间的范围内的性能大大优于 ReLU。在非常深的网络中,Swish 比 ReLU 具有更高的测试精度。就批量大小而言,两种激活函数的性能都随着批量大小的增加而降低,可能是由于尖锐的极小值(Keskar 等人,2017)。然而,Swish 在每个批处理大小上都优于 ReLU,这表明即使改变批处理大小,两个激活函数之间的性能差异仍然存在。

显然,真正的潜力只有在我们自己使用它并分析其差异时才能被判断出来。通过定义返回 x * F.sigmoid (x)的 fn,我发现以函数的方式使用 Activation 函数更简单。