学习笔记:
Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016html
数学符号看不懂的,先看看这里:算法
蒙特卡洛是一个赌城的名字。冯·诺依曼给这方法起了这个名字,增长其神秘性。
蒙特卡洛方法是一个计算方法,被普遍的用于许多领域,用于求值。
相对于肯定性的算法,蒙特卡洛方法是基于抽样数据来计算结果。bootstrap
蒙特卡洛方法的总体思路是:模拟 -> 抽样 -> 估值。app
示例:
好比:如何求\(\pi\)的值。一个使用蒙特卡洛方法的经典例子以下:
咱们知道一个直径为1的圆的面积为\(\pi\)。
把这个圆放到一个边长为2的正方形(面积为4)中,圆的面积和正方形的面积比是:\(\frac{\pi}{4}\)。
若是能够测量出这个比值\(c\),那么\(\pi=c \times 4\)。
如何测量比值\(c\)呢?用飞镖去扎这个正方形。扎了许屡次后,用圆内含的小孔数除以正方形含的小孔数能够近似的计算比值\(c\)。ide
说明:
模拟 - 用飞镖去扎这个正方形为一次模拟。
抽样 - 数圆内含的小孔数和正方形含的小孔数。
估值 - 比值\(c\) = 圆内含的小孔数 / 正方形含的小孔数oop
环境是可模拟的
在实际的应用中,模拟容易实现。相对的,了解环境的完整知识反而比较困难。
因为环境可模拟,咱们就能够抽样。学习
只适合情节性任务(episodic tasks)
由于,须要抽样完成的结果,只适合有限步骤的情节性任务。优化
只要知足蒙特卡洛方法的使用条件,就可使用蒙特卡洛方法。
好比:游戏类都适合:彻底信息博弈游戏,像围棋、国际象棋。非彻底信息博弈游戏:21点、麻将等等。idea
蒙特卡洛方法的总体思路是:模拟 -> 抽样 -> 估值。spa
如何应用到强化学习中呢?
强化学习的目的是获得最优策略。
获得最优策略的一个方法是求\(v_{pi}(s), \ q_{pi}{s, a}\)。 - 这就是一个求值问题。
结合通用策略迭代(GPI)的思想。
下面是蒙特卡洛方法的一个迭代过程:
解释
Exploring Starts 假设 - 指有一个探索起点的环境。
好比:围棋的当前状态就是一个探索起点。自动驾驶的汽车也许是一个没有起点的例子。
on-policy method - 评估和优化的策略和模拟的策略是同一个。
off-policy method - 评估和优化的策略和模拟的策略是不一样的两个。
有时候,模拟数据来源于其它处,好比:已有的数据,或者人工模拟等等。
behavior policy - 行为策略。off policy method中,模拟数据来源的策略。
根据上面的不一样情境,在强化学习中,提供了不一样的蒙特卡洛方法。
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(\pi(s) \gets\) arbitrary
\(Returns(s, a) \gets\) empty listRepeat forever:
Choose \(S_0 \in \mathcal{S}\) and \(A_0 \in \mathcal{A}(S_0)\) s.t. all pairs have probability > 0
Generate an episode starting from \(S_0, A_0\), following \(\pi\)
For each pair \(s,a\) appearing in the episode:
$G \gets $ return following the first occurrence of s,a
Append \(G\) to \(Returns(s, a)\)
\(Q(s, a) \gets average(Returns(s, a))\)
For each s in the episode:
\(\pi(s) \gets \underset{a}{argmax} Q(s,a)\)
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(\pi(a|s) \gets\) an arbitrary \(\epsilon\)-soft policy
\(Returns(s, a) \gets\) empty listRepeat forever:
(a) Generate an episode using \(\pi\)
(b) For each pair \(s,a\) appearing in the episode:
$G \gets $ return following the first occurrence of s,a
Append \(G\) to \(Returns(s, a)\)
\(Q(s, a) \gets average(Returns(s, a))\)
(c) For each s in the episode:
\(A^* \gets \underset{a}{argmax} \ Q(s,a)\)
For all \(a \in \mathcal{A}(s)\):
if \(a = A^*\)
\(\pi(a|s) \gets 1 - \epsilon + \frac{\epsilon}{|\mathcal{A}(s)|}\)
if \(a \ne A^*\)
\(\pi(a|s) \gets \frac{\epsilon}{|\mathcal{A}(s)|}\)
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(C(s,a) \gets\) 0
\(\mu(a|s) \gets\) an arbitrary soft behavior policy
\(\pi(a|s) \gets\) a deterministic policy that is greedy with respect to QRepeat forever:
Generate an episode using \(\mu\):
\(S_0,A_0,R_1,\cdots,S_{T-1},A_{T-1},R_T,S_T\)
\(G \gets 0\)
\(W \gets 1\)
For t = T - 1 downto 0:
\(G \gets \gamma G + R_{t+1}\)
\(C(S_t, A_t) \gets C(S_t, A_t) + W\)
\(Q(S_t, A_t) \gets Q(S_t, A_t) + \frac{W}{C(S_t, A_t)} |G - Q(S_t, A_t)|\)
\(\pi(S_t) \gets \underset{a}{argmax} \ Q(S_t, a)\) (with ties broken consistently)
If \(A_t \ne \pi(S_t)\) then ExitForLoop
\(W \gets W \frac{1}{\mu(A_t|S_t)}\)
动态规划是基于模型的,而蒙特卡洛方法是无模型的。
注:基于模型(model-base)仍是无模型(model-free)是看(状态或者行动)价值(\(G, v(s), q(s,a)\))是如何获得的?
若是是已知的、根据已知的数据计算出来的,就是基于模型的。
若是是取样获得的、试验获得的,就是无模型的。
动态规划的计算的,而蒙特卡洛方法的计算是取样性的(sampling)。
注:引导性的(bootstrapping)仍是取样性的(sampling)是看(状态或者行动)价值(\(G, v(s), q(s,a)\))是如何计算的?
若是是根据其它的价值计算的,就是引导性的。
若是是经过在实际环境中模拟的、取样的,就是取样性的。
引导性和取样性并非对立的。能够是取样的,而且是引导的。
若是价值是根据其它的价值计算的,可是有部分值(好比:奖赏)是取样获得的,就是无模型、取样的、引导性的。
解释:
上面两个区别,能够从计算状态价值\(v_{\pi}(s), q_{\pi}(s, a)\)的过程来看:
动态规划是从初始状态开始,一次计算一步可能发生的全部状态价值,而后迭代计算下一步的全部状态价值。这就是引导性。
蒙特卡洛方法是从初始状态开始,经过在实际环境中模拟,获得一段情节(从头到结束)。
好比,若是结束是失败了,这段情节上的状态节点,本次价值都为0,;若是成功了,本次价值都为1。
下面的比喻(虽然不太恰当,可是比较形象)
想象一棵树,动态规划是先算第一层的全部节点价值,而后算第二层的全部节点价值。
蒙特卡洛方法,随便找一个从根到叶子的路径。根据叶子的值,计算路径上每一个节点价值。
能够看出蒙特卡洛方法比较方便。
蒙特卡洛方法能够从交互中直接学习优化的策略,而不须要一个环境的动态模型。
环境的动态模型 - 彷佛表示环境的状态变化是能够彻底推导的。代表了解环境的全部知识。
说白了,就是能够计算\(v(s), q(s, a)\)这意味着必须了解全部状态变化的可能性。
蒙特卡洛方法只须要一些(多是大量的)取样就能够。
蒙特卡洛方法的每一个状态价值计算是独立的。不会影响其余的状态价值。