假设我有一个带有 sigmoid 激活的深度前馈神经网络已经在数据集上训练过. 让我们考虑一个训练点. 我想分析隐藏层的条目, 在哪里
我的直觉是,因为梯度下降在这一点上已经过去了很多次在每次迭代时更新权重,计算每个隐藏层的条目将非常接近零或非常接近一(由于 sigmoid 激活的影响)。
这是真的?文献中是否有与此类似的理论结果?是否有实证结果表明这一点?
假设我有一个带有 sigmoid 激活的深度前馈神经网络已经在数据集上训练过. 让我们考虑一个训练点. 我想分析隐藏层的条目, 在哪里
我的直觉是,因为梯度下降在这一点上已经过去了很多次在每次迭代时更新权重,计算每个隐藏层的条目将非常接近零或非常接近一(由于 sigmoid 激活的影响)。
这是真的?文献中是否有与此类似的理论结果?是否有实证结果表明这一点?
你的直觉是正确的。
sigmoid 激活函数的饱和效应有据可查,因为它是梯度消失问题的罪魁祸首。
简而言之,sigmoid函数的导数是:
问题是很多时候(特别是如果我们用大值初始化我们的权重),这个神经元的输出要么是或者. 这导致梯度为,这反过来意味着该神经元的权重无法更新。
最初这似乎是一个好主意,如果我们保持较小的权重,我们将避免饱和。
然而,sigmoid 函数还有另一个问题:它们的梯度最大值为!这意味着如果一个神经元的权重小于,误差会在通过网络向后流动时减小。随着我们向网络添加更多层,这种情况会变得越来越糟。
自然地,研究人员试图找到更好的权重初始化策略。然而这很难,因为正如我们所见,小权重不好,大权重不好。
一个例子是Mishkin 等人。2016 年提出了一种新的初始化策略,但未能训练具有 sigmoid 激活的深度神经网络。
另一种解决方法是对每一层使用不同的学习率(Xu et al. - Revise Saturated Activation Functions)
一段时间后,机器学习社区意识到 sigmoid 函数不适合深度神经网络,并采用了 ReLU 激活,它的缺点更少,可扩展性更好。如今,它们已成为深度学习的事实上的选择。
这个问题已经有好几年了,并且有据可查(我能找到的最早是在 1994 年)。这主要在递归神经网络中进行了探索。
如果你有兴趣阅读这方面的内容,我会推荐Andrej Karpathy 的这篇文章。
关于这个主题的一些更正式的来源: