8

我想我在某处读到卷积神经网络不会像标准的层数增加的 sigmoid 神经网络那样遭受梯度消失问题的困扰。但我一直无法找到“为什么”。

它真的没有遇到问题还是我错了,它取决于激活函数?[我一直在使用 Rectified Linear Units,所以我从未测试过用于卷积神经网络的 Sigmoid Units]

4

4 回答 4

5

卷积神经网络(如标准 sigmoid 神经网络)确实存在梯度消失问题。克服梯度消失问题的最推荐方法是:

  • 分层预训练
  • 激活函数的选择

您可能会看到用于计算机视觉问题的最先进的深度神经网络(如ImageNet获胜者)使用卷积层作为其网络的前几层,但这并不是解决梯度消失问题的关键. 关键通常是逐层贪婪地训练网络。使用卷积层当然还有其他几个重要的好处。尤其是在输入尺寸很大(图像的像素)的视觉问题中,建议在第一层使用卷积层,因为它们的参数比全连接层少,而且最终不会有数十亿个参数第一层(这将使您的网络容易过度拟合)。

然而,一些任务已经证明(如本文),使用 Rectified 线性单元可以缓解梯度消失的问题(与传统的 sigmoid 函数相反)。

于 2015-03-10T00:29:34.680 回答
0

最近的进展减轻了深度神经网络中梯度消失的影响。贡献的进步包括:

  1. 使用 GPU 训练深度神经网络
  2. 使用更好的激活函数。(此时整流线性单元(ReLU)似乎效果最好。)

有了这些进步,即使没有分层预训练,也可以训练深度神经网络。

资料来源: http ://devblogs.nvidia.com/parallelforall/deep-learning-nutshell-history-training/

于 2016-01-08T04:03:16.890 回答
0

我们不使用 Sigmoid 和 Tanh 作为导致梯度消失问题的激活函数。大多数情况下,我们在训练深度神经网络模型时使用基于 RELU 的激活函数来避免这种复杂性并提高准确性。

这是因为如果 RELU 激活的梯度或斜率超过 0,则为 1。Sigmoid 导数的最大斜率为 0.25,这意味着在反向传播期间,您将梯度与小于 1 的值相乘,如果您有更多和更多的层,你将它与小于 1 的值相乘,使梯度越来越小。RELU 激活通过梯度斜率为 1 来解决这个问题,因此在反向传播期间,没有递回的梯度逐渐变得越来越小。但相反,它们保持不变,这就是 RELU 解决梯度消失问题的方法。

然而,关于 RELU 需要注意的一件事是,如果您的值小于 0,则该神经元已死亡,并且传递回的梯度为 0,这意味着在反向传播期间,如果您的值小于 0,则将传递回 0 梯度大于 0。

另一种方法是 Leaky RELU,它为小于 0 的值提供一些梯度。

于 2020-03-22T20:06:04.590 回答
0

第一个答案是从 2015 年开始,还有点年龄。

今天,CNN 通常也使用 batchnorm - 虽然存在一些争论为什么这会有所帮助:发明者提到协变量转换:https ://arxiv.org/abs/1502.03167 还有其他理论,例如平滑损失景观:https://arxiv。 org/abs/1805.11604

无论哪种方式,它都是一种有助于显着处理与 CNN 相关的梯度消失/爆炸问题的方法。在 CNN 中,您还可以应用链式法则来获得梯度。即第一层的更新与N个数字的乘积成正比,其中N是输入的个数。与最后一层的更新相比,这个数字很可能相对较大或较小。这可以通过查看随机变量乘积的方差来看出,该乘积快速增长的变量越多:https ://stats.stackexchange.com/questions/52646/variance-of-product-of-multiple-random -变量

对于具有长输入序列的循环网络,即。长度为 L,情况通常比 CNN 更糟糕,因为那里的产品由 L 个数字组成。通常,RNN 中的序列长度 L 远大于 CNN 中的层数 N。

于 2020-12-14T20:49:28.590 回答