为啥 sigmoid 函数在神经网络中起作用?

Posted

技术标签:

【中文标题】为啥 sigmoid 函数在神经网络中起作用?【英文标题】:Why do sigmoid functions work in Neural Nets?为什么 sigmoid 函数在神经网络中起作用? 【发布时间】:2012-07-25 12:34:59 【问题描述】:

我刚刚开始为神经网络编程。我目前正在研究反向传播 (BP) 神经网络的工作原理。虽然在 BP 网络中训练的算法非常简单,但我找不到任何关于该算法为何有效的文本。更具体地说,我正在寻找一些数学推理来证明在神经网络中使用 sigmoid 函数是合理的,以及是什么让它们模仿了几乎所有扔给它们的数据分布。

谢谢!

【问题讨论】:

【参考方案1】:

sigmoid 函数在网络中引入了非线性。如果没有非线性激活函数,网络只能学习作为其输入线性组合的函数。结果被称为universal approximation theoremCybenko theorem,以这位先生在 1989 年证明它的名字命名。Wikipedia 是一个很好的起点,它有一个指向原始论文的链接(虽然证明有点涉及)。使用 sigmoid 而不是其他东西的原因是它是连续且可微的,它的导数计算速度非常快(与具有相似属性的 tanh 的导数相反)并且范围有限(从 0到 1,独占)

【讨论】:

不错的答案,但假设“连续(因此可微)”不成立。示例:abs(x) 在零处连续但不可微分。 ***的文章是这么说的:"Kurt Hornik 在 1991 年表明,不是激活函数的具体选择,而是多层前馈架构本身赋予了神经网络潜力作为通用逼近器。输出单元总是被假定为线性的。” 事实上,它似乎并没有说明需要非线性激活函数。但是该定理的正式陈述确实说“非常量、有界和单调递增的连续函数”——也许 有界 和单调部分意味着非线性? @Desty,线性激活函数将整个网络变成线性分类器(线性函数的线性组合仍然是线性的),这使得隐藏单元无用。 有趣的是,深度学习领域已经转向了整流器单元,它本质上是一个线性函数。 “没有它,网络只能学习作为其输入线性组合的函数。” “它”是什么意思? 'sigmoid 函数','非线性'还是只是'激活函数'?

以上是关于为啥 sigmoid 函数在神经网络中起作用?的主要内容,如果未能解决你的问题,请参考以下文章

神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释

神经网络中为啥要用sigmoid函数?

sigmoid函数作用

为啥将误差乘以神经网络中 sigmoid 的导数?

激活函数

神经网络为什么要用sigmoid函数?为什么要映射到0-1之间?