本文内容源自百度强化学习 7 日入门课程学习整理
感谢百度 PARL 团队李科浇老师的课程讲解
文章目录
一、强化学习MDP四元组
<S,A,P,R>
S:状态 state
A:动作 action
R:奖励 reward
P:状态转移概率 probability
1.1 状态转移概率
p [ s t + 1 , r t ∣ s t , a t ] p[s_{t+1} , r_t | s_t, a_t] p[st+1,rt∣st,at]
在 t 时刻,处于 s t s_t st 的状态,选择了 a t a_t at 的动作,的情况下:
转移到 s t + 1 s_{t+1} st+1 状态,并且获得 r t r_t rt 奖励,的概率
该状态转移概率符合 “马尔可夫”
因为 s t + 1 s_{t+1} st+1 的状态仅仅与 s t s_t st 相关,与 s t − 1 s_{t-1} st−1 ,还是 s t − 2 s_{t-2} st−2 都没有关系
还取决于智能体与环境交互的动作 a t a_t at,有了一个决策过程在里面
所以这个过程叫做 “马尔可夫决策过程” Markov Decision Process,简称 MDP,是序列决策的经典表达方式
根据状态(环境)变化,产生的一系列的决策过程,就是与环境的交互产生的经验
1.2 如何描述环境
使用 P 函数 和 R 函数
- P函数:probability function:
p
[
s
t
+
1
,
r
t
∣
s
t
,
a
t
]
p[s_{t+1} , r_t | s_t, a_t]
p[st+1,rt∣st,at]
- 反映了一个环境的随机性:一个状态下作出决策后,可能有多种结果,不同结果存在不同的概率
- R函数:reward function: r [ s t , a t ] r[s_t,a_t] r[st,at]
在动态规划下,P函数和R函数都是已知的,即 Model-based,我们可以根据现有条件作出最优规划
1.3 Mode-free 试错探索
在强化学习的实际环境中,P 函数 和 R 函数都是未知的,所以是 Mode-free
价值函数 V(st) 表示在 t 时刻的状态的优劣
用 Q(st , at) 值表示,在 st 状态下做动作 at 能拿到(最大)的奖励(的概率)
二、Q 表格
1.1 Q 值表格概念
Q 表示状态动作价值
是累积的经验,取得成功所需的知识
例如:
在某一状态 S 下,我们可以采取 2 个动作:A 和 B
采取 A 动作以后,100% 获得 10 分
采取 B 动作以后,90% 获得 5 分,10% 获得 15 分
那么 Q(S,A) = 100% * 10 = 10,Q(S,B) = 90% * 5 + 10% * 15 = 6
以上的例子中,之所以我们知道概率分布,是因为这个 Q 表是训练后的结果
Q 表中累积的学习到的知识,所以应用的时候,我们很自然的会在 S 状态下选择 A 的动作
以获得最大的回报
但是上面的例子仅仅是一次选择
在实际中,我们会面对多次选择,于是我们要看的是做了一系列选择以后,最终的回报最大的,才是最优路径
所以要把(预估)后续的所有 收益 及其对应 概率 ,都累计到当前状态下做计算
所以在强化学习中,环境给到的 reward ,即环境的反馈就非常重要!
1.2 Q 表格的目标导向型
我们要看的是总收益,来更新 Q 表格
例子:救护车闯红灯
假设每个交通灯,正常通过是 0 分,闯红灯时 -1 分,一共有 10 个红绿灯路口
那么对于一个普通的汽车来说,通过这一段路最高的分数就是 0,即每次都不闯红灯
但是对于救护车来说,我要用最短的时间把病人及时送到医院,可以获得 1000 分,病人死亡则 0 分
这时候最优的方法是每次都闯红灯,前面获得 -10,最后获得 1000,总分 990
这个例子中每一步设定的 Q(s,a) 不能只看当前这一步的收益,要看未来总收益:
G = R1+R2+R3+R4+…+RT
例子:股票投资
关注累积收益,但是股票交易是永续进行的,所以无法考虑未来收益只和
我们无法得到 t 时刻预期的未来总收益:
Gt= Rt+1+Rt+2+Rt+3+…
所以要引如 “衰减因子”:
Gt= Rt+1+γRt+2+γ2Rt+3+…
这里的 衰减因子 γ 取值范围 0~1,等于 1 的时候即看到最后一步,等于 0 的时候即只看后一步
约后面的收益对当前的价值影响越小
1.3 实践:悬崖问题(快速到达目的地)
问题描述:
在一张地图上,我们要从起点 S 到达终点 G,每走一步 reward 为 -1(因为我们希望越快到达越好)
掉下悬崖一次 reward 为 -100(所以我们希望避免发生),并回到起点
到达终点 G 的时候游戏结束
设定 reward 的衰减因子 γ
当前时刻 t,可获得的收益预期总计:
Gt = Rt+1 + γRt+2 + γ2Rt+3 + … =
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
\sum_{k=0}^{\infty}γ^kR_{t+k+1}
∑k=0∞γkRt+k+1
-
γ 取 0 代表目光短浅
-
γ 取 1 代表目光过于长远
我们选择一条路走完以后,就可以知道这条路径上每一个状态路径的价值
所以多次尝试以后,就可以做出更优的选择
而不断地尝试,即在更新 Q 值表格,由这个表格指导每一步动作
所以这个表格的维度是 (状态总数,每个状态下的动作总数),初始化的时候都为 0
Agent 和环境的交互,就是不断更新 Q 表格
三、强化学习更新 Q 表格
核心:用下一个状态的 Q 值来更新当前状态的 Q 值
这里利用到了统计里面的 Bootstrapping (自举)算法
强化学习中叫做:时序差分更新方法
我的理解是:
由于每一次都用下一个状态来更新这一个状态,于是最后的累积 reward 会向前传递,最终影响整个路径
类似于多重条件反射(反射链条)
例子:斯坦福的状态价值迭代小游戏
https://cs.stanford.edu/people/karpathy/reinforcejs/gridworld_td.html
可以看到游戏中,小球不断试错,最后产生价值判断,终点的 +1 reward 会不断影响周边的格子
然后这个影响力会往起点延伸,最终形成一条最优路径
3.1 Temporal Difference 时序差分(TD单步更新)
公式:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) + Q ( S t , A t ) ] Q(S_t,A_t)\ \leftarrow\ Q(S_t,A_t)\ +\ α[R_{t+1}\ +\ γQ(S_{t+1},A_{t+1})\ +\ Q(S_t,A_t)] Q(St,At) ← Q(St,At) + α[Rt+1 + γQ(St+1,At+1) + Q(St,At)]
-
当前值: Q ( S t , A t ) Q(S_t,A_t) Q(St,At)
-
目标值: R t + 1 + γ Q ( S t + 1 , A t + 1 ) R_{t+1}\ +\ γQ(S_{t+1},A_{t+1}) Rt+1 + γQ(St+1,At+1)
-
我们希望 “当前值” 可以不断逼近 “目标值”
-
目标值:即未来收益只和(reward)
-
T a r g e t = G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 = ∑ k = 0 ∞ γ k R t + k + 1 Target\ =\ G_t\ =\ R_{t+1}\ +\ γR_{t+2}\ +\ γ^2R_{t+3}\ =\ \sum_{k=0}^{\infty}γ^kR_{t+k+1} Target = Gt = Rt+1 + γRt+2 + γ2Rt+3 = ∑k=0∞γkRt+k+1
-
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 R t + 4 = R t + 1 + γ ( R t + 2 + γ R t + 3 + γ 2 R t + 4 ) = R t + 1 + γ G t + 1 \begin{aligned} G_t\ &=\ R_{t+1}\ +\ γR_{t+2}\ +\ γ^2R_{t+3}\ +\ γ^3R_{t+4} \\ &=\ R_{t+1}\ +\ γ(R_{t+2}\ +\ γR_{t+3}\ +\ γ^2R_{t+4}) \\ &=\ R_{t+1}\ +\ γG_{t+1} \end{aligned} Gt = Rt+1 + γRt+2 + γ2Rt+3 + γ3Rt+4= Rt+1 + γ(Rt+2 + γRt+3 + γ2Rt+4)= Rt+1 + γGt+1
-
Q ( S t + 1 , A t + 1 ) Q(S_{t+1},A_{t+1}) Q(St+1,At+1) 就近似等于 G t + 1 G_{t+1} Gt+1
-
-
软更新: α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) + Q ( S t , A t ) ] α[R_{t+1}\ +\ γQ(S_{t+1},A_{t+1})\ +\ Q(S_t,A_t)] α[Rt+1 + γQ(St+1,At+1) + Q(St,At)]
- 通过参数 α 来控制每次更新的幅度(可以理解为学习速率 learning rate)
- α 为 0,则表示不更新
- α 为 1,则表示完全更新
所以这个更新公式,用到的是:
当前时刻的 St,At,下一时刻的 Rt,St+1,At+1(与环境交互后产生)
这就组成了 Sarsa 算法
3.2 与环境交互
- 根据Q表选动作(agent)
- 预测/评估:sample()
- 执行动作(带有探索概率):sample()
- 与环境交互(enviroment)
- 获得 State 和 Reward
- 获得下一步的动作预测和决策
- 更新 Q 表(agent)
- 学习:learn()
四、相关方法和策略
4.1 Epsilon Greedy 方法
权衡探索和利用之间的概率:
- 利用 Exploitation:最优选(概率 ε)
- 探索 Exploration:随机选(概率 1-ε)
- 假设 ε 设置为 0.1
- 在当前状态下,选择最优的选择提取出来
- 然后 90% 在最优选择中随机选一个动作
- 10% 在所有选择中随机选一个动作
如果没有探索,那我们无法找到比当前最优 更优 的选择
在 Sarsa 算法中,由于在动作选择上一定存在 “探索” 的可能性,所以最终优化的路径是一条保守的路径,而不是最优的路径!
4.2 On-Policy 和 Off-Policy 策略
-
On-Policy:用于优化的,是实际会被执行的策略
- 比如 Sarsa
- 在学习过程中,只存在一种策略
- 这种策略用作 Action 的选取
- 这种策略也用作优化(更新 Q 表)
- 先采样下一步,再更新 Q 表
- 由于需要兼顾探索,所以策略 π 并不稳定
-
Off-Policy:用于优化的,
- 比如 Q-Learning
- 保留两种策略
- 行为策略(μ):Behavior Policy,用于大胆地探索环境,执行动作,获取经验
- 目标策略(π):Target Policy,使用 最优策略 来进行优化(更新Q表),但是这个策略不一定被执行
- 先更新 Q 表,再采样下一步