如你所见,这个简单的算法成功地找到了峰值。但如图所示,这并非函数的全局最大值。在所有的优化算法中,这都是一个潜在的问题,但还是有解决办法的。
在这个简单的例子中,我们只最大化了单变量函数。这样虽然可以有效地说明这个概念,但在现实生活中,可能存在数百万变量,神经网络中就是如此。下一部分将会介绍,如何将这样简单的算法泛化到多维函数的优化。
多维优化
在单变量函数中,可以将导数视为切线的斜率。但遇到多个变量,则不能如此。先来看个具体的例子。定义函数:
这个函数将是这部分的 toy example 。
对 f(x,y)作图。
这是一个有两个变量的函数,图像是一个曲面。马上可以发现,这样很难定义切线的概念,因为与曲面上一个点相切的线有很多。事实上,可以做一个完整的平面。这就是切平面。
f(x,y)在点 (0,0) 处的切平面。
但切平面有两个非常特别的方向。以点 (0,0) 处的切平面为例。对每一个多变量函数来说,先固定所有变量只取一个能动的变量,这样这个函数基本上就变成单变量函数了。示例函数变为: