我想我在某处读到,卷积神经网络不会像消失的梯度问题那样受到层数增加的标准S形神经网络的影响。但我找不到'为什么'。
它真的没有问题,或者我错了,这取决于激活功能? [我一直在使用整流线性单元,所以我从未测试过卷积神经网络的Sigmoid单位]
答案 0 :(得分:5)
卷积神经网络(如标准的S形神经网络)确实遭受消失梯度问题的困扰。克服消失梯度问题的最佳推荐方法是:
您可能会发现,用于计算机视觉问题的最先进的深度神经网络(如ImageNet获胜者)已将卷积层用作其网络的前几层,但它不是解决消失梯度的关键。关键是通常逐层训练网络。使用卷积层当然还有其他几个重要的好处。特别是在输入尺寸较大(图像像素)时的视觉问题中,建议使用第一层的卷积层,因为它们的参数少于完全连接的层,并且最终没有数十亿个参数用于第一层(这将使您的网络容易过度拟合)。
然而,已经证明(如this paper)几个任务使用整流线性单元减轻了梯度消失的问题(与传统的S形函数相反)。
答案 1 :(得分:0)
最近的进展减轻了深度神经网络中消失梯度的影响。贡献的进步包括:
随着这些进步,即使没有分层预训练,也可以训练深度神经网络。
来源: http://devblogs.nvidia.com/parallelforall/deep-learning-nutshell-history-training/
答案 2 :(得分:0)
我们不使用Sigmoid和Tanh作为激活函数,而这会导致消失的梯度问题。如今,大多数情况下,我们使用基于RELU的激活函数来训练深度神经网络模型,以避免此类并发症并提高准确性。
这是因为RELU激活的梯度或斜率(如果超过0,则为1)。Sigmoid导数的最大斜率为.25,这意味着在向后传递过程中,您将梯度乘以小于1的值,并且如果您的图层越来越多,您将其乘以小于1的值,使渐变越来越小。 RELU激活通过将梯度坡度设置为1来解决此问题,因此在反向传播期间,不会传递回逐渐变小的梯度。但是相反,它们保持不变,这就是RELU解决梯度消失问题的方式。
关于RELU的一件事要注意的是,如果您的值小于0,则说明神经元已死,并且传递回的梯度为0,这意味着在反向传播期间,如果具有小于0的值。
替代方法是Leaky RELU,它为小于0的值提供一定的梯度。
答案 3 :(得分: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-variables
对于具有较长输入序列的递归网络,即对于长度为L的数字,情况通常比CNN更糟糕,因为那里的乘积由L个数字组成。通常,RNN中的序列长度L远大于CNN中的层数N。