强化学习-蒙特卡罗法
1. 前言
从本章起,我们开始解决更贴近实际的问题。前面提到我们接触过的问题有一个特点,即我们可以知道环境运转的细节,具体说就是知道状态转移概率\(P(s_{t+1}|s_t,a_t)\)。对蛇棋来说,我们可以看到蛇棋的棋盘,也就可以了解到整个游戏的全貌,这时我们相当于站在上帝视角,能够看清一切情况。
在很多实际问题中,我们无法得到游戏的全貌,也就是说,状态转移的信息\(P(s_{t+1}|s_t, a_t)\)无法获得。
一般来说,我们知晓状态转移概率的问题称为“基于模型”的问题(Model-based),将不知晓的称为“无模型”问题(Model-free)。后面我们要继续升级我们的问题,模拟一个真人去玩游戏,无法知道所有游戏的全貌。
2. Model-free原理
- 确定一个初始策略(这和前面的算法一致)。
- 用这个策略进行游戏,得到一些游戏序列(Episode):\({s_1,a_1,s_2,a_2,...,s_n,a_n}\)
- 一旦游戏的轮数达到一定数目,就可以认为这些游戏序列代表了当前策略与环境交互的表现,就可以将这些序列聚合起来,得到状态对应的值函数。
- 得到了值函数,就相当于完成了策略评估的过程,这样就可以继续按照策略迭代的方法进行策略改进的操作,得到更新后的策略。如果策略更新完成,则过程结束;否则回到步骤2。
上面的流程十分清晰地介绍了学习的过程,此时学习的关键就落在了下面两个问题上。
- 如何得到这些游戏序列?
- 如何使用序列进行评估?
我们用2个方法介绍Model-free的过程,本篇介绍“蒙特卡罗法(Monte Carlo Method)”和下一篇介绍“时序差分法(Temporal Difference Method)”
3. 蒙特卡罗法原理
3.1 如何使用序列进行评估
本节我们介绍蒙特卡罗法。在前面的章节里,我们曾介绍当环境信息,也就是状态转移概率已知时,可以使用Bellman公式,通过不断迭代得到状态-行动值函数:
然后通过值函数进行策略改进。而在无模型问题中,状态转移概率将无法知晓。于是我们需要把公式转变为
看到了等号右边的期望,我们很自然地联想到了蒙特卡罗法,它是一种通过随机采样估计期望值的方法,假设我们通过一些方法,从状态\(s_t\)和行动\(a_t\)开始不断地与环境交互,得到了大量的样本序列
得到对应的回报序列
其中N代表随机采样的轮数,K代表到达结束的步数。
然后我们有一个状态-行动值函数的公式:
通过大量的随机采样,上面这个公式能够比较号的描述初始的状态-行动值函数。
3.2 状态-行动值函数更新
令状态行动价值为\(q\),当前的时间为\(t\),积累的数量为\(N\),我们要求的值为\(q^N_t\),当前已知的值为\(q^{N-1}_t\)和\(N\),每一个时刻的价值为\(q'^i_t\),于是可以得到:
我们观察下,上面公式很像梯度下降法\(\theta_t=\theta_{t-1}-\alpha\nabla{J}\),因为我们想要值函数尽量大,所以这里是一个梯度上升的过程。
3.3 蒙特卡罗法步骤
以上就是蒙特卡罗法的全部内容,我们可以将它的算法全过程总结如下。
- 让Agent和环境交互后得到交互序列。
- 通过序列计算出每一时刻的价值。
- 将这些价值累积到值函数中进行更新。
- 根据更新的值函数更新策略”
4. 探索与利用
4.1 如何得到这些游戏序列
那么,为了达到和基于模型的算法接近的效果,我们首先要做的是确保当前的问题有遍历所有状态-行动对的可能。
在一些状态非常多的环境中,我们很难遍历所有的状态,这里采用一种叫\(\epsilon-greedy\)的算法,首先随机生成一个0~1的数,然后用这个随机数进行判断,如果随机数小于某个值\(\epsilon\),就采用完全随机的方式产生行动,此时每个行动产生的概率是一样的;如果随机数不小于某个值\(\epsilon\),就选择当前的最优策略。
\(\epsilon-greedy\)算法实际上是在解决强化学习中的一个经典问题:探索与利用。这是两种与环境交互的策略。
- 探索:是指不拘泥于当前的表现,选择一些不同于当前策略的行动。
- 利用:就是持续使用当前的最优策略,尽可能地获得更多的回报。
5. 总结
蒙特卡罗法是第一个不基于模型的强化问题求解方法。它可以避免动态规划求解过于复杂,同时还可以不事先知道环境转化模型,因此可以用于海量数据和复杂模型。但是它也有自己的缺点,这就是它每次采样都需要一个完整的状态序列。如果我们没有完整的状态序列,或者很难拿到较多的完整的状态序列,这时候蒙特卡罗法就不太好用了,也就是说,我们还需要寻找其他的更灵活的不基于模型的强化问题求解方法。