RL笔记 · 一
从强化学习的基本概念到Q-learning算法
基本概念
假设我们有一个Grid World,机器人在s1,尝试到达s4。其中s3是禁止区域,走到s3有惩罚,而走到s4有奖励。那么强化学习的目的,就是使得奖励最大化。强化学习的几个概念可以一一对应如下:
- state:状态。对应机器人目前处在哪个格子
- state space:状态空间。对应整个Grid World
- action:行动。向左走,还是向下走?
- action space of a state:状态的行动空间。对应机器人所有行动的集合
- transition dynamics:状态转移。描述机器人从一个grid到另一个grid
- reward function:奖励函数。对应当机器人采取了行动导致状态转移到的当时,我们给出的实数奖励。
在继续之前,我们回顾一下什么是笛卡尔积:
集合A和集合B的笛卡尔积,即取A的元素为第一个元素,B的元素为第二个元素的有序对组成的集合。
那么我们领状态空间为S,状态的行动空间为A,就有
-
状态转移函数P
S × A → Δ(S),Δ(S)表示S上的概率分布。得到下一个状态。
-
奖励函数R
S × A → Δ( R ),Δ( R )表示实数域R上的概率分布。得到一个奖励实数。
-
策略policy
策略是一种条件概率 S→ Δ(A),表示状态到动作的映射
比如 π(a1|s1) = 0, π(a2|s1) = 1。意味着在状态s1时采取动作a2的策略是确定的。
-
轨迹trajectory
本质上是state-action-reward chain
S1a3r=0S4a3r=−1S7a2r=0S8
-
回报return
沿着trajectory的reward相加,我们就得到了return
-
折扣率discount rete
我们有γ∈[0,1),用以衡量当前奖励与未来奖励,目的是为了对不同时刻的reward做加权。
-
折扣返回discounted return
对未来第t步的奖励,乘以一个折扣因子γt,这样距离当前越远的reward,权重越低。其中t=1,2,3,…
Gt=Rt+1+γRt+2+γ2Rt+3+…
简便起见,下文提到的return均为discounted return。
-
状态价值state value,V
S → R,将状态映射到实数域,表示当前状态的价值。具体来说,是从一个state触发,对各个trajectory的return求期望。
vπ(s)=E[Gt∣St=s]
上面的公式表示:从状态s出发,遵循策略π时,未来所有回报的期望总和。
-
行动价值action value,Q
S × A → R,将当前状态s的情况下采取a这个行动后,所得到的return求期望总和。
Qπ(s,a)=E[Gt∣St=s,At=a]
state value可以用来衡量策略的好坏。如果我们有
vπ2(s)>vπ1(s)
那么就认为策略π2优于π1。而如果我们有
vπ∗(s)>vπ(s)
对于任意的状态s和策略π都成立,则称π*为最优策略。由此我们也可以衍生出:
- 最优state value V*,即遵循最优策略π*时,状态s的最大可能价值
- 最优action value Q*,即遵循最优策略π*时,(s,a)的最大可能价值
那么有了这些基础知识,我们就可以较为清晰的对强化学习下一个定义:强化学习描述的是智能体以最大化累计奖励为目标,在与环境交互的过程中学习到最优策略的过程。这个交互指的是智能体在不同状态依据当前的策略采取不同的行动,完成状态转移,同时环境向智能体反馈即时奖励。而智能体根据已知信息(状态、行动、及时反馈……)更新策略,最终学到最优策略π*。
这也是即将介绍的Q-learning算法所遵循的核心思想
贝尔曼公式
我们知道,状态价值的公式是:
vπ(s)=E[Gt∣St=s]
而Gt又可以表示为:
Gt=Rt+1+γRt+2+γ2Rt+3+⋯=Rt+1+γ(Rt+2+γRt+3+⋯)=Rt+1+γGt+1
我们将结果代回到状态价值的计算公式中,再结合期望的可加性,可以得到:
vπ(s)=E[Gt∣St=s]=E[Rt+1+γGt+1∣St=s]=E[Rt+1∣St=s]+γE[Gt+1∣St=s]
它们分别对应即时奖励的期望和未来的折扣回报项,接下来我们分别对这两个部分进行推导。
-
E[Rt+1∣St=s] 代表状态s下,下一步奖励Rt+1的期望。而Rt+1不是直接确定的,而是取决于你先选了什么动作A。
由全期望公式:
E[X]=y∑E[X∣Y=y]P(Y=y)
这里把Y换成动作At,X换成奖励Rt+1,就得到:
E[Rt+1∣St=s]=a∑给定状态下选动作a后的期望奖励E[Rt+1∣St=s,At=a]⋅P(At=a∣St=s)π(a∣s)
而对于内层的期望E[Rt+1∣St=s,At=a],在“状态s、动作a都给定”的情况下,奖励Rt+1仍然是一个随机变量,它的分布就是环境给的奖励函数:
p(r∣s,a)=P(Rt+1=r∣St=s,At=a)
所以这个条件期望,按期望的定义(取值 × 概率,求和)就是:
E[Rt+1∣St=s,At=a]=r∑r⋅p(r∣s,a)
由此我们可以推导出
E[Rt+1∣St=s]=a∑π(a∣s)r∑p(r∣s,a)r
-
E[Gt+1∣St=s] 代表从当前状态s出发,对未来累计回报Gt+1求期望。而Gt+1的值不直接依赖于 St,而是依赖于下一步转移到了哪个状态St+1。所以,我们把 St+1的所有可能取值 s′ 拿来遍历,乘以从 s 转移到 s‘ 的概率 p(s′∣s)。应用全概率公式,得到
E[Gt+1∣St=s]=s′∑E[Gt+1∣St+1=s′]p(s′∣s)
注意到价值函数的定义 vπ(s′)=E[Gt+1∣St+1=s′]。之后,对p(s′∣s)应用一次全概率公式,将其展开。得到:
E[Gt+1∣St=s]=s′∑vπ(s′)a∑p(s′∣s,a)π(a∣s)
将推导结果代入回原式,我们就得到了完整的贝尔曼期望方程:
vπ(s)=a∑π(a∣s)r∑p(r∣s,a)r+γs′∑vπ(s′)a∑π(a∣s)p(s′∣s,a)
把两项合并,可以写成更紧凑的形式:
vπ(s)=∑aπ(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπ(s′)]=∑aπ(a∣s)[R(s,a)+γ∑s′p(s′∣s,a)vπ(s′)]
当前状态的价值 = 期望的即时奖励 + 折扣后的期望未来价值。这正是贝尔曼方程的核心思想。
贝尔曼最优公式
我们先前提到:
vπ(s)=E[Gt∣St=s]Qπ(s,a)=E[Gt∣St=s,At=a]
可以得到:
v(s)=∑aπ(a∣s)Q(s,a)
对于最优状态价值 v∗ ,可以表示为:
v∗(s)=∑aπ∗(a∣s)Q∗(s,a)
也就是说,最优状态价值 v∗ 是所有动作价值 Q∗(s,a) 按照策略π∗的加权平均。那么我们想要让 (v_*) 最大,只需把所有权重押在Q值最大的动作上即可。令 π∗(a∣s)=
- 1,若a=argmaxaQ∗(s,a)
- 0, 其他
此时求和函数已经没有意义,可以进一步简化公式为:
v∗(s′)=a′maxQ∗(s′,a′)
这个式子表示,最优状态价值是最优动作价值的“最大值”。
再回到这个式子v(s)=∑aπ(a∣s)Q(s,a),对比我们之前推导的贝尔曼方程v(s)=∑aπ(a∣s)[R(s,a)+γ∑s′p(s′∣s,a)vπ(s′)],得到:
Q(s,a)=R(s,a)+γs′∑p(s′∣s,a)vπ(s′)
将Q替换为最优动作价值Q∗,就有
Q∗(s,a)=R(s,a)+γ∑s′p(s′∣s,a)v∗(s′)
再代入我们先前推导得出的v∗(s′)=maxa′Q∗(s′,a′)
Q∗(s,a)=R(s,a)+γ∑s′p(s′∣s,a)maxa′Q∗(s′,a′)
由于此时的p(s′∣s)已经确定为1,所以该项可以直接化简消去,我们就得到了在确定性环境下的贝尔曼最优公式:
Q∗(s,a)=R(s,a)+γmaxa′Q∗(s′,a′)
Q-learning算法
贝尔曼最优公式告诉了我们该如何求解最优动作函数最大值,即做什么action能收益最大化:取决于即时奖励R以及带折扣的下一个Q*。我们要做的就是不断寻找最大的Q*,从而学习到最优的action value函数Q*(s,a),这就是Q-learning算法的初衷。
那么我们要如何做呢?Q-learning算法本质上就是要学习到一个行为状态s,列为动作a的表格。我们先初始化一个Q表,用它来存储对最优Q值的近似,不断更新。更新公式为:新估计值=旧估计值+步长×[目标-旧估计值]
Q(s,a)←Q(s,a)+α(R(s,a)+γa′maxQ(S′,a′)−Q(s,a))
这里的步长α,对应于机器学习中的学习率learning rate,概念是相似的。
直觉上:
- 如果 Q(s,a) 比目标值小(低估了),括号里为正,Q 就被调大。
- 如果Q(s,a) 比目标值大(高估了),括号里为负,Q 就被调小。
- 每次只走α那么一小步,反复迭代,Q 就会慢慢稳定到 Q∗。
在满足一定条件(每个 (s,a) 被访问无限次、学习率满足 Robbins-Monro 条件)时,可以严格证明它以概率 1 收敛到最优Q∗,这里的最优Q∗就是我们刚才提到的贝尔曼最优公式。
顺带一提,这个更新式其实是一个通用的 TD(Temporal Difference,时序差分)更新模板:
新估计←旧估计+α×(实际观察到的回报−旧估计)
Q-learning的算法具体步骤如下:
-
初始化Q表,元素全为0
-
以ϵ的概率探索,从动作空间中随机选择一个动作;以1-ϵ的概率利用,选择当前状态下Q值最大的动作。这里的ϵ是一个小概率。
-
不断执行动作,获得环境反馈,包括:下一个状态s’,即时奖励r
-
利用更新公式更新表格
-
重复以上步骤,直到下一个状态达到终止条件,开启下一个episode。episode 结束后,下一个 episode 从初始状态重新开始(比如回到起点),但 Q 表要保留。
终止条件包括:到达终点、撞墙次数达到上限、迭代步数达到上限·……
-
直到Q表收敛,算法终止
看到这里,也许会有人和笔者一样仍然存在些许困惑。这个算法听起来一直都是动态的,如何保证Q表一定会收敛呢?
理论上,Q-Learning 的更新是一个压缩映射:
Qk+1(s,a)=R(s,a)+γa′maxQk(s′,a′)
只要 γ<1,这个迭代无论从什么初始值出发,都会唯一收敛到 Q∗。全 0 初始化只是一个起点,完全合法。因此不需要一开始就知道maxQ(S′,a′)的真值,算法本身会在无数次迭代中把它磨出来。
和考研的压缩映射其实是同一个数学概念:
若存在常数0<k<1,使得对任意x,y都有
∣f(x)−f(y)∣≤k∣x−y∣
则称 f 是一个压缩映射。此时迭代xn+1=f(xn)必收敛到唯一不动点x∗=f(x∗)。
参考
