【采样】多项式采样

思路:

将每个概率值对应到[0,1]区间内的各个子区间(概率值大小体现在子区间的长度上),每次采样时,按照均匀分布随机生成一个[0,1]区间内的值,其落到哪个区间,则该区间概率值对应的元素即为被采样的元素;

算法:
1、先对概率值从大到小排列(不是必要过程,是便于加速的技巧,这样每次查找时优先检测随机数是否落在大概率的区间内,减少比较次数);
2、生成一个[0,1)区间内的随机数x (注意,Rand().nextDouble()得到的是[0,1)区间内的数,而wikipedia给出的算法中要求生成的是(0,1)区间的数);
3、将x与概率值列表中的各值pi逐个比较,并累加已比较过的前i-1个概率值的累加和sum:
若x落在[sum, sum+pi)区间内,则pi对应的元素被采样并返回 (注意区间的开闭应该参考步骤2中的情况);
否则,将pi累加入sum,继续将x与p(i+1)比较;

Tips:
若程序退出时仍未采到合法样本,则可能给定的概率分布不满足∑pi=1的条件(且x刚好落在[1-sum, 1)区间内);

应用场景:
机器学习(如强化学习)中,利用softmax函数定义policy,根据多项分布选择对应的action(使得agent有较大概率选到当前模型下的最佳action,又有一定的几率去探索其他action );
softmax policy的另一种替代方式是epsilon-learning中用epsilon来控制探索和利用的几率的方式,即以epsilon的概率进行探索(随机选一个action),以1-epsilon的概率进行利用(选当前模型下最佳action);

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值