具有神经网络的线性系统中的 sigmoid() 或 tanh() 激活函数

Posted

技术标签:

【中文标题】具有神经网络的线性系统中的 sigmoid() 或 tanh() 激活函数【英文标题】:sigmoid() or tanh() activation function in linear system with neural network 【发布时间】:2017-03-30 16:09:33 【问题描述】:

我正在尝试构建一个神经网络来研究一个具有连续输出变量的问题。下面描述了所使用的神经网络的示意图

Schematic representation of neural network: input layer size = 1; hidden layer size = 8; output layer size = 1.

在这种情况下,我有什么理由应该使用 tanh() 激活函数而不是 sigmoid() 激活函数?我过去一直使用 sigmoid() 激活函数来解决使用神经网络的逻辑回归问题,我不清楚当有连续输出变量时是否应该使用 tanh() 函数。

它是否取决于连续输出变量的值?例如: (i) 当输出变量从 0 标准化到 1 时使用 sigmoid() (ii) 当输出变量为负值时使用 tanh()。

提前致谢

【问题讨论】:

我认为它们是等价的。如果你使用 (1 + tanh())/2.0,它看起来很像 sigmoid。 标准逻辑函数与双曲正切的很好解释可以在这里找到yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf 感谢您提供非常有用和有趣的参考 bb01234。我想我在第 4.4 节中找到了我的问题的一个很好的答案 【参考方案1】:

除了 0.5 偏差之外,两者在功能上几乎相同。重要的部分是

    在接近 0 的“训练兴趣范围”中的梯度大约为 1; 极值的梯度大致为 0。

一旦你看过这些,我怀疑你会更担心的是计算效率。 tanh 在大多数架构上计算成本很高。如果这是您的担心,请考虑编写您自己的函数,也许是一个查找表,其中包含范围 [-4,4] 的 2^10 个预先计算的值,以及该范围之外的“rail”值(-1 和 1) .

【讨论】:

感谢您的回答修剪。您的回复和 bb01234 建议的文档第 4.4 节对我有很大帮助。谢谢

以上是关于具有神经网络的线性系统中的 sigmoid() 或 tanh() 激活函数的主要内容,如果未能解决你的问题,请参考以下文章

神经网络中的激活函数具体是什么?为什么Relu要好过与tanh和sigmoid function

激活函数的选择

具有对数损失的 TensorFlow 单 sigmoid 输出与具有稀疏 softmax 交叉熵损失的两个线性输出,用于二进制分类

Pytorch 简单线性 Sigmoid 网络不学习

激活函数总结

神经网络中的激活函数