本文参考http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html

上一次已经分享了强化学习的概念以及基本的MDP,本节将分享基于Bellman方程和动态规划的策略迭代和值迭代,对于Bellman方程,大家都比较清楚了,那么我们先介绍一下动态规划算法的基本原理

一、动态规划

这里面我要简单介绍一下动态规划,因为严格来说,值迭代与策略迭代是用来解决动态规划问题的两种规划方法。而强化学习又有另外一个昵称——就是拟动态规划。说白了强化学习就是模拟动态规划算法。

用一句话来总结动态规划就是,对一个复杂问题给出一个一般性的解决办法。它主要由两个性质:

1、最优子结构:最优解法能被分解到多个子问题中

2、重叠子问题:子问题能重复多次且解法能被重复利用

马尔科夫决策过程(MDP)满足以上两个性质,所以任何MDP都可以用动态规划来解。动态规划与强化学习的区别就是动态规划假设MDP模型是全知的(即参数可知) 而强化学习可以使MDP未知。

MDP需要解决的问题有两种,第一种是prediction,它已知MDP的S,A,P,R,γ以及policy,目标是算出在每个状态下的value function(值函数其实就是问题的目标,一般都是跟reward有关的函数,例如Atari小游戏,一般值函数就是累计的得分的期望。目标一般就是最大化这个值函数。而第二种是control,它已知MDP的S,A,P,R,γ但是policy未知(即动作action未知),因此它的目标不仅是计算出最优的value function而且要给出最优的Policy。

二、策略迭代POLICY ITERATION

策略迭代就是在policy未知的情况下,根据每次的reward学到最优policy。策略迭代每次先初始化每个状态的值函数v(s)和一个策略,然后根据这个策略计算值函数v(s), 通过这个值函数来根据贪心策略更新策略,不断迭代直到策略收敛,下面是算法的流程:

1、initialization

初始化所有状态的v(s)以及π(s)(初始化为随机策略)

2、poicy evaluation

用当前的v(s)对当前策略进行评估,计算出每一个状态的v(s),直到v(s)收敛,才算训练好了这个状态价值函数V(s)

3、policy improvement

既然上一步已经得到了当前策略的评估函数V(s),那么就可以利用这个评估函数进行策略改进啦。

在每个状态s时,对每个可能的动作a,都计算一下采取这个动作后到达的下一个状态的期望价值。看看哪个动作可以到达的状态的期望价值函数最大,就选取这个动作。以此更新了π(s)

然后再次循环上述2、3步骤,直到V(s)与π(s)都收敛。

下面总结一下Policy evaluation和Policy improvement这两个阶段:

2.1策略评估Policy evaluation

策略评估就是在任意策略下,计算每个状态的值函数vπ,我们也把它称为预测问题。由值函数的定义Vπ​(s)=Eπ​[Gt​∣St​=s]展开为

Vπ​(s)=∑aπ(as)∑s′​P(s′∣s,a)(R(s,a,s′)+γVπ​(s′))

其中π(as)为在s状态下执行动作a的概率,

下面是策略评估的python代码

def policy_evaluation(self, agent, max_iter=-1):

iteration = 0

# iterative eval

while True:

# one iteration

iteration += 1

new_value_pi = agent.value_pi.copy()

for i in range(1, agent.s_len):  # for each state

value_sas = []

ac = agent.pi[i]

transition = agent.p[ac, i, :]

value_sa = np.dot(transition, agent.r + agent.gamma * agent.value_pi)

new_value_pi[i] = value_sa  # value_sas[agent.policy[i]]

diff = np.sqrt(np.sum(np.power(agent.value_pi - new_value_pi, 2)))

# print 'diff={}'.format(diff)

if diff < 1e-6:

break

else:

agent.value_pi = new_value_pi

if iteration == max_iter:

break

2.2策略改进Policy improvement

策略改进是Greedy policy,它寻找每个状态下得到最大值函数vπ的策略π,也就是说,采取哪个动作可以达到下一个状态的最大值,那么就选择这个动作为最优策略

计算期望值

Qπ​(s,a)=∑s′,rP(s′,rs,a)(r+γVπ​(s′))

改进策略

π′(s)=argmaxaQπ​(s,a)

改进策略后更新状态值

Vπ′​(s)=maxa​∑s′,rP(s′,rs,a)(r+γVπ′​(s′))

策略改进的python代码如下:

def policy_improvement(self, agent):

new_policy = np.zeros_like(agent.pi)

for i in range(1, agent.s_len):

for j in range(0, agent.a_len):

agent.value_q[i, j] = np.dot(agent.p[j, i, :], agent.r + agent.gamma * agent.value_pi)

max_act = np.argmax(agent.value_q[i, :])

new_policy[i] = max_act

if np.all(np.equal(new_policy, agent.pi)):

return False

else:

agent.pi = new_policy

return True

策略迭代算法的伪代码如下所示:

三、价值迭代VALUE ITERATION

价值迭代算法主要流程如下。

1、初始化Value Function,即对每个状态的价值都赋一个初始值,一般是0

2、计算每一个状态-动作pair 的值,也就是Q(s,a)

3、 每一个状态st​下都有一个动作空间at​∈A,maxat​​Q(st​,at​),即最大的Q值作为当前状态的价值,更新Value Function

4、返回第2步,直至Value Function收敛。

迭代公式如下:

Vt+1​(s)=max​∑s′,rP(s′,rs,a)(r+γVt​(s′))

值迭代的伪代码如下:

值迭代的python代码如下:

def value_iteration(self, agent, max_iter=-1):

iteration = 0

while True:

iteration += 1

new_value_pi = np.zeros_like(agent.value_pi)

for i in range(1, agent.s_len):  # for each state

value_sas = []

for j in range(0, agent.a_len):  # for each act

value_sa = np.dot(agent.p[j, i, :], agent.r + agent.gamma * agent.value_pi)

value_sas.append(value_sa)

new_value_pi[i] = max(value_sas)

diff = np.sqrt(np.sum(np.power(agent.value_pi - new_value_pi, 2)))

if diff < 1e-6:

break

else:

agent.value_pi = new_value_pi

if iteration == max_iter:

break

print('Iter {} rounds converge'.format(iteration))

for i in range(1, agent.s_len):

for j in range(0, agent.a_len):

agent.value_q[i, j] = np.dot(agent.p[j, i, :], agent.r + agent.gamma * agent.value_pi)

max_act = np.argmax(agent.value_q[i, :])

agent.pi[i] = max_act

那么策略迭代和值迭代有什么区别和联系呢?

共同点:

  1. 他们都是基于模型的方法,也就是说都需要知道环境的状态转移概率P;
  2. 都需要通过bellman方程来更新状态值函数

不同点:

1、策略迭代在价值评估阶段,每迭代一次都需要保证每个状态的值函数收敛,这是非常耗时的;而值迭代是采用动态规划的思想来收敛每个状态的值函数的。

2、策略迭代的第二步policy evaluation与值迭代的第二步finding optimal value function十分相似,除了后者用了max操作,前者没有max.因此后者可以得出optimal value function, 而前者不能得到optimal function.

3、策略迭代的收敛速度更快一些,在状态空间较小时,最好选用策略迭代方法。当状态空间较大时,值迭代的计算量更小一些。

4*****、侧重点不同:策略迭代最后是策略收敛,而值迭代是值函数收敛;收敛的方式也不同,策略迭代是argmax,而值函数是max

强化学习三、策略迭代与值迭代相关推荐

  1. 策略迭代与值迭代的区别

    策略迭代与值迭代都属于强化学习里面策略求解中的动态规划方法.其区别是什么呢? 首先看一张图片: 首先看策略迭代: 1.initialization 初始化所有状态的v(s)以及π(s)(初始化为随机策 ...

  2. 强化学习理论基础(MDP、值函数与贝尔曼公式以及表格式Agent)

    强化学习理论基础(MDP.值函数与贝尔曼公式以及表格式Agent) 前言 一.MDP策略与环境模型 二.值函数与贝尔曼公式 1. 值函数 2. 贝尔曼公式 三.表格式Agent 1. 概念介绍 2. ...

  3. 强化学习之策略迭代求解冰冻湖

    理论回顾 [1]. Bellman方程求解 [2]. 3.12 Value Iteration - Frozen Lake Problem.ipynb [3]. 强化学习中马尔科夫决策过程和贝尔曼方程 ...

  4. 强化学习 动态规划 策略评估 策略改进 策略迭代 有模型 无模型

    目录 一.动态规划 1.1核心思想 1.2异步动态规划 二.策略评估与改进 2.1有模型学习与无模型学习 2.2策略评估 2.2.1输入 2.2.2输出 2.2.3迭代过程 2.3策略改进 2.3.1 ...

  5. 【强化学习】策略梯度Policy-Gradient

    目录 Value-based 强化学习方法的不足 Policy-based 强化学习方法的引入 策略梯度的优化目标 策略函数的设计 Softmax策略函数 Gauss策略函数 蒙特卡罗策略梯度rein ...

  6. 强化学习(十三) 策略梯度(Policy Gradient)

    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...

  7. 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法

    前6篇我们都是估计动作值函数Q,从而可以根据估计的Q值选择相应的动作.但是这样的值函数(Value Based)估计方法有着一定的限制.第一,值函数估计方法最后得到的策略是固定策略,不能应对最优策略是 ...

  8. 【深度强化学习】策略梯度 Policy Gradients

    文章目录 前言 values 和 policy 策略的表示 策略梯度 REINFORCE method 实例:CartPole 前言 重读<Deep Reinforcemnet Learning ...

  9. 【7】强化学习之策略梯度(Policy Gradient)

    [李宏毅]强化学习笔记(一) 什么是强化学习 监督学习 VS. 强化学习 AlphaGo Chat-bot Outline 1. Policy-based Approach:Learning an A ...

  10. 重温强化学习之策略梯度算法

    1.介绍 这里仍考虑无模型的方法:策略是从值函数中导出的,使用贪婪的方法导出最优策略,使用e贪婪策略导出行为策略,直接参数化策略                            考虑之前强化学习 ...

最新文章

  1. 临平职高计算机专业高职考大学,临平职高高考再传捷报 本科连续四年蝉联杭州市第一...
  2. 上帝的指纹——分形与混沌
  3. MariaDB 求和,最大值,最小值,平均数
  4. CentOS生成自签名证书配置Apache https
  5. python 匹配字符串map lambda函数_Python map amp; reduce 以及lambda匿名函数 - jvisualvm - ITeye博客...
  6. 【ElasticSearch】Es 源码之 AnalysisModule 源码解读
  7. java invoke 泛型_如何通过java反射调用含有泛型数组参数的方法
  8. mysql--------常用命令
  9. 写代码会用到哪些常用的软件
  10. VS2008 SP1开发环境补丁列表
  11. 文本框改变之onpropertychange事件
  12. 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
  13. 【深度强化学习】A3C
  14. MemCache详解
  15. 一文带你了解SLB、F5、Nginx负载均衡
  16. SLAM十四讲之第5讲--相机标定
  17. queue容器常用接口
  18. 高视角!如何认识微积分方法与原理?
  19. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
  20. 腾讯云 CVM 定价标准?详解

热门文章

  1. AppStore算法再次升级,运营如何在ASO中破冰?
  2. elasticsearch问题: SERVICE_UNAVAILABLE/1/state not recovered /initialized
  3. html页面访pdf样式,html网页布局模板.pdf
  4. PDF报表生成方式:iText与JasperReport概述
  5. 2014大众点评Hackathon参赛感想
  6. ORA-28003和ORA-20001解决办法
  7. Pycharm远程调试踩坑:[Errno 2] No such file or directory Process finished with exit code 2
  8. python自然语言处理第三章:处理原始文本
  9. UG二次开发GRIP显示图层
  10. EM算法 --入门级详解