我想最小化一些多变量函数。我知道这个函数有一个零点,。
从接近开始(例如 (4.8, 5.2)),我想使用梯度下降法来恢复“正确”值。
我可以绘制曲面并且它显然有一个最小点,但是我的算法无法收敛
- 从一些初始的开始。计算
计算和通过评估例如
更新为的等价物
迭代
有什么理由为什么这种一般方法不起作用?
我想最小化一些多变量函数。我知道这个函数有一个零点,。
从接近开始(例如 (4.8, 5.2)),我想使用梯度下降法来恢复“正确”值。
我可以绘制曲面并且它显然有一个最小点,但是我的算法无法收敛
计算和通过评估例如
更新为的等价物
迭代
有什么理由为什么这种一般方法不起作用?
有几个问题可能会导致该问题:
首先,您使用有限差分近似进行梯度计算。这是必要的吗?你能解析
其次,有限差分近似只对小的有效。不是很平滑(你的看起来足够平滑),使用太小的值会导致不稳定。当函数表现良好时,我使用之类的东西来测试解析梯度。
假设您设法正确计算梯度。那么步长的选择也很重要。选择下降步长有不同的方法,但如果你想保持简单,请执行以下操作:
1.选择一个不是很大的起始值或。
2.在每次迭代中,如果你设法减小函数的值,则使用像(其中是步长的上限,如或更小)。如果函数的值没有减少,则通过执行 gamma 。
3.当太小或函数值的下降太小时,停止。
对于凸和平滑的函数,这三个应该足以让你接近最小值。对于更复杂的示例,使用现有的优化方法(如 quasi-newton 或 lbfgs)可以获得非常好的结果。