Machine learning 卷积神经网络会受到消失梯度的影响吗?
我想我在什么地方读到过,卷积神经网络不像标准的sigmoid神经网络那样,在层数不断增加的情况下,会受到消失梯度问题的影响。但我一直无法找到“为什么” 它真的没有问题吗?还是我错了,这取决于激活功能?Machine learning 卷积神经网络会受到消失梯度的影响吗?,machine-learning,neural-network,classification,conv-neural-network,Machine Learning,Neural Network,Classification,Conv Neural Network,我想我在什么地方读到过,卷积神经网络不像标准的sigmoid神经网络那样,在层数不断增加的情况下,会受到消失梯度问题的影响。但我一直无法找到“为什么” 它真的没有问题吗?还是我错了,这取决于激活功能? [我一直使用校正线性单元,因此我从未测试过卷积神经网络的Sigmoid单元]卷积神经网络(如标准Sigmoid神经网络)确实存在消失梯度问题。克服消失梯度问题的最推荐方法是: 分层预训 激活函数的选择 你们可能会看到,用于计算机视觉问题的最先进的深度神经网络(如优胜者)已经使用卷积层作为其网络
[我一直使用校正线性单元,因此我从未测试过卷积神经网络的Sigmoid单元]卷积神经网络(如标准Sigmoid神经网络)确实存在消失梯度问题。克服消失梯度问题的最推荐方法是:
- 分层预训
- 激活函数的选择
然而,对于一些任务(如),使用校正线性单元可以缓解消失梯度的问题(与传统的S形函数相反) 最近的进展缓解了深层神经网络中消失梯度的影响。预付款包括:
我们不使用Sigmoid和Tanh作为激活函数,这会导致消失梯度问题。目前,我们大多使用基于RELU的激活函数来训练深度神经网络模型,以避免此类复杂情况并提高精度 这是因为如果RELU激活的梯度或斜率大于0,则为1。Sigmoid导数的最大斜率为.25,这意味着在反向过程中,将渐变乘以小于1的值,如果层越来越多,将渐变乘以小于1的值,使渐变越来越小。RELU激活通过将梯度斜率设置为1来解决此问题,因此在反向传播过程中,不会出现梯度逐渐变小的情况。但是它们却保持不变,这就是RELU解决消失梯度问题的方法 然而,关于RELU需要注意的一点是,如果你的值小于0,那么神经元就死了,而传递回的梯度是0,这意味着在反向传播过程中,如果你的值小于0,你将有0个梯度被传递回
另一种选择是Leaky RELU,它为小于0的值提供了一些梯度。第一个答案是从2015年开始的,有点过时 今天,CNN通常也使用batchnorm——尽管有一些争论为什么这会有帮助:发明人提到了协变量转移: 还有其他理论,如平滑损失情况: 无论哪种方法,它都有助于显著处理与CNN相关的消失/爆炸梯度问题。在CNN中,您还可以应用链规则来获取渐变。也就是说,第一层的更新与N个数的乘积成正比,其中N是输入数。与最后一层的更新相比,这个数字很可能相对较大或较小。这可以通过观察快速增长的随机变量乘积的方差来看出,乘以的变量越多:
对于具有长输入序列(即长度为L)的循环网络,情况通常比CNN更糟,因为那里的乘积由L个数组成。RNN中的序列长度L通常比CNN中的层数N大得多。是的,我在其他地方读到,校正后的线性单元没有消失梯度问题。我知道自动编码器和波尔兹曼机器是以贪婪的分层方式训练的。卷积神经网络也是这样吗?雷卢斯并非完全摆脱了消失梯度问题,但他们的问题较少。也可以在卷积网络上执行贪婪的分层预训练。它可以像自动编码器一样不受监督,也可以在将层连接到输出时受监督。我相信他们确实监督了这篇论文的预培训:我再次阅读了这篇论文(在我最后的评论中)。不清楚他们是否使用贪婪的分层预训练。他们只是说训练前。目前我还没有其他关于卷积网络分层训练的参考资料,但这是可能的。@Roy这里有一个例子,解释了为什么其他激活函数,比如sigmoid函数,会导致梯度消失。这里有足够的数学让你理解真正的原因。这与问题无关:“使用GPU训练深层神经网络”如果你用GPU训练CNN,那么你就不会受到消失梯度的影响。希望它是清晰的事实上,我认为一个更恰当的说法是,通过使用GPU,你可以使用更小的学习率(计算时间不会是一个问题),这在某种程度上减少了消失的风险。@BsHe这比dnth说的更有意义