【问题标题】:Why use tanh for activation function of MLP?为什么使用 tanh 作为 MLP 的激活函数?
【发布时间】:2014-08-08 13:07:05
【问题描述】:

我亲自研究神经网络的理论并得到了一些问题。

在许多书籍和参考资料中,对于隐藏层的激活函数,都使用了超正切函数。

书籍提出了非常简单的理由,即 tanh 函数的线性组合可以描述几乎所有具有给定误差的函数形状。

但是,有一个问题。

  1. 这是使用 tanh 函数的真正原因吗?
  2. 如果是这样,这是使用 tanh 函数的唯一原因吗?
  3. 如果是这样,tanh 函数是唯一可以做到这一点的函数吗?
  4. 如果不是,真正的原因是什么?..

我在这里一直在思考...请帮助我摆脱这个心理(?...)陷阱!

【问题讨论】:

标签: machine-learning neural-network hyperbolic-function


【解决方案1】:

事实上,tanh 和logistic 函数都可以使用。这个想法是您可以将任何实数( [-Inf, Inf] )映射到 [-1 1] 或 [0 1] 之间的数字,分别用于 tanh 和逻辑。通过这种方式,可以证明这些函数的组合可以逼近任何非线性函数。 现在关于 tanh 优于逻辑函数的偏好是,第一个关于 0 是对称的,而第二个不是。这使得第二个更容易出现后面的层饱和,使训练更加困难。

