为什么使用tanh激活MLP的功能?

时间:2014-06-18 09:38:06

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

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

在许多书籍和参考文献中,对于隐藏层的激活功能,使用了高正切函数。

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

但是,有一个问题。

  1. 这是使用tanh功能的真正原因吗?
  2. 如果那时,它是使用tanh功能的唯一原因吗?
  3. 如果那么,tanh功能是唯一可以做到的功能吗?
  4. 如果没有,真正的原因是什么?..
  5. 我在这里继续思考...请帮助我摆脱这个心理(?...)陷阱!

7 个答案:

答案 0 :(得分:23)

大部分时间tanh快速收敛而不是sigmoid和逻辑函数,并且表现出更好的准确度[1]。然而,最近修正的线性单元(ReLU)由Hinton [2]提出,其显示ReLU训练比tanh [3]快6倍以达到相同的训练误差。您可以参考[4]了解ReLU提供的好处。


约2年的机器学习经验。我想分享一些最常用的纸张和我对计算机视觉的经验。

规范化输入非常重要

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

更准确的数据

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

选择良好的激活功能可以更好,更有效地进行培训。

ReLU非线性激活更好地工作,并在深度学习和MLP中执行最先进的结果。而且,它有一些好处,例如实现简单,反向传播计算更便宜,可以有效地训练更深的神经网络。但是,ReLU将获得零梯度,并且在单元为零活动时不进行训练。因此,提出了一些修改的ReLU,例如Leaky ReLU和Noise ReLU以及最受欢迎的方法是微软提出的PReLU [7],它推广了传统的重新定位单元。

其他

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

答案 1 :(得分:12)

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

答案 2 :(得分:9)

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

答案 3 :(得分:2)

更新以试图安抚评论者:纯粹基于观察,而不是上面提到的理论,Tanh和ReLU激活函数比sigmoid更高效。 Sigmoid似乎也更容易出现局部最佳,或者是最不延伸的扁平线['的问题。例如,尝试限制功能的数量以在XOR和sigmoid rarely succeeds中强制逻辑进入网络节点,而TanhReLU则更成功。

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

http://playground.tensorflow.org/< - 此网站是激活功能和神经网络其他参数的精彩可视化。不能直接回答你的问题,但该工具提供直觉和#39;正如Andrew Ng所说的那样。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

理论上我符合上述回应。根据我的经验,有些问题偏爱sigmoid而不是tanh,可能是由于这些问题的性质(因为有非线性效应,很难理解为什么)。

考虑到问题,我通常使用遗传算法优化网络。群体中每个元素的激活函数是在一组可能性(sigmoid,tanh,linear,......)之间选择randonm。对于30%的分类问题,遗传算法发现的最佳元素具有sigmoid作为激活函数。

答案 6 :(得分:1)

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