0

我想重新实现一种涉及概率优化的方法。我得到的注释包括计算该参数的梯度,以及注释“推导在 中有一个固定点[0,1],我们使用最陡上升”。

我搜索了有关实现它的提示,并找到了这个关于爬山的维基百科条目。(两者都没有给出非常具体的建议。)

我认为将它与二进制搜索放在一起并计划以以下方式(伪代码)实现它是一个好主意:

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)

这里有什么可以明显改进的地方吗?

4

1 回答 1

2

您已经实现了与梯度上升不同的二分法。(I take it your function is concave?) To do gradient ascent, update repeatedly for some suitably chosen alpha > 0 (too small and the computation will take a long time, too large and it will run forever by never converging), until some满足收敛标准。param = param + alpha * gradient(param)

于 2013-06-01T13:05:33.400 回答