【发布时间】:2016-07-12 15:27:06
【问题描述】:
我玩 tensorflow 有一段时间了,我有更多的理论问题。一般来说,当我们训练一个网络时,我们通常使用 GradientDescentOptimizer(可能是它的变体,如 adagrad 或 adam)来最小化损失函数。一般来说,看起来我们正在尝试调整权重和偏差,以便我们获得这个损失函数的全局最小值。但问题是,如果你绘制它,我假设这个函数看起来非常复杂,有很多局部最优值。我想知道的是,我们如何确保梯度下降找到全局最优,并且我们不会立即陷入某个远离全局最优的局部最优?
我记得,例如,当您在 sklearn 中执行聚类时,它通常会多次运行聚类算法并随机初始化聚类中心,这样做可以确保我们不会陷入非最佳结果。但是我们在 tensorflow 中训练 ANN 时并没有这样做——我们从一些随机权重开始,然后沿着函数的斜率行进。
那么,对此有什么见解吗?为什么我们可以或多或少地确定一旦损失停止显着减少,通过梯度下降的训练结果接近全局最小值?
澄清一下,为什么我想知道这个问题是,如果我们不能确定我们至少接近全局最小值,我们就不能轻易判断 2 个不同模型中的哪一个实际上更好。因为我们可以进行实验,得到一些模型评估,表明模型不好......但实际上它只是在训练开始后不久就停留在局部最小值。而其他对我们来说似乎更好的模型只是更幸运地从更好的起点开始训练并且没有快速陷入局部最小值。此外,这个问题意味着我们甚至不能确定我们可以从我们目前正在测试的网络架构中获得最大的收益。例如,它可能具有非常好的全局最小值,但很难找到它,而且我们大多陷入局部最小值的糟糕解决方案,这将远离全局最优值,并且永远看不到手头网络的全部潜力。
【问题讨论】:
-
梯度下降,就其本质而言,是在局部查看函数(局部梯度)。因此,绝对不能保证它将是全球最小值。事实上,除非函数是凸的,否则它可能不会。这也是类似 GD 的方法对您开始的初始位置敏感的原因。话虽如此,最近有一篇论文说,在高维解空间中,最大值/最小值的数量并没有之前想象的那么多。
-
@Luca 有没有关于人们如何解决这个问题的好论文?我知道当优化器积累足够的动量时,如果你面对它,动量可能有助于“跳出”局部最小值,但这只是我的假设。我的意思是,我不敢相信来自像 berkeleyvision 或谷歌这样的严肃实验室的人没有试图避免你开始训练并立即陷入局部最小值并且没有调查此事的可能性 - 所以我认为一些论文应该是在那里,但我找不到他们
-
嗯,以合理的方式在高维空间中找到全局最小值似乎是一个非常未解决的问题。但是,您可能想更多地关注 \textit{saddle points} 而不是最小值。例如,请参阅此帖子 (kdnuggets.com/2015/11/theoretical-deep-learning.html)
-
@Luca 这是一篇非常酷的论文,它真正阐明了这个问题。你能把它作为答案发布吗?
-
我很高兴你发现我的漫谈有用。完成!
标签: machine-learning neural-network tensorflow deep-learning