强化学习演进史

本文主要是pinard老师的系列笔记 详细请参考系列文章:https://www.cnblogs.com/pinard/p/9385570.html
一年多前看这一系列的文章时 对这种一步一步改进的过程感受挺深。 所以这篇笔记中,一起去看看得到的东西缺点在哪里, 以及针对这种缺点的改进版是怎样。仅供复习吧,有错误欢迎指正 谢谢。 

最开始时 是想整理一个思维导图的, 但是觉得导图文字要比较精简;最后用了个ppt:

 附件: https://download.csdn.net/download/anthea_luo/13117989

 

 

 

 



机器学习可分三类: 监督学习/无监督学习/强化学习, 强化学习训练数据没有标签,评价标准是奖励值大小, 且奖励值不是事先准备好喂入网络, 而是延后处理的。
强化学习 可以与环境交互后,依据交互结果奖励值学习。(交互的意思是 拿当前数据去神经网络或实现类似功能的模型中 模拟计算一把并得到返回结果) 也可以不与环境交互(model-based),或部分与环境交互学习(比如Dyna)
强化学习 大体分三类 value-based/policy-based/model-based
强化学习常用于(包括不限于)游戏/机器人/自动驾驶/推荐等需要决策的场景 其目标 主要有 求解控制/求解预测  也就是求解下一步怎么走/这样走好不好


好吧 一般开始强化学习之旅 绕不开那些个要素概念的铺路 我也没有创新:
如下是简化版:
1 环境的状态S: t时刻环境的状态$S_t$是它的环境状态集中某一个状态。
2 个体的动作A: t时刻个体采取的动作$A_t$是它的动作集中某一个动作。$\pi(a|s) = P(A_t=a | S_t=s)$
3 环境的奖励R: t时刻个体在状态$S_t$采取的动作$A_t$对应的奖励$R_{t+1}$会在t+1时刻得到。
4 个体的策略(policy)π: 它代表个体采取动作的依据,即个体会依据策略π来选择动作。策略常用条件概率分布$\pi(a|s)$表示, 即在状态s时采取动作a的概率。即$\pi(a|s) = P(A_t=a | S_t=s)$.此时概率大的动作被个体选择的概率较高。
5 个体在策略π和状态s时,采取行动后的价值(value): 一般用vπ(s)表示。这个价值一般是一个期望函数, 因为价值要综合考虑当前的延时奖励和后续的延时奖励。$$v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...|S_t=s)$$

...

 


另外,关于容易混淆的 这几个概念: 奖励R /g(t)   收获r   价值v  可以看看:
https://zhuanlan.zhihu.com/p/57117940


奖励reward:     即时的,每个状态下 执行action后 立即获得的评价性响应
收获return/Gt:  累计的,累计未来的reward
价值value:      全局的/统计学意义的,是我们希望通过采样进行估计和逼近的。
行为价值函数q: 一般与状态相关。

后两者十分相似:其相同不同点分别为:
相同:
都为 该步收获+下一状态价值,
不同:
q是 在某一状态下 某一行为或选定行为 的描述,
v是 某一状态的描述,包含了某一状态下 所有行为 的描述


一个状态的价值 可以用该状态下        所有行为的价值 来表达,
一个行为的价值 可以用该行为所能到达的后续状态的价值 来表达

状态的最优价值 等于该状态下的最优行为价值;
行为的最有价值 为该行为可能进入的所有后续状态的最优状态价值 加权得到

 

 

-------------------------------------------------

进入正题啦!

先看model_based

状态转化模型Pass′ 如果按照真实的环境转化过程看,转化到下一个状态s′的概率既与上一个状态s有关,还与上上个状态,以及上上上个状态有关。
其缺点是:依赖的东西太多啦! 如果不做马尔科夫假设,难以建模
改进: 引入MDP, 用动态规划 求解MDP
注意 MDP与马尔科夫链MC 不同点在于:MDP考虑了当前采取的动作带来的价值

首先 我们递推 $S_t$$S_{t+1}的关系  $$v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma v_{\pi}(S_{t+1}) | S_t=s) $$  同样的 可以得到动作价值函数  $q_{\pi}(s,a)$$$q_{\pi}(s,a) = \mathbb{E}_{\pi}(R_{t+1} + \gamma q_{\pi}(S_{t+1},A_{t+1}) | S_t=s, A_t=a) $$

这些递推式子 叫贝尔曼方程。 贝尔曼方程 是动态规划这类数学最优化方法 能够达到最优化的必要条件

我们想要求一个最好的策略 以便得到最好的收获或价值 在最初期,可以定义最优状态价值函数为  $$v_{*}(s) = \max_{\pi}v_{\pi}(s)$$ 即取所有此策略下的状态价值中最大一个。 这里有缺点,呆会说。

求解最优策略 基本解法有也三种: 它们也是一个接一个的改进.
动态规划法
蒙特卡洛法
时序差分法

先看DP:
之前说过 RL 目标是求解控制/求解预测
策略评估求解预测或说价值:
通过贝尔曼方程来完成 :

我们每一轮可以对 计算得到的新的状态价值函数 再次进行迭代,直至状态价值的改变很小(收敛),就得出了 预测问题的解, 即给定策略的状态价值函数v(π)

策略迭代求解控制:
循环如下两步 得到收敛的策略π* 和状态价值V*
1 策略评估: 利用贝尔曼公式 vπ(s) 迭代直到vπ(s)收敛
2 策略更新: 用贪婪策略选取使v(s)最大的策略
注意策略迭代 只有在状态价值更新到收敛后,才更新策略。


价值迭代求解控制:

