强化学习基础-蒙特卡洛(Monte Carlo)

在接触强化学习过程中,大家可能在很多场合听说蒙特卡洛这个词,例如Monte Carlo Tree Search,Monte Carlo CFR。实际即便在策略梯度(Policy Gradients)算法中也使用了蒙特卡洛方法,本文将介绍Monte Carlo算法和在强化学习中的应用。

基本概念

Monte Carlo方法源于20世纪40年代,由冯.诺依曼,斯塔尼斯拉夫·乌拉姆在核武器研究过程中提出。和许多以作者名字(如拉格朗日定理,柯西定理)命名不同,Monte-Carlo其实并不是某位学者名字,实际上是一座位于摩洛哥的赌场。统计和概率学经常会将概率和博彩联系在一起,或许某天也会出现澳门葡京方法/定理

Monte Carlo本质上是一种统计学方法,这类方法通过随机抽样,根据随机事件出现的频率来估算随机变量的特征

大家小时候都学过撒豆子估算不规则图形的面积,使用一个规则图形包裹不规则图形,然后将一定数量的豆子均匀的洒向这个图形,通过计算不规则图形中豆子比例和规则形状的面积,即可以估算出不规则形状的面积。随着计算机技术产生,撒豆子被随机数替代,这一类方法也被各个领域广泛使用。

如果我们并不知道圆形面积计算公式,假设圆形半径为1,我们使用变长为2的正方形包裹这个圆形,然后均匀采样,随着样点数量的增加,圆形面积将越来越接近理论值

from math import sqrt, pi
from random import uniform

# 正方形边长和面积
side_length = 2.0
square_area = side_length * side_length
# 圆形半径
radius = side_length / 2

def in_circle(x, y):
  return sqrt(x * x + y * y) < radius

num_sample = 10000000
num_in_circle = 0
for i in range(num_sample):
  x = uniform(-1, 1)
  y = uniform(-1, 1)
  num_in_circle += in_circle(x, y)

# 落入圆形的样点个数
ratio = num_in_circle / num_sample
# 圆形面积
circle_area = ratio * square_area
print('circle area: {}, theory area: {}'.format(circle_area, pi * radius * radius))

执行结果

circle area: 3.1413452, theory area: 3.141592653589793

强化学习中的应用

基础应用

在深度学习和强化学习领域中,许多算法实际上使用了Monte-Carlo方法,并没有给它冠名。这些算法如此基础,我们经常会忽略它的存在。

例如由于计算资源受限,深度学习把一个批次样本的梯度作为整体梯度的估计,来更新模型的权重,同时通过多次采样(迭代次数,或者step数)修正偏差。

经典的强化学习算法中,无论Q-Learning还是Policy Gradient算法中,都需要估算累计收益,例如多步TD Target

Monte-Carlo Tree Search

蒙特卡洛树搜索包含两层含义,首先它是一种树搜索方法,和深度优先、广度优先搜索算法类似,它需要对树进行遍历。其次蒙特卡洛强调了它并不是一种确定性的搜索算法,而是通过启发式的方式,让树向着最优解方向生长,降低搜索空间,实现了类似剪枝的功能。

具体流程如下:

  • 选择(Selection): 从根节点开始,通过UCT(Upper Confidence Bounds to Trees)方法向下直至选择出一个叶子节点。UCT方法对每个节点进行打分,通常包含利用-探索两个分量。利用分量源于先验知识,例如之前仿真的结果,有时也会包含神经网络给出的评分;探索分量一般和这个节点的访问次数有关,如果节点访问的越少,则探索分量的值越大。

  • 扩展(Expansion):选择结束之后,我们得到一个叶子节点。当叶子节点已经被充分评估时,会在这个节点基础上拓展出一个新的叶子节点。评估是否充分一般以这个叶子节点已经被仿真过多少次来衡量。

  • 仿真(Simulation):从叶子节点开始游戏,直至游戏结束。

  • 反向传播(Back Propagation):仿真结束后,我们会得到本次模拟的结果,拿这个结果刷新沿途节点分值。

Monte-Carlo CFR

CFR算法需要对博弈树进行遍历,从而计算某个动作的遗憾值。当博弈树规模非常大时,遍历整棵树的成本非常高,改进的方法:

  • 在单局博弈中,对动作进行剪枝。例如在某个信息集上,所有合法的动作有M个,算法人为的限制它的搜索为N,N的数值还可以随着遍历层级的加深而减少;
  • 作为补充,算法需要增加博弈的次数,尽可能覆盖更多的动作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值