强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)
- 一、马尔可夫决策过程
- 二、Q表格
- 三、免模型预测
- 1. 蒙特卡洛策略评估
- 1) 动态规划方法和蒙特卡洛方法的差异
- 2. 时序差分
- 2.1 时序差分误差
- 2.2 时序差分方法的推广
- 3. 自举与采样
一、马尔可夫决策过程
状态转移概率:用 p [ s t + 1 , r t ∣ s t , a t ] p[s_{t+1}, r_t \vert s_t, a_t ] p[st+1,rt∣st,at]表示在状态 s t s_t st选择动作 a t a_t at时,转移到状态 s t + 1 s_{t+1} st+1,得到奖励 r t r_t rt的概率。
状态转移概率是具有马尔可夫性质的,系统下一时刻的状态仅有当前时刻的状态决定,不依赖于以往任何状态。
马尔可夫决策过程的四元组: ( S , A , P , R ) (S,A,P,R) (S,A,P,R)。加上折扣因子 γ \gamma γ组成五元组。
概率函数: P [ s t + 1 , r t ∣ s t , a t ] P[s_{t+1}, r_t \vert s_t, a_t] P[st+1,rt∣st,at]
奖励函数: R [ s t , a t ] R[s_t, a_t] R[st,at]
若知道概率函数和奖励函数,则马尔可夫决策过程就是已知的,可以通过策略迭代和价值迭代找到最佳策略。换句话说,如果知道环境的状态转移概率和奖励函数,则环境就是已知的,可以用这两个函数来描述环境。这种情况下的算法为有模型算法。
如果环境未知,则是免模型算法。
免模型强化学习方法没有获取环境的状态转移和奖励函数,而是让智能体与环境进行交互,采集大量的轨迹,从轨迹中获取信息改进策略。
二、Q表格
如下图所示,Q表格的行为所有状态,列为所有动作。最开始Q表格全部初始化为0。当交互足够多时,可以估算出每一个状态下,每个动作的平均总奖励,更新Q表格。
强化:指可以用下一个状态的价值更新当前状态的价值,即自举。
每走一步更新一次Q表格,用下一个状态的Q值更新当前状态的Q值,这种单步更新的方法称为时序差分方法(TD,Temporal Difference)。
三、免模型预测
在免模型状态下,可以通过蒙特卡洛方法和时序差分方法估计某个给定策略的价值。
1. 蒙特卡洛策略评估
是基于采样的方法,给定策略 π \pi π,让智能体与环境交互,得到很多轨迹。每个轨迹都有回报:
G t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots Gt=rt+1+γrt+2+γ2rt+3+⋯则某一个策略对应状态的价值,可以用所有轨迹的回报的平均值表示:
V π ( s ) = E τ ∼ π [ G t ∣ s t = s ] V_{\pi} (s ) = \mathbb{E}_{\tau \sim \pi} [G_t \vert s_t = s ] Vπ(s)=Eτ∼π[Gt∣st=s]蒙特卡洛仿真指:可以采样大量的轨迹,计算所有轨迹的真实回报,计算平均值。
其使用经验平均回报的方法进行估计,因此不需要状态转移函数和奖励函数,也不需要自举。
蒙特卡洛只能用在有终止的马尔可夫决策过程中。
写成增量式蒙特卡洛:
N ( s t ) ← N ( s t ) + 1 V ( s t ) ← V ( s t ) + 1 N ( s t ) ( G t − V ( s t ) ) N(s_t) \leftarrow N(s_t) + 1 \\ V(s_t) \leftarrow V(s_t) + \frac{1}{N (s_t) } \left( G_t - V (s_t) \right) N(st)←N(st)+1V(st)←V(st)+N(st)1(Gt−V(st))把 1 N ( s t ) \frac{1}{N (s_t) } N(st)1看成学习率 α \alpha α,则
V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t - V (s_t) \right) V(st)←V(st)+α(Gt−V(st))
1) 动态规划方法和蒙特卡洛方法的差异
动态规划中使用了自举的思想,即基于之前估计的量来估计一个量。同时使用了贝尔曼期望备份,通过上一时刻的 V i − 1 ( s ′ ) V_{i-1} (s') Vi−1(s′)来更新当前时刻的 V i ( s ) V_i (s) Vi(s),即
V i ( s ) ← ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V i − 1 ( s ′ ) ) V_i (s) \leftarrow \sum_{a \in A} \pi (a \vert s) \left( R(s,a) + \gamma \sum_{s' \in S} P \left( s' \vert s,a \right) V_{i-1} (s') \right) Vi(s)←a∈A∑π(a∣s)(R(s,a)+γs′∈S∑P(s′∣s,a)Vi−1(s′)) 不停迭代后可以收敛。
贝尔曼期望备份有2层加和,内部和与外部和,计算两次期望,得到一个更新。
蒙特卡洛通过一个回合的经验平均回报来进行更新
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)←V(st)+α(Gi,t−V(st))蒙特卡洛方法得到的轨迹是已经决定的,采取的动作也是决定的,只更新该轨迹上的所有状态,与该轨迹无关的状态都不进行更新。
蒙特卡洛适用于环境未知的情况,动态规划是有模型的方法;
蒙特卡洛只需要更新一条轨迹的状态,动态规划需要更新所有状态。
2. 时序差分
是介于蒙特卡洛和动态规划之间的方法,免模型,可以从不完整的回合中学习,并结合了自举的思想。
目的:对某个给定的策略 π \pi π,在线计算出七价值函数 V π V_\pi Vπ,即一步一步的算。最简单的算法是一步时序差分,即TD(0)。每往前走一步,就做一步自举,用得到的估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V( s_{t+1}) rt+1+γV(st+1)来更新上一时刻的 V ( s t ) V(s_t) V(st):
V ( s t ) ← V ( s t ) + α ( r t + 1 + γ V ( s t + 1 ) − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V (s_t) \right) V(st)←V(st)+α(rt+1+γV(st+1)−V(st))其中估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1}) rt+1+γV(st+1)称为时序差分目标,是带衰减的未来奖励的总和。
时序差分目标由2部分组成:
- 走了某一步之后得到的实际奖励 r t + 1 r_{t+1} rt+1;
- 利用自举方法,通过之前的估计来估计 V ( s t + 1 ) V(s_{t+1}) V(st+1),且加了折扣因子 γ \gamma γ。
时序差分目标之所以是估计,有2个原因:
- 时序差分方法对期望值进行采样;
- 时序差分方法使用当前的估计的V,而不是真实的 V π V_\pi Vπ。
2.1 时序差分误差
δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)−V(st)类比增量式蒙特卡洛:
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)←V(st)+α(Gi,t−V(st))这里的 G i , t G_{i,t} Gi,t即为 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1} ) rt+1+γV(st+1), G i , t − V ( s t ) G_{i,t} - V (s_t) Gi,t−V(st)即为 δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)−V(st)。在蒙特卡洛里, G i , t G_{i,t} Gi,t是实际得到的值,因为它已经把一条轨迹跑完了。而时序差分不等轨迹结束,往前走一步,就可以更新价值函数。时序差分只执行一步,状态的值就更新。蒙特卡洛方法全部执行完之后,到了终止状态之后,再更新它的值。
对比:
- 时序差分可以在线学习,每走一步就更新,效率高。蒙特卡洛要等游戏结束才能学习。
- 时序差分可以从不完整序列上进行学习,蒙特卡洛只能从完整序列上学习。
- 时序差分可以再连续的环境下(没有终止)进行学习,蒙特卡洛只能在有终止的情况下学习。
- 时序差分李永乐马尔科夫性质,在马尔可夫环境下有更好的学习效率。蒙特卡洛没有假设具有该性质。
2.2 时序差分方法的推广
往前走一步为TD(0),可以调整步数,变成n步时序差分。如TD(2)即为往前走2步,利用2步得到的回报,使用自举来更新状态的价值。因此可以通过调整步数,来调整算法所需要的实际奖励和自举。
n = 1 ( T D ) G t ( 1 ) = r t + 1 + γ V ( s t + 1 ) n = 2 G t ( 2 ) = r t + 1 + γ r t + 2 + γ 2 V ( s t + 2 ) ⋮ n = ∞ ( M C ) G t ∞ = r t + 1 + γ r t + 2 + ⋯ + γ T − t − 1 r T \begin{aligned} n=1(TD) \qquad \qquad G_t^{(1)} &= r_{t+1} + \gamma V(s_{t+1}) \\ n = 2 \qquad \qquad \qquad G_t^{(2)} &= r_{t+1} + \gamma r_{t+2} + \gamma^2 V(s_{t+2}) \\ \vdots \\ n = \infty (MC) \qquad \qquad G_t^\infty &= r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^{T-t-1} r_T \end{aligned} n=1(TD)Gt(1)n=2Gt(2)⋮n=∞(MC)Gt∞=rt+1+γV(st+1)=rt+1+γrt+2+γ2V(st+2)=rt+1+γrt+2+⋯+γT−t−1rT当 n = ∞ n=\infty n=∞时,则整个游戏结束后再进行更新,时序差分就变成了蒙特卡洛。
以上为时序差分目标。得到时序差分目标之后,用增量式学习的方法更新状态的价值:
V ( s t ) ← V ( s t ) + α ( G t n − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t^n - V (s_t) \right) V(st)←V(st)+α(Gtn−V(st))
3. 自举与采样
自举是指更新时使用了估计。
蒙特卡洛没有使用自举,它根据实际的回报进行更新,没有估计。动态规划和时序差分使用了自举。
采样是指更新时通过采样得到一个期望。
蒙特卡洛是纯采样的方法。动态规划没有采样,根据贝尔曼期望方程进行更新状态价值。时序差分使用了采样,时序差分目标 G G G由2部分组成,采样与自举。
-
动态规划:直接计算期望,把所有相关状态都加和
V ( s t ) ← E π [ r t + 1 + γ V ( s t + 1 ) ] V(s_t) \leftarrow \mathbb{E}_\pi [ r_{t+1} + \gamma V(s_{t+1}) ] V(st)←Eπ[rt+1+γV(st+1)]
-
蒙特卡洛:在当前状态下,采取一条支路,在该路径上更新,即更新该路径上的所有状态
V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha ( G_t - V (s_t) ) V(st)←V(st)+α(Gt−V(st))
-
时序差分:从当前状态开始,往前走1步,关注局部的步骤
T D ( 0 ) : V ( s t ) ← V ( s t ) α ( r t + 1 + γ V ( s t + 1 ) − V ( s t ) ) TD(0): \quad V(s_t) \leftarrow V(s_t) _ \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V(s_t) \right) TD(0):V(st)←V(st)α(rt+1+γV(st+1)−V(st))
如果时序差分进行广度的更新,就变成了动态规划;
如果时序差分需要深度的更新,就变成了蒙特卡洛。