机器学习通常处理具有许多局部最小值的函数的优化。具有隐藏单元的前馈神经网络就是一个很好的例子。无论这些函数是离散的还是连续的,都没有达到全局最小值并停止的方法。很容易证明,即使连续函数是一维且光滑的(具有无限多的导数),也没有通用算法可以找到全局最小值。在实践中,所有用于学习神经网络的算法都陷入了局部最小值。很容易检查:创建一个随机神经网络,对随机输入做出大量响应,然后尝试学习另一个具有相同架构的神经网络来复制响应。虽然存在完美的解决方案,但无论是反向传播还是任何其他学习算法都无法发现它,
一些学习方法,如模拟退火或遗传算法,探索了许多局部最小值。对于连续函数,有像梯度下降这样的方法,可以找到最接近的局部最小值。它们的速度要快得多,这就是它们在实践中被广泛使用的原因。但是如果有足够的时间,前一组方法在训练集误差方面优于后者。但是在合理的时间限制下,对于现实世界的问题,后一组通常更好。
对于某些模型,例如逻辑回归,存在一个局部最小值,函数是凸函数,最小化会收敛到最小值,但模型本身很简单。
这就是残酷的事实。
还要注意,收敛证明和收敛到最佳解决方案的证明是两个不同的东西。K-means 算法就是一个例子。
最后,对于某些模型,我们根本不知道如何学习。例如,如果输出是输入的任意可计算函数,我们不知道好的算法会在合理的时间内找到实现该函数的图灵机或等效机器。例如,如果 f(1)=2, f(2)=3, f(3)=5, f(4)=7, ..., f(10)=29(十个首素数),我们不不知道任何能够在合理时间内预测 f(11)=31 的学习算法,除非它已经知道素数的概念。