人工神经网络- 为什么通常在隐藏层使用 sigmoid 激活函数而不是 tanh-sigmoid 激活函数?

Artificial Neural Network- why usually use sigmoid activation function in the hidden layer instead of tanh-sigmoid activation function?

为什么在隐藏层首选log-sigmoid激活函数而不是tanh-sigmoid激活函数?而且,如果我使用 Z-score 归一化,我可以在隐藏层使用 sigmoid 激活函数吗?

远古历史

使用 sigmoid 函数的动机在历史上是出于物理动机。第一个神经网络,在很早的时候,实际上使用的是阶跃函数

动机是,这就是神经元在大脑中的工作方式,至少对当时的理解是这样。在某个固定的激活能量下,神经元 "activates",从非活动状态 (0) 变为活动状态 (1)。然而,这些网络很难训练,而且标准范式也是出于身体动机,例如"neurons that are used often, get a stronger connection"。这适用于非常小的网络,但根本无法扩展到更大的网络。

梯度下降和 sigmoid 的出现

在 80 年代,当人们发现可以使用梯度下降法训练神经网络时,神经网络发生了轻微的革命。这允许网络扩展到更大的规模,但它也意味着步骤激活的结束,因为它是不可微的。然而,鉴于步进激活的悠久历史及其合理的物理动机,人们不愿完全放弃它,因此用 sigmoid 函数对其进行逼近,它具有许多相同的特征,但在 0 附近可微。

后来,人们开始使用 tanh 函数,因为它以零为中心,在某些情况下可以提供更好的特性。

革命

然后在 2000 年,《自然》杂志发表了一篇开创性的论文,建议使用 ReLU 激活函数:

这是由早期激活函数的问题引起的,但最重要的是速度以及它不受 vanishing gradient problem 影响的事实。从那时起,基本上所有顶级神经网络研究都在使用 ReLU 激活或其轻微变化。

唯一的例外可能是循环网络,其中输出作为输入反馈。在这些情况下,使用 ReLU 等无界激活函数会很快导致结果爆炸,在这些情况下人们仍然使用 sigmoid and/or tanh。