训练有素的神经网络的中间层是什么样子的?

人工智能 神经网络 机器学习 深度学习 激活函数
2021-10-18 12:29:40

假设我有一个带有 sigmoid 激活的深度前馈神经网络σ已经在数据集上训练过S. 让我们考虑一个训练点xiS. 我想分析隐藏层的条目hi,l, 在哪里

hi,l=σ(Wl(σ(Wl1σ(σ(W1xi))).

我的直觉是,因为梯度下降在这一点上已经过去了很多次xi在每次迭代时更新权重,计算每个隐藏层的条目xi将非常接近零或非常接近一(由于 sigmoid 激活的影响)。

这是真的?文献中是否有与此类似的理论结果?是否有实证结果表明这一点?

1个回答

tl;博士

你的直觉是正确的。

为什么这是个问题?

sigmoid 激活函数的饱和效应有据可查,因为它是梯度消失问题的罪魁祸首。

简而言之,sigmoid函数的导数是:

dσ(z)dz=σ(z)(1σ(z))

问题是很多时候(特别是如果我们用大值初始化我们的权重),这个神经元的输出要么是1或者0. 这导致梯度为0,这反过来意味着该神经元的权重无法更新。

所以让我们保持较小的权重(绝对值)

最初这似乎是一个好主意,如果我们保持较小的权重,我们将避免饱和。

然而,sigmoid 函数还有另一个问题:它们的梯度最大值为0.25这意味着如果一个神经元的权重小于4,误差会在通过网络向后流动时减小。随着我们向网络添加更多层,这种情况会变得越来越糟。

我们是如何解决这个问题的

自然地,研究人员试图找到更好的权重初始化策略。然而这很难,因为正如我们所见,小权重不好,大权重不好。

一个例子是Mishkin 等人。2016 年提出了一种新的初始化策略,但未能训练具有 sigmoid 激活的深度神经网络。

另一种解决方法是对每一层使用不同的学习率(Xu et al. - Revise Saturated Activation Functions

一段时间后,机器学习社区意识到 sigmoid 函数不适合深度神经网络,并采用了 ReLU 激活,它的缺点更少,可扩展性更好。如今,它们已成为深度学习的事实上的选择。

来源

这个问题已经有好几年了,并且有据可查(我能找到的最早是在 1994 年)。这主要在递归神经网络中进行了探索。

如果你有兴趣阅读这方面的内容,我会推荐Andrej Karpathy 的这篇文章

关于这个主题的一些更正式的来源: