我有一个一维凸函数 并想找到最小值 我知道f的所有导数,因此即使忽略凸性,也可以使用任何一维最小化方法轻松解决该问题。但是,我不想忽略凸性:
问题:我怎样才能最好地利用凸性来解决我的一维最小化问题?
例如,值f(a),f(b),f'(a),f'(b)定义了[a,b]上f(x)值和最低顶点的三角形下界这个三角形可能是一个很好的下一个猜测。
我有一个一维凸函数 并想找到最小值 我知道f的所有导数,因此即使忽略凸性,也可以使用任何一维最小化方法轻松解决该问题。但是,我不想忽略凸性:
问题:我怎样才能最好地利用凸性来解决我的一维最小化问题?
例如,值f(a),f(b),f'(a),f'(b)定义了[a,b]上f(x)值和最低顶点的三角形下界这个三角形可能是一个很好的下一个猜测。
如果您有可用的导数,那么在实践中没有任何方法可以击败牛顿法,除非您使用目标函数的非常具体的特征。无论您要解决一个问题还是十亿个问题,这都是正确的:使用牛顿方法可以最有效地解决每个问题,因为它是唯一保证二次收敛的方法,而这通常会导致在更短的时间内收敛到实际精度少于 10 次迭代,通常显着减少。
如果您的目标函数不是凸函数,牛顿法偶尔会遇到一些麻烦,在这种情况下,您需要适当地修改 Hessian。但是,正如您所说,这在您的应用程序中并不重要。
根据要求,我将我的评论升级为答案。
要回答最初的问题,有必要了解您对该功能的了解程度。您可以轻松计算多少个导数?例如,强凸性对一阶方法很重要。对于二阶方法,三阶导数的类似特征可能适用(例如,自洽)。
对于一阶方法,如果你有很强的凸性,那么梯度搜索可以做得很好。如果你不这样做,那么考虑所谓的“加速一阶方法”。理论上,这些方法需要 Lipschitz 连续性,但在实践中,您可以估计和调整 Lipschitz 常数并做得很好。
对于二阶方法,除非您利用函数的特定知识,否则您真的无法击败牛顿。这是一个很大的“除非”。
我们不知道的另一件事是计算值和导数的计算复杂性。我的直觉是梯度下降或牛顿将与您预期的一样好,选择取决于计算 f'' 的成本。除非二阶导数非常昂贵,并且在您的情况下听起来并非如此,否则沃尔夫冈将获胜。
如果数十亿个问题密切相关,那么从附近解决方案的热启动可能会有所帮助,特别是如果您可以在牛顿的二次收敛区域内开始。