我想重新实现一个涉及概率优化的方法。我得到的笔记包括梯度w.r.t的计算。该参数,以及注释“导数在[0,1]中有一个固定点,我们使用最陡峭的上升”。
我搜索了实现它的提示,找到了this和Wikipedia entry on hill climbing。(这两种方法都没有给出非常具体的建议。)
我认为把它和二进制搜索放在一起,并计划用下面的方式(伪代码)来实现它是一个好主意:
steepest_ascent(param, min_itvl, max_itvl):
if (max_itvl - min_itvl < 0.01):
return param
d = gradient(param)
if (d == 0):
return param
if (d > 0):
return steepest_ascent((param + max_itvl) / 2, param, max_itvl)
if (d < 0):
return steepest_ascent((min_itvl + param) / 2, min_itvl, param)整个过程是迭代过程的一部分,所以它的名称是这样的(因为它是间隔为[0,1]的概率):
param_new = steepest_ascent(param_old, 0, 1)这里有没有明显可以改进的地方?
发布于 2013-06-01 21:05:33
您已经实现了与gradient ascent不同的bisection method。(我认为你的函数是凹的?)为了进行梯度上升,对一些适当选择的α>0重复更新param = param + alpha * gradient(param) (太小,计算将花费很长时间,太大,并且它将永远运行,因为永远不会收敛),直到满足某些收敛标准。
https://stackoverflow.com/questions/16872678
复制相似问题