performance - 实现最速上升以优化概率

标签 performance algorithm optimization machine-learning binary-search

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

我搜索了有关实现它的提示并找到了 thisWikipedia 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)

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

最佳答案

您已经实现了 bisection method ,这不同于 gradient ascent . (I take it your function is concave?) To do gradient ascent, update param = param + alpha * gradient(param) repeatedly for some suitably chosen alpha > 0 (too small and the computation will take a长时间,太大,它将永远运行,永远不会收敛),直到满足一些收敛标准。

关于performance - 实现最速上升以优化概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16872678/

相关文章:

c - 根据偏移量和长度设置数组中的 bin 字段

c - 动态-ffast-math

c - 我应该使用哪些 gcc 优化标志?

javascript - localeCompare() 与 .Sort 按字母顺序排序

c# - 声明变量时的性能问题

java - 引用游标和直接 Java 代码之间的性能差异

c++ - 寻找一种有效的数据结构来进行快速搜索

algorithm - Burrows-Wheeler 变换 (BWT) - 存储数据

python - 打印数字时添加千位分隔符

javascript - 绑定(bind)父元素与直接绑定(bind)元素有优缺点吗?