在蒙特卡洛学习中,当你记录了之前访问过的状态并采取了行动后,当到达一个结束状态时你会怎么做?

人工智能 强化学习 蒙特卡罗方法
2021-10-21 11:06:00

当您使用基于蒙特卡罗的学习来训练模型时,会记录每个步骤的状态和采取的行动,然后在某个时候达到最终状态并且代理会收到一些奖励 - 那您会做什么?

假设要达到这个最终奖励状态需要 100 个步骤,您会更新这 100 个状态/动作/奖励的完整推出,然后开始下一集,还是然后将最终奖励“冒泡”到之前的状态并更新这些?

例如

  • 处理全部 100 项体验的更新。要么停在这里,要么...

  • 将最终奖励冒泡到第 99 步,并处理 99 状态/动作/奖励的更新。

  • 将最终奖励冒泡到第 98 步,并处理 98 状态/动作/奖励的更新。

  • 依此类推,一直到第一步……

或者,您是否只是为完整的 100 步部署处理更新,仅此而已?

或者也许这是两种不同的方法?有没有一种情况是你想要一个而不是另一个?

1个回答

我假设您正在询问有关价值估计的蒙特卡洛模拟,也许是蒙特卡洛控制学习代理的一部分。

所有基于价值的方法的基本方法是估计预期回报,通常是行动价值Q(s,a)这是采取行动的预期未来回报的总和a处于状态s. 蒙特卡洛方法对此采取了一种直接而简单的方法,即将环境运行到一个情节的结尾并测量回报。该回报是所有可能回报中的一个样本,因此可以将其与其他观察到的回报进行平均以获得估计值。一个小问题是回报取决于当前策略,并且在控制场景中会发生变化,因此需要对平均值进行新近加权以进行控制,例如使用固定的学习率α在更新中Q(s,a)Q(s,a)+α(GQ(s,a))

鉴于此,您几乎可以运行任何方法来计算观察到的状态/动作对的回报。您会发现通常使用“起泡”方法 - 通常称为备份的过程- 从剧集结尾向后工作。

如果你有一个情节t=0t=T以及状态、动作、奖励的记录s0,a0,r1,s1,a1,r2,s2,a2,r3...sT1,aT1,rT,sT(注意索引,奖励跟随状态/动作,没有r0和不aT),那么可以使用以下算法来计算个人收益gt

g0

为了t=T1向下0

grt+1+γg

Q(st,at)Q(st,at)+α(gQ(st,at))

这种向后工作是一种处理奖励的有效方法,并为所有状态的动作值分配折扣,在情节中观察到动作对。

或者也许这是两种不同的方法?

只计算第一个状态/动作的回报是有效的,并随机选择状态/动作开始(称为探索开始)。或者实际上采用这种方式生成的任意一组估计。你不必使用所有的回报估计,但你需要有一个算法来保证长期更新所有状态/动作对的值。

有没有一种情况是你想要一个而不是另一个?

大多数情况下,您会看到所有观察到的状态/动作对的备份返回估计,因为这更有效,而且蒙特卡洛已经是一种高方差方法,需要大量样本才能获得良好的估计(尤其是对于早期状态/动作在长剧集开始时配对)。

但是,如果您使用诸如神经网络之类的函数逼近,则需要避免输入相关数据以进行学习。来自单个情节的一系列状态/动作对将被关联。有几种方法可以避免这种情况,但一种简单的方法可能是从每次推出中仅抽取一个样本。如果部署可以非常快地运行,您可能会这样做,可能在计算机上进行模拟。但其他替代方案可能更好——例如将所有状态、动作、返回值放入一个数据集中,在 N 集之后对其进行洗牌并从所有内容中学习。