【讨论】:

    【解决方案2】:

    加起来the already existing answer,0 左右对称的偏好不仅仅是美学问题。 LeCun 等人的一篇优秀文章“Efficient BackProp”详细说明了为什么输入、输出和隐藏层的平均值为 0,标准差为 1 是个好主意。

    【讨论】:

    • 感谢 Yann LeCun 的精彩论文!我刚开始读。顺便说一句,作为一个自学MLP的物理专业的,真的很难找到好的学习资料。如果你不介意,你能不能给我推荐一些论文(如上一篇)来学习?
    • 我记得读过“神经网络:从统计角度看的评论”(jstor.org/discover/10.2307/…)。本文提供了人工神经网络上下文中“统计”和“机器学习”世界之间的深刻联系。 LeCun 的博士后顾问 Hinton 教授也有一个优秀的 Coursera“机器学习神经网络”
    • @bgbg - 我认为对于任何想要了解神经网络反向传播的人来说,Hinton 的课程更重要的建议是在 this paper 中引入了反向传播这一事实,这表明他可能有一些对主题的熟悉程度。 :)
    • @PeriataBreatta 参加课程总是一个好主意,但是,这是一个非常具体的问题,需要一个具体的答案。
    【解决方案3】:

    理论上我符合上述回答。根据我的经验,有些问题更倾向于使用 sigmoid 而不是 tanh,这可能是由于这些问题的性质(由于存在非线性效应,很难理解为什么)。

    给定一个问题,我通常使用遗传算法优化网络。种群中每个元素的激活函数是在一组可能性(sigmoid、tanh、linear、...)之间随机选择的。对于30%的分类问题,遗传算法找到的最佳元素以sigmoid为激活函数。

    【讨论】:

      【解决方案4】:

      在大多数情况下,tanh 比 sigmoid 和逻辑函数收敛得更快,并且精度更高[1]。然而,最近由 Hinton [2] 提出的整流线性单元 (ReLU) 表明 ReLU 的训练速度是 tanh [3] 的六倍,以达到相同的训练误差。您可以参考[4] 了解 ReLU 提供了哪些好处。


      根据大约 2 年的机器学习经验。我想分享一些使用最多的论文的策略以及我在计算机视觉方面的经验。

      规范化输入很重要

      正常化可以得到更好的性能并快速收敛。大多数时候我们会减去平均值使输入均值为零,以防止权重改变相同的方向,从而缓慢收敛[5]。最近谷歌也指出这种现象是在训练深度学习时内部协变量偏移,他们提出了批量归一化[6] 以便对每个具有零均值和单位方差的向量进行归一化。

      更多数据更准确

      更多的训练数据可以很好地生成特征空间并防止过度拟合。在计算机视觉中,如果训练数据不够,增加训练数据的主要技巧是数据论证和综合训练数据。

      选择好的激活函数可以让训练更好、更高效。

      ReLU 非线性激活效果更好,并在深度学习和 MLP 中取得了最先进的结果。此外,它还有一些好处,例如在反向传播中实现简单且计算成本更低,可以有效地训练更深的神经网络。但是,ReLU 将获得零梯度,并且在单元为零活动时不进行训练。因此提出了一些修改后的 ReLU,例如Leaky ReLU和Noise ReLU,最流行的方法是微软提出的PReLU[7],它推广了传统的recitifed单元。

      其他

      • 如果初始学习率不会振荡或发散,则选择较大的初始学习率,以便找到更好的全局最小值。
      • 改组数据

      【讨论】:

      • 链接 [1] 已损坏
      【解决方案5】:

      试图安抚评论者的更新:纯粹基于观察,而不是上面涵盖的理论,Tanh 和 ReLU 激活函数比 sigmoid 更有效。 Sigmoid 似乎也更容易出现局部最优,或最少扩展的“扁线”问题。例如,尝试限制功能的数量以在 XOR 和 sigmoid rarely succeeds 中强制将逻辑放入网络节点,而 TanhReLU 则更成功。

      对于许多给定的示例,Tanh 似乎可能比 ReLU 慢,但正如您所描述的,仅使用线性输入就可以为数据生成更自然的拟合。对于example a circlesquare/hexagon thing

      http://playground.tensorflow.org/

      【讨论】:

        【解决方案6】:

        这里的许多答案都描述了为什么 tanh(即 (1 - e^2x) / (1 + e^2x)) 比 sigmoid/logistic 函数 (1 / (1 + e^-x)) 更可取,但应该注意的是,有一个很好的理由说明为什么这些是应该理解的两个最常见的替代方案,即在使用反向传播算法训练 MLP 期间,该算法需要激活函数的导数为网络中每个节点的激活点。虽然这通常可以为大多数合理的激活函数计算(除了那些不连续的,这对那些来说有点问题),这样做通常需要昂贵的计算和/或存储额外的数据(例如激活函数的输入值, 计算每个节点的输出后不需要)。然而,Tanh 和logistic 函数对于它们的导数都有非常简单和有效的计算,可以从函数的输出 中计算出来;即如果节点的输入加权和是 v 并且它的输出是 u,我们需要知道 du/dv 可以从 u 而不是更传统的 v 计算:对于 tanh,它是 1 - u^2,对于逻辑函数,它是 u * (1 - u)。这一事实使得这两个函数在反向传播网络中的使用比大多数替代函数更有效,因此通常需要一个令人信服的理由来偏离它们。

        【讨论】:

          【解决方案7】:

          在深度学习中,ReLU 已成为首选的激活函数,因为其数学运算比 tanh 或 logit 等 sigmoid 激活函数要简单得多,尤其是在您有很多层的情况下。要使用反向传播分配权重,您通常会计算损失函数的梯度并对隐藏层应用链式法则,这意味着您需要激活函数的导数。 ReLU 是一个斜坡函数,其中导数为 0 的平坦部分和导数为 1 的倾斜部分。这使得数学变得非常容易。如果您使用双曲正切,您可能会遇到衰减梯度问题,这意味着如果 x 小于 -2 或大于 2,则导数会变得非常小并且您的网络可能不会收敛,或者您最终可能会有一个死神经元不再触发。

          【讨论】:

            猜你喜欢
            • 2016-06-18
            • 2019-04-25
            • 2015-11-09
            • 1970-01-01
            • 2020-12-05
            • 2018-08-08
            • 1970-01-01
            • 2017-01-14
            • 2020-10-11
            相关资源
            最近更新 更多