文章目录
前言
之前没注意过这些推广邮件,今天看看还是不错的,顺便总结一些有用的。原文是:Summary of Tabular Methods in Reinforcement Learning,当然也参考了其他资料。
表格方法主要涉及状态和动作空间足够小,可以将值函数近似表示为数组和表的问题,都是用来估计值函数的手段。
The Problem
强化学习的目标是找到Bellman方程的解:
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) ∑ s ′ ∈ S , r ∈ R P ( s ′ , r ∣ s , a ) ( r + γ V π ( s ′ ) ) V_{\pi}(s)=\sum_{a\in A}\pi(a|s)\sum_{s'\in S,r\in R}P(s',r|s,a)(r+\gamma V_{\pi}(s')) Vπ(s)=a∈A∑π(a∣s)s′∈S,r∈R∑P(s′,r∣s,a)(r+γVπ(s′))
通过解决Bellman方程,我们是要找到最大化状态值函数的最优策略。
由于难以获得解析解,因此我们使用迭代方法来计算最优策略。最优状态和动作值函数表示如下:
v ∗ ( s ) = max a ∑ s ′ ∈ S , r ∈ R P ( s ′ , r ∣ s , a ) ( r + γ v ∗ ( s ′ ) ) v_*(s)=\max_a \sum_{s'\in S,r\in R}P(s',r|s,a)(r+\gamma v_*(s')) v∗(s)=amaxs′∈S,r∈R∑P(s′,r∣s,a)(r+γv∗(s′))
q ∗ ( s , a ) = ∑ s ′ ∈ S , r ∈ R P ( s ′ , r ∣ s , a ) ( r + γ max a ′ q ∗ ( s ′ , a ′ ) ) q_*(s,a)=\sum_{s'\in S,r\in R}P(s',r|s,a)(r+\gamma \max_{a'} q_*(s',a')) q∗(s,a)=s′∈S,r∈R∑P(s′,r∣s,a)(r+γa′maxq∗(s′,a′))
Dynamic Programming
动态规划是一种通过将周围状态的值作为输入(不管这些值是否正确)来计算一个状态下每个值的方法。一旦计算出一个状态的一个值,我们便移至另一状态,并重复相同的过程(考虑先前状态中计算出的任何新值)。
迭代此过程足够多次,直到每个状态的变化小于我们定义的某个限制。
主要包括策略迭代、值迭代,关于动态规划的收敛性证明可以看:通过Bellman算子理解动态规划。
Pros
DP是高效的,它在大多数情况下都可以在多项式时间内找到最优策略。
DP保证找到最优策略。
总结:多项式时间收敛,保证收敛到最优解
Cons
DP不适合具有数百万甚至更多状态的大问题。
DP需要知道转移概率矩阵,也就是只能处理有模型的问题,但这对许多问题来说是不切实际的要求。
总结:不适用于大规模、无模型问题
Monte Carlo
在蒙特卡洛(MC),我们完成一整个episode, ϵ \epsilon ϵ-greedly逐渐移动到各个状态,直到结束,记录我们遇到的状态、动作和奖励,然后为我们通过的每个状态计算 V ( s ) V(s) V(s)和 Q ( s ) Q(s) Q(s)。其使用最简单的假设:value = mean return,return是 v π v_{\pi} vπ的无偏估计,但由于一整个episode中随机因素太多,所以方差大。
根据大数定理可以收敛至 v π ( s ) v_{\pi}(s) vπ(s),即使使用函数近似。
我们通过进行更多的episode来重复此过程,并且在每个episode后获得状态、动作和奖励,并平均发现的 V ( s ) V(s) V(s)和 Q ( s ) Q(s) Q(s)的值。
MC预测算法包括进行尽可能多的episode,并在每个episode之后计算我们经过的状态的值,然后将这些结果与这些状态的当前值进行平均。一个episode里可能多次到访同一个状态,这时就有区别了,下面是只更新第一次到访状态时的值,也就是该状态在之前没出现过:
知道如何估计值后,策略就是基于估计的值产生的:
也有增量式的更新方式,降低空间复杂度,简单的变换即可:
μ k = 1 k ( ∑ i = 0 k x i ) = 1 k ( x k + ∑ i = 0 k − 1 x i ) = 1 k ( x k + ( k − 1 ) μ k − 1 ) = μ k − 1 + 1 k ( x k − μ k − 1 ) \begin{aligned} \mu_k & =\frac{1}{k}(\sum_{i=0}^k x_i)\\ &=\frac{1}{k}(x_k+\sum_{i=0}^{k-1} x_i)\\ &=\frac{1}{k}(x_k+(k-1)\mu_{k-1})\\ &=\mu_{k-1}+\frac{1}{k}(x_k-\mu_{k-1}) \end{aligned} μk=k1(i=0∑kxi)=k1(xk+i=0∑k−1xi)=k1(xk+(k−1)μk−1)=μk−1+k1(xk−μk−1)
即把append和average两步换为:
N ( S t , A t ) + = 1 #更新计数 Q ( S t , A t ) = Q ( S t , A t ) + 1 N ( S t , A t ) ( R e t u r n s ( S t , A t ) − Q ( S t , A t ) ) \begin{aligned} &N(S_t,A_t)+=1 \text{\ \#更新计数}\\ &Q(S_t,A_t)=Q(S_t,A_t)+\frac{1}{N(S_t,A_t)}(Returns(S_t,A_t)-Q(S_t,A_t)) \end{aligned} N(St,At)+=1 #更新计数Q(St,At)=Q(St,At)+N(St,At)1(Returns(St,At)−Q(St,At))
Pros
MC可直接从与环境的交互中学习最佳行为,不需要环境动态模型。
MC可以与仿真或样本模型一起使用。
MC可以用于关注一个特别感兴趣的区域,并可以准确地进行评估,而不必评估其余的状态集。
总结:不需要模型,可使用仿真,可估计特定区域,无偏估计,收敛性质好,对初始值不敏感
Cons
MC仅适用于情节式环境,它不适用于没有终止状态的环境(连续任务)。
MC必须具有完整的情节,没有bootstrapping,这意味着它不能给出其他状态的估计值。
MC必须等到episode结束后才能知道return。 对于episode很长的问题,这将变得太慢。
总结:只适用于情节式任务,实际中收敛较慢,方差大
Temporal Difference
TD可以看作是DP和MC方法之间的融合。它进行episode,但不必等到结局就知道回报。它基于其他状态的估计来计算当前状态的值(bootstrapping)。真实的TD target r + γ v π ( s t + 1 ) r+\gamma v_{\pi}(s_{t+1}) r+γvπ(st+1)是 v π ( s t ) v_{\pi}(s_t) vπ(st)的无偏估计,但是由于无法得到 v π ( s t + 1 ) v_{\pi}(s_{t+1}) vπ(st+1),所以估计是有偏的。TD(0)只有一步随机,方差小。
TD(0)指的是只向前看一步,然后计算当前状态值,可以收敛至 v π ( s ) v_{\pi}(s) vπ(s),但使用函数近似后不总成立。
为了找到最佳策略,TD提供了不同的方法,一个是on-policy的SARSA,另一个是off-policy的Q-learning。
SARSA包括对状态S采取动作A,记下R,和下一个状态S’及其动作A’,然后使用所有这些信息来更新 Q ( S , A ) Q(S,A) Q(S,A),然后移至S’,执行先前选择的动作A’。
Q-learning像SARSA一样,它对状态S采取操作A,记下R和下一个状态S’,然后与SARSA不同,它选择状态S’中的最大Q值来更新 Q ( S , A ) Q(S,A) Q(S,A),然后移动到S’并执行 ϵ \epsilon ϵ-greedy操作,也就是off-policy:评估和改进的策略不是产生样本的行为策略,即目标策略和行为策略不是同一个策略。
当然还有解决因探索不足等因素造成的过估计问题的Double Q-learning,这里不做过多介绍。
Pros
TD不需要像DP一样知道转移概率矩阵。
TD无需等到episode结束就知道return,它会逐步更新状态值和动作值。
总结:不需要模型,收敛较快,方差小
Cons
SARSA可能陷入局部最小值中。
Q-learning在某些随机环境中的表现可能会很差。
总结:有偏估计,对初始值敏感,收敛性质不好,
只有DP需要模型,只有MC不使用bootstrapping