我想在MATLAB中加速一个凸优化问题的收敛速度。
我的目标函数是具有三个参数的凸函数,我使用梯度上升来最大化。
现在,我正在手动编写迭代,终止条件是新参数值和旧参数值之间的差异非常小(大约0.0000001)。我不能基于迭代次数来终止,因为它不能保证它已经收敛到最优解。
所以,它需要很长时间才能收敛--几乎需要2天!有没有什么方法可以加快速度呢?
实际上,我的目标函数只有三个参数。我知道第一个参数的值应该大于第二个参数的值。
因此,从初始条件开始,第二个参数的值开始快速增加。在达到某一点后,第一个参数的值开始快速增加。当第一个参数的值开始增加时,第二个参数的值开始缓慢减少。最后,我让第一个参数的值大于第二个参数的值。
有没有办法加快这个过程?2天是很长的一段时间。此外,计算梯度也很耗时。它需要大量的矩阵计算。
我不想从定义的参数值开始,比如parameter1的值大于second的值。而且,第一个参数不必总是大于第二个参数。我只知道哪个参数值应该更大。有什么建议吗?
发布于 2012-09-19 23:36:06
如果渐变的计算非常慢,而你仍然想做一个手动实现,你可以尝试一下,它将需要更多的步骤,但可能会快得多,因为步骤非常简单:
定义步长
尝试变量沿步长方向移动的所有点-1次、0次或1次(3^3 = 27种可能性)
选一个最好的
如果最好的是前一个,则将步长乘以0.5。
当然,这个过程的成功取决于函数的属性。此外,应该注意的是,更简单的解决方案可能是将所需的差值设置为类似于0.0001的值
https://stackoverflow.com/questions/10574464
复制相似问题