我正在玩tensorflow很长一段时间,我有更多的理论问题。通常,当我们训练网络时,我们通常使用GradientDescentOptimizer(可能是adagrad或adam的变体)来最小化损失函数。一般来说,我们似乎正在尝试调整权重和偏差,以便我们获得此损失函数的全局最小值。但问题是我假设这个函数有一个非常复杂的外观,如果你绘制它,有很多局部优化。我想知道的是,我们怎样才能确定Gradient Descent能够找到全局最优并且我们不会立即陷入局部最优状态而远离全局最优值?
我记得,例如当您在sklearn中执行群集时,它通常会通过群集中心的随机初始化多次运行群集算法,并且通过这样做,我们确保不会遇到不是最佳结果的问题。但是我们在张量流中训练人工神经网络时并没有做这样的事情 - 我们从一些随机权重开始,只是沿着函数的斜率行进。
那么,对此有何见解?为什么我们可以或多或少地确定一旦损失停止显着减少,通过梯度下降的训练结果接近全局最小值?
只是为了澄清,为什么我想知道这个问题是如果我们无法确定我们至少接近全球最小值,我们就不能轻易判断出哪两个不同的模型实际上更好。因为我们可以进行实验,得到一些模型评估,表明模型不好......但实际上它只是在训练开始后不久就陷入了局部最低限度。虽然对我们来说似乎更好的其他模型更幸运的是从更好的起点开始训练并且没有在局部最低速度中停留。此外,这个问题意味着我们甚至无法确保从目前可以测试的网络架构中获得最大收益。例如,它可能具有非常好的全局最小值,但很难找到它,而且我们大多陷入局部最小值的不良解决方案,这将远离全局最优并且永远不会看到手头网络的全部潜力。
答案 0 :(得分:5)
梯度下降,就其本质而言,是在本地查看函数(局部梯度)。因此,绝对不能保证它将成为全球最小值。事实上,除非函数是凸的,否则它可能不会。这也是GD喜欢的方法对你开始的初始位置敏感的原因。话虽如此,最近有一篇文章说,在高维解空间中,最大值/最小值的数量并不像以前想象的那么多。
以合理的方式在高维空间中寻找全局最小值似乎是一个未解决的问题。但是,您可能希望更多地关注鞍点而不是最小值。例如,请参阅此文章:
High level description for saddle point problem
这里有更详细的论文(https://arxiv.org/pdf/1406.2572.pdf)
答案 1 :(得分:2)
你的直觉是对的。诸如神经网络之类的复杂模型通常应用于高维输入的问题,其中误差表面具有非常复杂的景观。
不能保证神经网络能够找到全局最优并且陷入局部最小值是很多研究集中的问题。如果您有兴趣了解更多信息,那么最好看一下online learning和momentum等技术,这些技术传统上用于避免局部最小值问题。然而,这些技术本身带来了进一步的困难。某些优化技术无法集成在线学习,并且向反向传播算法添加动量超参数会给培训带来更多困难。
可以找到一个非常好的视频,用于在反向传播期间可视化动量的影响(以及它如何克服局部迷你)here。
在问题编辑后添加 - 请参阅评论
这是神经网络应用于问题的上述特性,这意味着我们经常无法找到全局最优解,因为(在一般情况下)遍历整个搜索空间以获得最优解将使用经典计算难以处理技术(量子计算机可能会因某些问题而改变这一点)。因此,训练神经网络以实现有希望的“良好”局部最优。
如果您有兴趣阅读有关用于找到良好的本地最佳值的技术的更详细信息(即接近全局解决方案的内容),那么阅读的好文章可能是this
答案 2 :(得分:-1)
没有。梯度下降法有助于找出局部最小值。如果全局最小值和局部最小值相同,则只得到实际结果,即全局最小值。