本文内容源自百度强化学习 7 日入门课程学习整理
感谢百度 PARL 团队李科浇老师的课程讲解
S:状态 state
A:动作 action
R:奖励 reward
P:状态转移概率 probability
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,是序列决策的经典表达方式
根据状态(环境)变化,产生的一系列的决策过程,就是与环境的交互产生的经验
使用 P 函数 和 R 函数
在动态规划下,P函数和R函数都是已知的,即 Model-based,我们可以根据现有条件作出最优规划
在强化学习的实际环境中,P 函数 和 R 函数都是未知的,所以是 Mode-free
价值函数 V(st) 表示在 t 时刻的状态的优劣
用 Q(st , at) 值表示,在 st 状态下做动作 at 能拿到(最大)的奖励(的概率)
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 ,即环境的反馈就非常重要!
我们要看的是总收益,来更新 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 的时候即只看后一步
约后面的收益对当前的价值影响越小
问题描述:
在一张地图上,我们要从起点 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 值
这里利用到了统计里面的 Bootstrapping (自举)算法
强化学习中叫做:时序差分更新方法
我的理解是:
由于每一次都用下一个状态来更新这一个状态,于是最后的累积 reward 会向前传递,最终影响整个路径
类似于多重条件反射(反射链条)
例子:斯坦福的状态价值迭代小游戏
https://cs.stanford.edu/people/karpathy/reinforcejs/gridworld_td.html
可以看到游戏中,小球不断试错,最后产生价值判断,终点的 +1 reward 会不断影响周边的格子
然后这个影响力会往起点延伸,最终形成一条最优路径
公式:
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)]
所以这个更新公式,用到的是:
当前时刻的 St,At,下一时刻的 Rt,St+1,At+1(与环境交互后产生)
这就组成了 Sarsa 算法
权衡探索和利用之间的概率:
如果没有探索,那我们无法找到比当前最优 更优 的选择
在 Sarsa 算法中,由于在动作选择上一定存在 “探索” 的可能性,所以最终优化的路径是一条保守的路径,而不是最优的路径!
On-Policy:用于优化的,是实际会被执行的策略
Off-Policy:用于优化的,