我玩了很长一段时间的tensorflow,我有更多的理论问题。一般来说,当我们训练网络时,我们通常使用 GradientDescentOptimizer(可能是它的变体,如 adagrad 或 adam)来最小化损失函数。一般来说,我们似乎正在尝试调整权重和偏差,以便获得该损失函数的全局最小值。但问题是,我认为如果你绘制这个函数,它看起来会非常复杂,并且有很多局部最优值。我想知道的是,我们如何才能确保梯度下降找到全局最优值,并且我们不会立即陷入某些局部最优值,而不是远离全局最优值?
我记得,例如,当您在 sklearn 中执行聚类时,它通常会多次运行聚类算法,并随机初始化聚类中心,通过这样做,我们可以确保我们不会陷入非最佳结果。但在 tensorflow 中训练人工神经网络时,我们并没有做这样的事情 - 我们从一些随机权重开始,然后沿着函数的斜率行进。
那么,对此有什么见解吗?为什么一旦损失不再大幅下降,我们就能或多或少地确定梯度下降训练的结果接近全局最小值?
澄清一下,我对这个问题感到好奇的原因是,如果我们不能确定我们至少接近全局最小值,我们就无法轻易判断两种不同模型中哪一个实际上更好。因为我们可以进行实验,得到一些模型评估,这表明模型不好......但实际上它只是在训练开始后不久就陷入了局部最小值。而其他对我们来说似乎更好的模型只是更幸运地从更好的起点开始训练,并且没有快速陷入局部最小值。此外,这个问题意味着我们甚至无法确定我们是否能从当前正在测试的网络架构中获得最大 yield 。例如,它可能具有非常好的全局最小值,但很难找到它,而且我们大多会陷入局部最小值的糟糕解决方案,这将远离全局最优值,并且永远不会看到手头网络的全部潜力。
最佳答案
梯度下降本质上是在局部观察函数(局部梯度)。因此,绝对不能保证它将是全局最小值。事实上,除非函数是凸函数,否则可能不会。这也是类似 GD 的方法对起始位置敏感的原因。话虽如此,最近有一篇论文说,在高维解空间中,最大值/最小值的数量并不像以前想象的那么多。
以合理的方式找到高维空间中的全局最小值似乎是一个 Unresolved 问题。但是,您可能希望更多地关注鞍点而不是最小值。例如,请参阅这篇文章:
High level description for saddle point problem
这里有更详细的论文 ( https://arxiv.org/pdf/1406.2572.pdf )
关于machine-learning - TensorFlow - GradientDescentOptimizer - 我们真的找到了全局最优吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333121/