我研究了神经网络的激活函数类型。功能本身非常简单,但应用程序差异并不完全清楚。

根据所需的二进制/连续输出来区分逻辑类型函数和线性类型函数是合理的,但 sigmoid 函数相对于简单线性函数的优点是什么?

ReLU 对我来说特别难理解,例如:使用在正输入情况下表现得像线性但在负输入情况下表现“平坦”的函数有什么意义?这背后的直觉是什么?或者这只是一次简单的试错,仅此而已?

有帮助吗?

解决方案

简历上也问过类似的问题: 神经网络中激活函数的综合列表及其优缺点.

我复制以下答案之一:

其中一个列表虽然不是很详尽: http://cs231n.github.io/neural-networks-1/

常用的激活函数

每个激活函数(或 非线性) 取一个数字 并对其进行某种固定的数学运算。有 在实践中可能会遇到几种激活函数:

enter image description hereenter image description here

左边: 西格玛非线性 将实数压扁为 [0,1] 之间的范围 正确的: 箪 非线性将实数压扁到 [-1,1] 之间。

乙状结肠。 sigmoid 非线性的数学形式为 $\sigma(x) = 1 / (1 e^{-x})$,如上图所示。 左边正如上一节所提到的,这需要一个 实数值,并将其 "压扁 "到 0 和 1 之间。在 特别是,大负数变为 0,而大正数 成为 1。历史上经常使用的乙曲函数 因为它可以很好地解释为神经元的发射率:从完全不点火(0)到假定的完全饱和点火 最大频率 (1)。在实践中,西格玛非线性具有以下特点 最近,它已不再受青睐,很少被使用。它有两个 主要缺点

  • S 型函数饱和并杀死梯度. 。乙状神经元的一个非常不理想的特性是,当神经元激活时 在 0 或 1 的尾部达到饱和,这些区域的梯度为 几乎为零。回想一下,在反向传播过程中,这个(局部)梯度 的梯度乘以该门输出的梯度。 目标因此,如果局部梯度非常小,它将 有效地 "杀死 "梯度,几乎没有信号流过 神经元的权重,并递归到其数据。此外、 在初始化 sigmoid 函数的权重时,必须格外小心。 神经元,以防止饱和。例如,如果初始权重为 过大,则大多数神经元将达到饱和,网络 几乎学不会。
  • Sigmoid 输出不是以零为中心的. 。这是不可取的,因为在神经网络中,后面处理层的神经元(更多关于 不久)将接收到非零中心的数据。这是 会对梯度下降过程中的动力学产生影响,因为如果 进入神经元的数据总是正的(例如$x > 0$ $f = w^Tx b$)中的元素),那么权重的梯度为 在反向传播过程中,$w$ 要么全部为正值,要么 均为负值(取决于整个表达式的梯度 $f$).这可能会在 "之 "字形动态中引入不可取的 权重的梯度更新但是,请注意,一旦这些 将一批数据的梯度相加,最后更新为 权重可以有不同的标志,在一定程度上缓解了这一问题。因此,这虽然会带来不便,但其严重程度较低。 与上述饱和活化问题相比,其后果更为严重。

谭。 tanh 非线性如上右图所示。它将实数值压缩到范围 [-1, 1]。就像 它的激活饱和,但与乙状结肠神经元不同的是 神经元的输出为零中心。因此,在实践中 黄褐色 非线性总是优于 sigmoid 非线性。 还有 请注意,tanh 神经元只是一个缩放的 sigmoid 神经元。 尤其是以下条件成立:$ anh(x) = 2 \sigma(2x) -1 $.

enter image description hereenter image description here

左边: 整流线性 单元 (ReLU) 激活函数,当 x < 0 时为零,然后 当 x > 0 时为线性,斜率为 1。 正确的: 克里热夫斯基的阴谋 等人(pdf)论文,表明收敛性提高了 6 倍 与 tanh 测量单元相比,ReLU 测量单元的精度更高。