没有等到状态价值收敛后,才调整策略, 而是随着状态价值的迭代 及时调整策略, 更快。
动态规划法:利用贝尔曼方程迭代更新状态价值, 用贪婪法迭代更新 最优策略。

动态规划算法使用 全宽度(full-width)的回溯机制来进行 状态价值的更新,
在每一次回溯更新某一个状态的价值时,都要回溯到 该状态的所有可能的后续状态,并利用贝尔曼方程更新该状态的价值。
其缺点是: 1:状态数较多 问题规模较大时 计算量太大啦! 2: 要求转化模型P已知,这个在实际中经常难以得到。
改进: 蒙特卡洛法。 注意,这里已经是不基于模型的强化学习问题,转到value_based啦。


蒙特卡罗法通过采样 若干经历完整的状态序列(episode)来估计状态的真实价值。所谓的经历完整,就是这个序列必须是达到终点的。
有了很多这样(越多越接近真实值)经历完整的状态序列,可以近似的估计状态价值:只需求出 所有的完整序列中 该状态出现时候的收获 再取平均值即可近似求解,也就是:
$$G_t =R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+... \gamma^{T-t-1}R_{T}$$
 $$v_{\pi}(s) \approx average(G_t), s.t. S_t=s$$

 

$$V(S_t) = V(S_t) + \alpha(G_t - V(S_t) )$$
$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t - Q(S_t, A_t) )$$
系数α 功能类似于 用来取平均的N(St)

和动态规划比,蒙特卡罗法不同之处体现在三点:
1 预测问题策略评估的方法不同
2 蒙特卡罗法一般是优化 最优动作价值函数q∗,而不是状态价值函数v∗。(没有P 转而计算q??)
3 动态规划一般基于贪婪法更新策略。而蒙特卡罗法一般采用ϵ−贪婪法更新。 (因为想要更多的动作 被计算q(s, a))
  一般ϵ会随着算法的迭代过程逐渐减小,并趋于0。这样在迭代前期,我们鼓励探索,而在后期,由于我们有了足够的探索量,开始趋于保守,以贪婪为主,使算法可以稳定收敛。


蒙特卡罗法
其缺点是: 它每次采样都需要一个完整的状态序列。
改进: 时序差分TD (Temporal-Difference)


R_{t+1} + \gamma v(S_{t+1})来近似的代替收获G(t), 前者又称TD目标值
时序差分法在知道结果之前就可以学
时序差分法在 更新状态价值时使用的是TD目标值,即基于即时奖励和下一状态的预估价值 来替代当前状态在状态序列结束时可能得到的收获,是当前状态价值的有偏估计,而蒙特卡罗法是 无偏估计
n步时序差分 当n越来越大,趋于无穷,或者说趋于使用完整的状态序列时,n步时序差分就等价于蒙特卡罗法了。


时序差分法 求解控制 分在线算法(代表者SARSA) 和离线算法(代表者Q-learing) 分别为 行动策略 和要评估的策略 是不是同一个策略的场景。
再解释一下:
在线控制 一般只有一个策略(常用ϵ−贪婪法)
离线控制 一般有两个策略 其中一个策略(常用ϵ−贪婪法) 用于选择新的动作  另一个策略(常用贪婪法)用于更新 价值函数

除了收获G(t)不同 SARSA其他同蒙特卡罗法
对于价值函数的更新,Q-Learning用贪婪法,SARSA用ϵ−贪婪法。这是SARSA和Q-Learning本质的区别。
Q-Learning直接学习最优策略,而SARSA在学习最优策略的同时还在做探索。 但SARSA学习过程会比较平滑, Q-Learning可能受到训练数据方差的影响, 或遇到一些特殊的最优“陷阱”。
 
SARSA和Q-Learning的缺点是:
Q(S, A)的值 使用一张 大表来存储的 可能溢出

 

 
 
 
 
 
 
 

 


对于资格迹, 刘建平老师的文章是 先在TD算法中讲的,那时还没说到 价值逼近函数。所以我当时没看太明白。 我觉得这个问题的BourneLin答主  说的比较好:
https://www.zhihu.com/question/60612010/answer/214118815

定义一个叫做资格迹(Eligibility Trace)的向量 Zt,其维度和逼近函数的权重向量Wt一致。

那么资格迹就可以根据过往价值变化对如何调整当前Wt影响定义为:
 $$Z_{t} \doteq \lambda Z_{t-1} + \bigtriangledown v (S_{t}, w_{t}))$$
 
一般形式的逼近函数更新公式
$$W_{t+1} = W_{t} + \alpha\left [ R_{t+1} + v (S_{t+1}, w_{t1})- v (S_{t}, w_{t})\right ] \bigtriangledown v (S_{t}, w_{t})$$

价值逼近函数的更新公式

$$W_{t+1} = W_{t} + \alpha\left [ R_{t+1} + v (S_{t+1}, w_{t1}) - v (S_{t}, w_{t})\right ] Z_{t} $$
差别就在于最后一项 Z_{t}\bigtriangledown v (S_{t}, w_{t})。前者是考虑了过去的价值梯度 $\bigtriangledown V_{t-1} (S_{t-1}, w_{t-1})$  $\bigtriangledown V_{t-2} (S_{t-2}, w_{t-2})$ ... $\bigtriangledown V_{0} (S_{0}, w_{0})$对更新W_{t+1} 的影响,这也正是资格迹的真正意义;而后者并没有考虑过往影响。

 

 

--------------

本文一两年前就开始写,总是被中断..  其实本文的精华主要是上面的那个ppt,以画面的形式展现。 其他的内容不是很重要,没啥创新,只是个人的笔记, to be continue   但不用期待哈

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值