强化学习(一)—— 基本概念及马尔科夫决策过程(MDP)
1、策略与环境模型
强化学习是继监督学习和无监督学习之后的第三种机器学习方法。强化学习的整个过程如下图所示:
具体的过程可以分解为三个步骤:
1)根据当前的状态 $s_t$ 选择要执行的动作 $ a_t $。
2)根据当前的状态 $s_t $ 和动作 $ a_t$ 选择转移后的状态 $s_{t+1} $。
3)根据在当前状态 $s_t$ 采取动作 $a_t$ 给出对应的奖励 $ r_{t+1} $。
因此我们可以得到强化学习中三个重要的要素:环境的状态 $S$,个体的动作 $A$,环境的奖励 $R$。
通过不断的重复上述三个过程就可以得到一条状态—动作链,其表示如下:
$ {s_0, a_0, s_1, a_1, ......s_{t-1}, a_{t-1}, s_t} $
现在我们来具体看看是如何生成动作—状态链的:
1)从状态到动作
从状态到动作是有Agent 的策略 $\pi$ 决定的,从条件概率上来说当前的动作选择应该和之前的所有状态和动作都有关系,如下在时刻 $t$ 的动作应该是:
$ {a_t}^* = argmax_{a_{t, i}} p(a_{t, i}|{s_0, a_0, ..., s_t}) $
然而对于上面的式子计算复杂度太高了,引入马尔科夫理论,认为当前的动作选择之和当前的状态有关,于是上面的公式就变成了:
$ {a_t}^* = argmax_{a_{t, i}} p(a_{t, i}|s_t) $
个体的策略函数 $\pi$ 可以表示为:
$ \pi(a|s) = P(A_t=a | S_t=s)$
2)从状态到状态
在当前状态转移到下一状态时,我们同样假设下一状态之和当前状态以及当前动作相关,具体表达式如下:
$ P(S_{t+1} | S_t, a_t)$
2、值函数与贝尔曼公式
在强化学习中我们该如何评价我们每一步动作的好坏呢?这就需要值函数了。在执行每一个动作时都会有一个对应的奖赏,我们的目的就是要使得最终的加起来的奖赏最高。表达式如下:
$ max \sum\limits_{t=0}^n r_t $
当n无限大时,上链的式子是一个无穷数列,且无法收敛,因此我们也无法计算出最高的奖赏。针对这个问题引入了奖励衰减因子 $\gamma$,表达式变成:
$ max \sum\limits_{t=0}^n \gamma^t\, r_t $
根据上面的结果可以给出 $t$ 时刻的状态价值函数,状态价值函数是期望值。在下式中的$G_t$表示从状态$S_t$出发到终点一条完整的序列的回报值,从$S_t$通过随机性采样到终点会得到无数条随机的$G_t$,而我们要得到一个确定的状态价值函数,那就是对随机值取期望即可。
$ v_{\pi}(s) = \mathbb{E}_{\pi}(G_t|S_t=s ) = \mathbb{E}_{\pi}(r_{t+1} + \gamma r_{t+2} + \gamma^2r_{t+3}+...|S_t=s) $
上面的公式又可以称为贝尔曼公式。对状态价值函数使用代换消元法可以推导出状态价值函数 $ v_{\pi}(s)$ 的递推关系:
$ v_{\pi}(s) = \mathbb{E}_{\pi}(r_{t+1} + \gamma v_{\pi}(S_{t+1}) |S_t=s) $
根据上式可知在 $t$ 时刻的状态 $S_T$ 和 $t+1$ 时刻的状态 $S_{T+1}$ 是满足递推关系的。
除了上述的状态价值函数之外,还有一个状态-动作价值函数 $q_{\pi}(s,a)$,其表达式如下:
$ q_{\pi}(s,a) = \mathbb{E}_{\pi}(G_t|S_t=s, A_t=a) = \mathbb{E}_{\pi}(r_{t+1} + \gamma r_{t+2} + \gamma^2r_{t+3}+...|S_t=s,A_t=a) $
$ q_{\pi}(s,a) = \mathbb{E}_{\pi}(r_{t+1} + \gamma q_{\pi}(S_{t+1},A_{t+1}) | S_t=s, A_t=a) $
状态价值函数和状态-动作价值函数之间也存在递推关系,状态价值函数可以用状态-动作价值函数表示:
$v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)q_{\pi}(s,a)$
根据上面式子可知状态价值函数其实就是在该状态下基于策略 $\pi$ 得到的所有动作的状态-动作价值函数的期望。
反过来,状态-动作价值函数也可以用状态价值函数表示:
$q_{\pi}(s,a) = r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s')$
将上面两个式子相结合又可以得到:
$ v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s'))$
$ q_{\pi}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^a\sum\limits_{a' \in A} \pi(a'|s')q_{\pi}(s',a')$
3、策略迭代与值迭代
解决强化学习的一个问题就是要寻找最优策略使得个体在与环境的交互过程中获得最高的奖赏。用 $\pi^*$ 来表示这个最优策略,一旦找到该最优策略,强化学习的问题就解决了。
首先提出强化学习的两个基本问题:
1)预测问题。给定强化学习的状态集$S$, 动作集 $A$ ,模型状态转化概率矩阵 $ P$,即时奖励 $R$,奖励衰减因子 $\gamma$,策略 $\pi$。求解该策略的状态价值函数 $v(\pi)$。
2)控制问题。也就是求解最优的价值函数和策略。只给定了强化学习的状态集$S$, 动作集 $A$ ,模型状态转化概率矩阵 $ P$,即时奖励 $R$,奖励衰减因子 $\gamma$。求解最优策略 $\pi^*$ 和最优状态价值函数 $v^*$。
现在来看看如何解决这些问题:
1)预测问题也称为策略评估。
其整体步骤如下:
首先给定策略,状态转移概率,回报和衰减因子,对状态集中的所有状态初始化状态价值。
然后从$t=0$时刻开始迭代:
假设在第 $t$ 轮迭代已经计算出所有的状态的状态价值,那么在 $t+1$轮就可以利用之前计算出的状态价值计算当前的状态价值,在已知状态转移概率的情况下,可以通过贝尔曼方程来实现:
$v_{t+1}(s) = \sum\limits_{a \in A} \pi(a|s)(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$
因此策略评估的求解问题本质上迭代解法,而且用的是高斯-赛德尔迭代法。
2)控制问题的解决方案有两个:策略迭代和值迭代。这个两个方法都包含策略评估和策略改善两个步骤,具体的解决方案如下:
策略迭代的过程:
1)初始化策略 $\pi = \pi_0$,$t=0$时刻的状态集合中各状态的价值函数。
2)for 1 to l(策略更新迭代至收敛的步数):
3)for 1 to m(高斯-赛德尔迭代求解的步数):
4)根据下面的方程更新状态空间中状态的价值函数:
$v_{t+1}(s) = \max_{a \in A}(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$
5)利用该状态价值函数计算出状态-动作价值函数 $q(s, a)$,然后找到更好的策略 $\pi^*$(备注:此时的状态价值函数是完全收敛的结果,求解方案和上面的策略评估是完全一样的)。
$\pi' = argmax_{a} q(s, a)$
6)重复2)到5),直至$\pi_{l+1} = \pi_l$,则得到最优策略 $\pi^* = \pi_l$。
策略迭代在每一个策略下都要得到收敛后的状态价值函数,然后根据该状态价值函数来更新策略(实际上是一个策略评估过程),因此收敛会比较慢。
值迭代的过程:
1)初始化策略 $\pi = \pi_0$,$t=0$时刻的状态集合中各状态的价值函数。
2)for 1 to l(策略更新迭代至收敛的步数):
3)for 1 to m(高斯-赛德尔迭代求解的步数):
4)根据下面的方程更新状态空间中状态的价值函数:
$v_{t+1}(s) = \max_{a \in A}(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$
5)利用该状态价值函数计算出状态-动作价值函数 $q(s, a)$,然后找到更好的策略 $\pi^*$(备注:此时的状态价值函数是完全收敛的结果,求解方案和上面的策略评估是完全一样的)。
$\pi' = argmax_{a} q(s, a)$
6)重复2)到5),直至$\pi_{l+1} = \pi+l$,则得到最优策略 $\pi^* = \pi_l$。
值迭代和策略迭代唯一不同的是随着状态价值的迭代及时调整策略,也就是上面第5步时紧跟着第4步发生的,而不是等到第3步循环完,即状态价值函数收敛的情况下才更新策略。这种做法的收敛更快。