ReLU。 整流线性单元在过去几年中变得非常流行。它计算函数 $f(x) = \max(0, x)$。在 换句话说,只需将激活阈值设置为零(见图片 上图左边)。使用 再循环:

  • (+) 被发现可以大大加速(例如因数 6 Krizhevsky等。)的 相比,随机梯度下降法的收敛性更强。 二次函数/三次函数。有人认为,这是因为它的线性、 非饱和形式。
  • ( ) 与涉及昂贵运算(指数等)的 tanh/sigmoid 神经元相比,ReLU 可通过简单的 将激活矩阵的阈值设为零。
  • (-) 不幸的是,ReLU 单元在训练过程中可能很脆弱并且可能“死亡”。例如,流经 ReLU 神经元的较大梯度 可能会导致权重更新,从而使神经元 再也不会在任何数据点上激活。如果出现这种情况,那么 流经该单元的梯度从该点起永远为零 上。也就是说,ReLU 单元会在训练过程中不可逆转地死亡,因为 它们会从数据歧管上脱落。例如,您可能会发现 多达 40% 的网络可能是 "死网"(即神经元 在整个训练数据集上永远不会激活),如果学习 速率设置过高。在适当设置学习率的情况下 的问题较少。

泄漏 ReLU。 Leaky ReLU 是解决“垂死的 ReLU”问题的一种尝试。当 x < 0 时,函数不会为零,而是泄漏 ReLU 将具有较小的负斜率(0.01 左右)。也就是说,该函数计算 $f(x) = \mathbb{1}(x < 0) (\alpha x) + \mathbb{1}(x>=0) (x) $,其中 $\alpha$ 是小常数。有些人报告使用这种形式的激活函数取得了成功,但结果并不总是一致的。负区域的斜率也可以作为每个神经元的参数,如 PReLU 神经元中所示,在 深入研究整流器, ,何凯明等人,2015 年。然而,目前尚不清楚跨任务的好处的一致性。

enter image description here

最大输出. 。还提出了其他类型的单元,它们不具有函数形式 $f(w^Tx b)$,在这些单元中应用了非线性方法 权重与数据之间的点积。一个相对 流行的选择是 Maxout 神经元(最近由 Goodfellow等。),即 概括了 ReLU 及其泄漏版本。最大输出神经元计算 函数 $\max(w_1^Tx b_1, w_2^Tx b_2)$.注意到 ReLU 和 Leaky ReLU 是这种形式的特例(例如,对于 我们有 $w_1, b_1 = 0$)。因此,Maxout 神经元享有 ReLU 设备的所有优点(线性运行机制,无 饱和),也没有其缺点(垂死的 ReLU)。然而 与 ReLU 神经元不同的是,ReLU 神经元每增加一个参数,其参数数量就会增加一倍。 单个神经元,导致参数总数较多。

关于最常见的神经元和神经元类型的讨论到此结束。 其激活函数。最后,我想说的是,很少有人会把 在同一网络中匹配不同类型的神经元,即使 这样做并没有根本性的问题。

总长DR: "我应该使用什么神经元类型?"使用 ReLU 非线性,注意学习率,并可能 监控网络中 "死机 "的比例。如果这涉及 你可以试试 Leaky ReLU 或 Maxout。切勿使用 sigmoid。尝试 tanh,但 希望它的效果比 ReLU/Maxout 更差。


执照:


麻省理工学院许可证 (MIT)

版权所有 (c) 2015 安德烈·卡帕蒂

特此允许任何人免费获取 本软件及相关文档文件(以下简称 "软件"),不受限制地处理该软件,包括 但不限于使用、复制、修改、合并、出版的权利、 分发、再许可和/或出售软件副本,以及 允许获得本软件的人这样做,但须符合以下条件 符合以下条件:

上述版权声明和本许可声明应 包括在本软件的所有副本或实质部分中。

本软件按 "原样 "提供,不作任何保证、 明示或暗示,包括但不限于以下保证 适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对以下情况负责 索赔、损害赔偿或其他责任,无论是在合同诉讼中、 侵权行为或其他行为引起的、由其造成的或与其有关的 软件或软件的使用或其他交易。

许可以下: CC-BY-SA归因
scroll top