从本章起,咱们开始解决更贴近实际的问题。前面提到咱们接触过的问题有一个特色,即咱们能够知道环境运转的细节,具体说就是知道状态转移几率\(P(s_{t+1}|s_t,a_t)\)。对蛇棋来讲,咱们能够看到蛇棋的棋盘,也就能够了解到整个游戏的全貌,这时咱们至关于站在上帝视角,可以看清一切状况。算法
在不少实际问题中,咱们没法获得游戏的全貌,也就是说,状态转移的信息\(P(s_{t+1}|s_t, a_t)\)没法得到。函数
通常来讲,咱们知晓状态转移几率的问题称为“基于模型”的问题(Model-based),将不知晓的称为“无模型”问题(Model-free)。后面咱们要继续升级咱们的问题,模拟一个真人去玩游戏,没法知道全部游戏的全貌。学习
上面的流程十分清晰地介绍了学习的过程,此时学习的关键就落在了下面两个问题上。spa
咱们用2个方法介绍Model-free的过程,本篇介绍“蒙特卡罗法(Monte Carlo Method)”和下一篇介绍“时序差分法(Temporal Difference Method)”blog
本节咱们介绍蒙特卡罗法。在前面的章节里,咱们曾介绍当环境信息,也就是状态转移几率已知时,可使用Bellman公式,经过不断迭代获得状态-行动值函数:
\[ q_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{\pi}(s_{t+1})] \]游戏
而后经过值函数进行策略改进。而在无模型问题中,状态转移几率将没法知晓。因而咱们须要把公式转变为class
\[ q_{\pi}(s_t,a_t)=E_{s_{t+1}-p \pi}[\sum_{k=0}^{\infty}\gamma^kr_{t+k}] \]
看到了等号右边的指望,咱们很天然地联想到了蒙特卡罗法,它是一种经过随机采样估计指望值的方法,假设咱们经过一些方法,从状态\(s_t\)和行动\(a_t\)开始不断地与环境交互,获得了大量的样本序列原理
\[ \{s_t,a_t,s_{t+1}^i,a_{t+1}^i,...,s_{t+K}^i,a_{t+K}^i\}_{i=1}^N \]
获得对应的回报序列
\[ \{r_t,r_{t+1}^i,...,r_{t+K}^i\}_{i=1}^N \]随机数
其中N表明随机采样的轮数,K表明到达结束的步数。sed
而后咱们有一个状态-行动值函数的公式:
\[ q(s,a) = \frac{1}{N}\sum_{i=0}^N\sum_{k=0}^K\gamma^kr^i_{t+k} \]
经过大量的随机采样,上面这个公式可以比较号的描述初始的状态-行动值函数。
令状态行动价值为\(q\),当前的时间为\(t\),积累的数量为\(N\),咱们要求的值为\(q^N_t\),当前已知的值为\(q^{N-1}_t\)和\(N\),每个时刻的价值为\(q'^i_t\),因而能够获得:
\[ q^N_t = q^{N-1}_t + \frac{1}{N}(q'^N_t - q^{N-1}_t) \]
咱们观察下,上面公式很像梯度降低法\(\theta_t=\theta_{t-1}-\alpha\nabla{J}\),由于咱们想要值函数尽可能大,因此这里是一个梯度上升的过程。
以上就是蒙特卡罗法的所有内容,咱们能够将它的算法全过程总结以下。
那么,为了达到和基于模型的算法接近的效果,咱们首先要作的是确保当前的问题有遍历全部状态-行动对的可能。
在一些状态很是多的环境中,咱们很难遍历全部的状态,这里采用一种叫\(\epsilon-greedy\)的算法,首先随机生成一个0~1的数,而后用这个随机数进行判断,若是随机数小于某个值\(\epsilon\),就采用彻底随机的方式产生行动,此时每一个行动产生的几率是同样的;若是随机数不小于某个值\(\epsilon\),就选择当前的最优策略。
\(\epsilon-greedy\)算法其实是在解决强化学习中的一个经典问题:探索与利用。这是两种与环境交互的策略。
蒙特卡罗法是第一个不基于模型的强化问题求解方法。它能够避免动态规划求解过于复杂,同时还能够不事先知道环境转化模型,所以能够用于海量数据和复杂模型。可是它也有本身的缺点,这就是它每次采样都须要一个完整的状态序列。若是咱们没有完整的状态序列,或者很难拿到较多的完整的状态序列,这时候蒙特卡罗法就不太好用了,也就是说,咱们还须要寻找其余的更灵活的不基于模型的强化问题求解方法。