我想重新实现一个涉及概率优化的方法。
我得到的笔记包括渐变的计算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)
这里有什么东西可以明显改善吗?
答案 0 :(得分:2)
您已实施bisection method,与gradient ascent不同。 (我认为你的函数是凹的吗?)为了做渐变上升,重复更新param = param + alpha * gradient(param)
一些适当选择的alpha&gt; 0(太小,计算将花费很长时间,太大而且永远不会收敛而永远运行),直到满足一些收敛标准。