手把手教你强化学习 (五) 为什么需要值迭代和策略迭代
文章目录
- 为什么需要值迭代
- Value Iteration & Policy Iteration
- Value Iteration
- Synchronous vs. Asynchronous
- Value Iteration Example: Shortest Path
- Policy Iteration
- Example
- Value Iteration vs. Policy Iteration
- Learning an MDP Model
在这个系列的 马尔可夫决策过程与动态规划
这篇文章中我们是有说这个策略迭代和值迭代的,但是说的更公式化一点,本文主要是对其进行一个更加深刻的理解。
为什么需要值迭代
其实我们更希望强化学习直接学习出来一个policy
直接用这个policy
解决问题就可以,那为什么还需要value function
呢?其实这个value function
是非常重要的,当我们拿到一个state
之后,follow
当前的policy
,可以得到一个值函数VVV,这样不仅可以横向地和其它state
进行比较,还可以横向地与其它policy
进行比较。
那既然可以和其它state
,其它policy
进行比较,那我们就可以去找一个optimal state
,也可以去找optimal policy
。
那是怎么找的呢?上一节我们也有说过,这里重复一下,如果我们已知state
的情况下,希望找一个optimal state
,也就是取遍所有的policy
,能够使得当前的state
在某个policy
下值最大,也就找到了最好的这个value
:
v∗(s)=maxπvπ(s)v_{*}(s)=\max_{\pi} v_{\pi}(s) v∗(s)=πmaxvπ(s)
如果找到了这个最好的value
的话,通过Bellman function
可以知道这个时候就会是一个完全收敛的情况:
v∗(s)=maxaRsa+arg maxa∈Aγ∑s′∈SPss′av(s′)v_{*}(s)=\max _{a} \mathcal{R}_{s}^{a}+\argmax_{a \in A}\gamma \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v\left(s^{\prime}\right) v∗(s)=amaxRsa+a∈Aargmaxγs′∈S∑Pss′av(s′)
如果不收敛,那它(value
)肯定还没有到达optimal variable
。上述等式在收敛的情况下就会成立,而不仅仅是一个赋值的关系。
如果我们能够得到上述等式这样一个case
的话,里面就蕴含了optimal policy
,也就是上述等式的后面那一项:
π∗(s)=arg maxa∈A∑s′∈SPss′av(s′)\pi^{*}(s) = \argmax_{a \in A} \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v\left(s^{\prime}\right) π∗(s)=a∈Aargmaxs′∈S∑Pss′av(s′)
因此在这种情况下,对于其它任何的policy
,我们都有:
v∗(s)=vπ∗(s)≥vπ(s)v_{*}(s) = v_{\pi *}(s) \geq v_{\pi}(s) v∗(s)=vπ∗(s)≥vπ(s)
Value Iteration & Policy Iteration
从上述分析我们也可以知道,其实 value function and policy are correlated :
Vπ(s)=R(s)+γ∑s′∈SPsπ(s)(s′)Vπ(s′)π(s)=argmaxa∈A∑s′∈SPsa(s′)Vπ(s′)\begin{aligned} V^{\pi}(s) &=R(s)+\gamma \sum_{s^{\prime} \in S} P_{s \pi(s)}\left(s^{\prime}\right) V^{\pi}\left(s^{\prime}\right) \\ \pi(s) &=\arg \max _{a \in A} \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V^{\pi}\left(s^{\prime}\right) \end{aligned} Vπ(s)π(s)=R(s)+γs′∈S∑Psπ(s)(s′)Vπ(s′)=arga∈Amaxs′∈S∑Psa(s′)Vπ(s′)
value function
是在给定policy
的情况下进行的计算,在每个state-value function
算出来之后,我们又可以直接导出来在每个state
应该去take
哪个action
,去max value function
。因此就会有两种方法,到底是基于value function
作为主体来更新还是基于policy
作为主体来进行更新。
- It is feasible to perform iterative update towards the optimal value function and optimal policy
- Value iteration
- Policy iteration
Value Iteration
value iteration
就是不断地去套bellman equation
,就变成了对于每一个state
去计算V(s)V(s)V(s)。
V(s)=R(s)+maxa∈Aγ∑s′∈SPsa(s′)V(s′)\begin{aligned} V(s) =R(s)+\max _{a \in A}\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V\left(s^{\prime}\right) \end{aligned} V(s)=R(s)+a∈Amaxγs′∈S∑Psa(s′)V(s′)
这里是没有策略π\piπ的,整个方程就是在表达,policy
在tack action
的时候,就是在tack
maxa∈Aγ∑s′∈SPsa(s′)V(s′)\max _{a \in A}\gamma \sum_{s^{\prime} \in S} P_{sa}\left(s^{\prime}\right)V\left(s^{\prime}\right)maxa∈Aγ∑s′∈SPsa(s′)V(s′),那在值迭代里面,它自己去维护这样一个value function
就可以了。policy
只要使得后面上述等式后面那个max
成立就可以了。
整个的迭代过程只关心value
是多少就可以了,这里是value
作为主导,policy
包含在了里面。
Synchronous vs. Asynchronous
更细节一点,这里还有我们怎么去做这个value function
的更新,有两种办法Synchronous value iteration
和In-place asynchronous value iteration
。
- Synchronous value iteration
Synchronous value iteration stores two copies of value functions 。
Vnew (s)←maxa∈A(R(s)+γ∑s′∈SPsa(s′)Vold (s′))V_{\text {new }}(s) \leftarrow \max _{a \in A}\left(R(s)+\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V_{\text {old }}\left(s^{\prime}\right)\right) Vnew (s)←a∈Amax(R(s)+γs′∈S∑Psa(s′)Vold (s′))
这一轮迭代,我们先把所有的state
更新一下,都先缓存起来,然后我再把缓存覆盖到原来的value function
上面。这里要keep
住当前的state value
去更新new state value
,当所有的state
被更新完成之后,拷贝到之前的value
上面去。
- In-place asynchronous value iteration
In-place asynchronous value iteration stores one copy of value function
V(s)←maxa∈A(R(s)+γ∑s′∈SPsa(s′)V(s′))V(s) \leftarrow \max _{a \in A}\left(R(s)+\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V\left(s^{\prime}\right)\right) V(s)←a∈Amax(R(s)+γs′∈S∑Psa(s′)V(s′))
相应的asynchronous
的方法从头到尾只有一个寄存器,或者说一个版本的state
,随时更新。
Synchronous value iteration
是更加稳定的asynchronous
的方法中可能刚刚算过的state value
又马上用到了别的state value
上面,这就会非常不稳定,而有些state value
没有更新。
Value Iteration Example: Shortest Path
上图中v1v_{1}v1,v2v_{2}v2都表示迭代过程,在每个位置的选择都是随机的,每走一步消耗-1
的奖励。
Policy Iteration
Policy Iteration
中先拿一个策略π\piπ,然后计算出稳定的V(s)V(s)V(s),再拿这个稳定的V(s)V(s)V(s)去更新policy
。但是The step of value function update could be time-consuming。
Example
Evaluating a Random Policy in a Small Gridworld
开始,我们拿随机的policy
去评估value
,然后进行赋值更新value
。
得到更新的值之后,我们再使用贪婪策略得到最终的策略。
Value Iteration vs. Policy Iteration
- Value iteration is a greedy update strategy
- In policy iteration, the value function update by bellman equation is costly
- For small-space MDPs, policy iteration is often very fast and converges quickly
- For large-space MDPs, value iteration is more practical (efficient)
Learning an MDP Model
上面的很多例子都是MDP
中状态转移概率被给定的情况,在很多时候不会给定状态转移概率。但是我们可以从agent
与环境交互的数据中反推reward function
R(s)\mathcal{R}(s)R(s)和 state transition
Psa\mathcal{P}_{sa}Psa。
例如: we have only observed some episodes
Episode 1: s0(1)a0(1)R(s0)(1)s1(1)a1(1)R(s1)(1)s2(1)a2(1)R(s2)(1)s3(1)⋯sT(1)Episode 2: s0(2)a0(2)R(s0)(2)s1(2)a1(2)R(s1)(2)s2(2)a2(2)R(s2)(2)s3(2)⋯sT(2)\begin{aligned} &\text { Episode 1: } \quad s_{0}^{(1)} \frac{a_{0}^{(1)}}{R\left(s_{0}\right)^{(1)}} s_{1}^{(1)} \frac{a_{1}^{(1)}}{R\left(s_{1}\right)^{(1)}} s_{2}^{(1)} \frac{a_{2}^{(1)}}{R\left(s_{2}\right)^{(1)}} s_{3}^{(1)} \cdots s_{T}^{(1)}\\ &\text { Episode 2: } s_{0}^{(2)} \frac{a_{0}^{(2)}}{R\left(s_{0}\right)^{(2)}} s_{1}^{(2)} \frac{a_{1}^{(2)}}{R\left(s_{1}\right)^{(2)}} s_{2}^{(2)} \frac{a_{2}^{(2)}}{R\left(s_{2}\right)^{(2)}} s_{3}^{(2)} \cdots s_{T}^{(2)} \end{aligned} Episode 1: s0(1)R(s0)(1)a0(1)s1(1)R(s1)(1)a1(1)s2(1)R(s2)(1)a2(1)s3(1)⋯sT(1) Episode 2: s0(2)R(s0)(2)a0(2)s1(2)R(s1)(2)a1(2)s2(2)R(s2)(2)a2(2)s3(2)⋯sT(2)
拿到这些episode
之后我们可以反推一个MDP
,比如给定一个state
sss 和一个action
aaa 其下一个状态的转移概率我们可以从episode
中去统计:
Psa(s′)=times we took action ain state sand got to state s′times we took action ain state s\mathcal{P}_{sa}(s^{\prime}) = \frac{\text{times we took action $a$ in state $s$ and got to state $s^{\prime}$}}{\text{times we took action $a$ in state $s$}} Psa(s′)=times we took action a in state stimes we took action a in state s and got to state s′
用episode
中的 reward
做平均就是 expected immediate reward
:
R(s)=average{R(s)(i)}R(s) = \text{average} \{R(s)^{(i)}\} R(s)=average{R(s)(i)}
在统计了很多情况的基础上,我们就可以基于这个模型去做动态规划、值迭代、策略迭代这些就可以了。整个的算法流程如下图所示:
这是一种解法,在不知道模型的基础之上,自己通过经验数据建立模型,之后再进行迭代求解,收集的数据不够多的情况下,状态转移概率和奖励函数就会差很多。另外一种方法是通过model-free
的强化学习直接去value
。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!
手把手教你强化学习 (五) 为什么需要值迭代和策略迭代相关推荐
- 强化学习系列5:有模型的策略迭代方法
1. 策略迭代算法 这里策略迭代使用的是表格法,基本步骤是: 用字典存储每个s的v值 根据v值来选骰子 策略迭代的步骤为: 初始化sss,VVV,Π\PiΠ 进行一定次数的迭代直至Π\PiΠ收敛. 2 ...
- 强化学习——值迭代和策略迭代
[强化学习]值迭代和策略迭代 在强化学习中我们经常会遇到策略迭代与值迭代,但是很多人都搞不清楚他们两个之间的区别,他们其实都是强化学习中的动态规划方法(DP). --<Reinforcement ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现
论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...
- 【手把手教你】用backtrader量化回测海龟交易策略
01 引言 海龟交易策略是比较经典的趋势交易系统之一,涵盖了从入场交易(品种选择).仓位管理(基于ATR加减仓).离场(触发条件)的整个过程.机械套用海龟交易法则在A股上进行交易可能效果不佳,但其交易 ...
- 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法
导读:这篇是1999 年Richard Sutton 在强化学习领域中的经典论文,论文证明了策略梯度定理和在用函数近似 Q 值时策略梯度定理依然成立,本论文奠定了后续以深度强化学习策略梯度方法的基石 ...
- 【文献学习】强化学习1:基于值函数的方法
参考文献: [1]<机器学习>,周志华(西瓜书) [2]<强化学习>,邹伟,等(鳄鱼书) (今天看书总是走神,干脆总结一下,希望帮自己理清思路.如果碰巧能被大神看到,如有不正确 ...
- 论文学习:Decoupling Value and Policy for Generalization in Reinforcement Learning(强化学习中泛化的解耦价值和策略)
摘要: Standard deep reinforcement learning algorithms use a shared representation for the policy and v ...
- 手把手教你深度学习强大算法进行序列学习(附Python代码)
作者:NSS 翻译:陈之炎 校对:丁楠雅 本文共3200字,建议阅读10分钟. 本文将教你使用做紧致预测树的算法来进行序列学习. 概述 序列学习是近年来深度学习的热点之一.从推荐系统到语音识别再到自然 ...
- Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!(转载学习)
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
最新文章
- APP不同上线情况对应的测试流程
- 注意力机制的本质中文版代码
- Net WebClient 异步批量下载文件
- python详细安装教程3.8-python3.8下载及安装步骤详解
- 数据库常用语句(日常填充)
- webstorm怎么跑项目_怎么跑Mint-UI的实例,你知道吗?
- php include file_包含与被包含(PHP include文件)
- Moodle: 查询 / 更新 / 添加 / 删除 / 导出 用户 ($DB用法)
- 基于Hadoop2.2.0版本号分布式云盘的设计与实现
- Android编程中dp、px和sp的区别
- 华为与万达签订5G战略合作协议 推动5G商业场景应用
- ISA防火墙策略配置以及服务器的发布
- R--ggplot包的学习(3)
- 上海发布通知:年底前全面清退不符条件的网约车车辆和驾驶员
- 多元伯努利分布 multivariate bernoulli distribution
- Unity 为游戏对象设置标签
- Linux安装及管理应用程序
- Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)
- 【JS 逆向百例】医保局 SM2+SM4 国产加密算法实战
- nodejs简单学习