神经网络中的 tanh 与 sigmoid

机器算法验证 神经网络
2022-01-27 21:10:12

对于我仍在加快速度这一事实,我提前道歉。我试图了解将 tanh(映射 -1 到 1)与 sigmoid(映射 0 到 1)用于我的神经元激活函数的优缺点。从我的阅读来看,这听起来像是一件微不足道的事情。在我的问题的实践中,我发现 sigmoid 更容易训练,奇怪的是,sigmoid 似乎更好地找到了一般解决方案。我的意思是,当 sigmoid 版本完成训练后,它在参考(未经训练的)数据集上表现良好,而 tanh 版本似乎能够在训练数据上获得正确答案,而在参考上表现不佳。这适用于相同的网络架构。

我的一个直觉是,使用 sigmoid,神经元更容易几乎完全关闭,因此不会为后续层提供输入。tanh 在这里比较困难,因为它需要完美地取消它的输入,否则它总是给下一层赋值。也许这种直觉是错误的。

长帖。最重要的是,交易是什么,它应该有很大的不同吗?

3个回答

在 Symon Haykin 的“神经网络:综合基础”一书中,我引用了以下解释:

为了最小化学习时间,应避免使用非零均值输入。现在,就信号向量而言x应用于多层感知器的第一个隐藏层中的神经元,很容易从每个元素中去除均值x在应用到网络之前。但是应用于网络其余隐藏层和输出层中神经元的信号呢?这个问题的答案在于网络中使用的激活函数的类型。如果激活函数是非对称的,比如sigmoid函数,每个神经元的输出被限制在区间内[0,1]. 这种选择为位于网络第一层之外的那些神经元引入了系统偏差的来源。为了克服这个问题,我们需要使用反对称激活函数,例如双曲正切函数。通过后一种选择,允许每个神经元的输出在区间内假设为正值和负值[1,1],在这种情况下,它的均值很可能为零。如果网络连通性很大,使用反对称激活函数的反向传播学习可以比使用非对称激活函数的类似过程产生更快的收敛,这也有经验证据(LeCun 等人,1991)。

引用的参考文献是:

  • Y. LeCun、I. Kanter 和 SASolla:“误差曲面的二阶属性:学习时间和泛化”,神经信息处理系统进展,第一卷。3,第 918-924 页,1991 年。

另一个有趣的参考如下:

  • Y. LeCun、L. Bottou、G. Orr 和 K. Muller:“ Efficient BackProp ”,在 Orr, G. 和 Muller K.(编辑),神经网络:交易技巧,Springer,1998 年

这两个激活函数非常相似,但有偏移。我原来的网络没有偏见条款。由于添加了偏差,一切都变得更加稳定。根据我的经验,由于复杂的、可能不可知的原因,其中一种或另一种可能更适合特定应用程序,但正确的方法是包含偏差项,这样可以减少或消除对激活偏移的依赖。

tanh输出节点的激活不适用于(二进制)交叉熵损失:

L=1ni(yilog(pi)+(1yi)log(1pi))

在哪里 yi是样本的目标值ipi是样本网络的输出i.

如果pi是一个输出tanh函数你最终取负值的对数。因此,输出端的 sigmoid 激活函数对于这些情况是更好的选择。