实现最陡爬升以优化概率



我想重新实现一个涉及概率优化的方法。我得到的注释包括计算梯度w.r.t.该参数,以及注释"推导在[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)

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

您已经实现了与梯度上升不同的平分方法。(假设函数是凹的?)为了进行梯度上升,在适当选择的alpha> 0(太小的话,计算时间会很长,太大的话,它将永远不会收敛)的情况下重复更新param = param + alpha * gradient(param),直到满足某个收敛准则。

最新更新