本次博客依然是伯克利大学的Grid World作业,对应的是Question 6和Question 7。

目录

  • 1. 值迭代的局限性
  • 2. Q Learning是怎么做的
  • 3. 在Grid World 使用 Q Learning
  • 4. 改进方法:Epsilon Greedy
  • 5. 参考资料

上次的作业“MDP模型之Grid World(值迭代方法)”,链接为https://blog.csdn.net/weixin_42763696/article/details/105333539

在上一次的作业中,我们已经了解了如何使用值迭代方法求解Grid World,那么Q Learning方法又是什么呢?自然,Q Learning也是一种强化学习的方法,那么它和值迭代又有什么区别呢?这就要从两者的算法思路开始讲了。

1. 值迭代的局限性

首先让我们梳理一下值迭代的步骤

  1. 遍历每一个state(格子)
  2. 遍历当前state的每一个合法action(上下左右)
  3. 对执行action移动到的所有state’的reward进行求和
  4. 保存能获得最大reward的action,并将reward值记录在格子(state)上

强化学习作为一种算法,肯定是用来解决现实世界的问题的,但是在值迭代的算法步骤中,是有两步在现实中很难获取到的:

  • 第一步:现实世界中,你不可能获得所有的状态,比如一个没有平面图的迷宫,每一条路都是陌生的。
  • 第三步:现实世界中,到下一个状态的概率不可能是一个固定值,你永远不知道在吃完午饭后,下午上课老师点到你的概率是多少(午饭state->执行吃饭action->被点名state')。

第三步还有补充的一点,就是现实生活中的action不可能是固定的上下左右,在午饭state我可以执行回宿舍action, 不吃饭action, 玩手机action, 学习action…等等无数种行动,并且无论执行哪个action,都无法知道被点名state'的概率。

这样看来,值迭代有很明显的局限性,为了用强化学习解决更多的问题,所引申出的算法就是Q Learning。

2. Q Learning是怎么做的

Q Learning采用的是一种不断试错方式学习,针对上面两步,Q Learning使用了下面的解决办法

  1. 计算的时候不会遍历所有的格子,只管当前状态,当前格子的reward值
  2. 不会计算所有action的reward,每次行动时,只选取一个action,只计算这一个action的reward

值迭代在计算reward的时候,会得到每个action的reward,并保留最大的。

而Q Learning在计算reward的时候,虽然也会每个action的reward,但会全部都保留下来。

Q Learning的公式如下:
q π ( s , a ) = q π ( s , a ) + α [ R + γ m a x a ′ q π ( s ′ , a ′ ) − q π ( s , a ) ] q_π(s,a) = q_π(s,a) + \alpha[R+\gamma \mathop{max}\limits_{a'}q_π(s',a')-q_π(s,a)] qπ​(s,a)=qπ​(s,a)+α[R+γa′max​qπ​(s′,a′)−qπ​(s,a)]
整理后得到
q π ( s , a ) = ( 1 − α ) q π ( s , a ) + α [ R + γ m a x a ′ q π ( s ′ , a ′ ) ] q_π(s,a) =(1 - \alpha) q_π(s,a) + \alpha[R+\gamma \mathop{max}\limits_{a'}q_π(s',a')] qπ​(s,a)=(1−α)qπ​(s,a)+α[R+γa′max​qπ​(s′,a′)]

从前往后梳理一下公式:

  • q π ( s , a ) q_π(s,a) qπ​(s,a)表示的是在s时执行a的reward值之和,包括了经验reward值和新的reward值的相加。

  • ( 1 − α ) q π ( s , a ) (1 - \alpha)q_π(s,a) (1−α)qπ​(s,a)表示的是经验reward,即学习率*之前学习到的执行该action的reward。可以看到学习速率α越大,保留之前训练的效果就越少。

  • α [ R + γ m a x a ′ q π ( s ′ , a ′ ) ] \alpha[R+\gamma \mathop{max}\limits_{a'}q_π(s',a')] α[R+γa′max​qπ​(s′,a′)]就是新的reward值了,下面逐步拆解。

  • γ m a x a ′ q π ( s ′ , a ′ ) \gamma \mathop{max}\limits_{a'}q_π(s',a') γa′max​qπ​(s′,a′)是计算下一个state’中最大的reward值,这个称之为“记忆奖励”。因为在之前某次到达state’的时候,保存了四个方向(a’)的reward值,通过“回忆”,想起来自己之前在state’上能收获的最大好处,就可以直接影响在当前state时reward的计算。 γ \gamma γ是用来增加or减少state’的影响的, γ \gamma γ越大,智能体就会越重视以往经验,越小,就只重视眼前利益(R)。

  • R是执行了action后的reward,比如在终点处执行exit,获得+1/-1的reward。

接下来继续通过模拟的方式理解Q Learning的过程

3. 在Grid World 使用 Q Learning

图1 初始状态 在初始状态下,智能体被扔到了Grid World的起点,此时包括终点在内的每个格子的reward都是未知的,这些都会在智能体的脚踏到那个格子上的时候才会明朗。

接下来让我们向上走一步,走到(0,1):

图2 向上走了一步

什么事情都没有发生,这是因为智能体在踩到下一个状态后,发现奖励值为0,因此没有任何值的更新。

这种情况会一直保持下去,智能体继续向上走,并且右转弯

图3 走了好多步

直到我走到了终点(3,2),执行下一步动作exit的时候,智能体能够获得的reward是1,也就是上述公式中R的值为1。

图4 此时只是待在右上角的(3,2),还没有执行动作exit

图5 在(3,2)执行exit步骤后,左下角可以看到,reward为1
将学习率0.5带入公式,计算一下,由于这是第一次得到reward,没有任何之前的经验可以参考,因此所有的经验都为0,计算公式为:
q ( ( 3 , 2 ) , e x i t ) = ( 1 − 0.5 ) ∗ 0.0 + 0.5 [ 1 + 0.9 ∗ 0 ] = 0.5 q((3,2),exit) = ( 1 - 0.5 ) * 0.0 + 0.5[1 + 0.9*0] = 0.5 q((3,2),exit)=(1−0.5)∗0.0+0.5[1+0.9∗0]=0.5
这样智能体的第一次冒险就结束了,只计算出一个终点时exit动作的Q Value。

第二次让智能体走相同的路线,前几步由于reward值还是0,因此结果相同,直到倒数第二个格子(2,2)处

图6 刚进入(2,2),还没有执行向右走的动作
图7 在(2,2)执行向右走的动作 可以看到在(2,2)的位置,向右的方向计算出了0.23,计算过程如下:

q ( ( 2 , 2 ) , e a s t ) = ( 1 − 0.5 ) ∗ 0.0 + 0.5 [ 0.0 + 0.9 ∗ 0.5 ] = 0.225 q((2,2),east) =( 1 - 0.5 ) * 0.0 + 0.5 [ 0.0 + 0.9 * 0.5 ] = 0.225 q((2,2),east)=(1−0.5)∗0.0+0.5[0.0+0.9∗0.5]=0.225
east就是向东、向右走,0.225经过四舍五入变成0.23,符合图7的结果。

在(3,2)处再执行exit动作后,结果为图8

图8 在(3,2)执行exit动作
计算过程如下

q ( ( 3 , 2 ) , e x i t ) = ( 1 − 0.5 ) ∗ 0.5 + 0.5 [ 1 + 0.9 ∗ 0 ] = 0.75 q((3,2),exit) =( 1 - 0.5 ) * 0.5 + 0.5 [ 1 + 0.9 * 0 ] = 0.75 q((3,2),exit)=(1−0.5)∗0.5+0.5[1+0.9∗0]=0.75

这样我们重复上述路径4次,最终得到图9的结果

图9 执行4次上述路径
注意:上述的过程都是由人类在执行动作,每一步都是确定的,因此可以定向地先往上走再往右走。真正强化学习的时候是由智能体自主行动,每个格子的action选择最佳值,但这样会出现问题,这会在4中讲到

4. 改进方法:Epsilon Greedy

上述的算法看上去可以在每次动作都选择到最佳的动作,但在使用上述算法让智能体去学习Grid World的时候,会遇到图10的问题:

图10 似乎有些不对劲? 上述是迭代了好多次后智能体学会的最佳action选择,可以看到这个结果还是很有问题的,毕竟在第一行的时候,很明显朝右的方向是最佳选择,但学习出的都是朝上的方向,这里问题出在action的选择上。

在Q Learning的方法中,我们选择每次reward最大的方向,这样就会陷入局部最优,即当向上的action的reward>0时,我就不会再去看别的方向的reward,即使向右走的reward要更大

这里的优化方法就是使用Epsilon Greedy,即以Epsilon的概率去选取reward最大的action,或者随机的action,代码如下:

r = random.random()
if r > epsilon:# 得到reward最大的actionreturn computeActionFromQValues(state)
else:# 返回随机选择的合法action之一return random.choice(legalActions)

这样一来,学习到的结果就正常多了

图11 更符合直觉的结果

完结,撒花~

5. 参考资料

  • 知乎回答:https://www.zhihu.com/question/26408259
  • csdn博客:https://blog.csdn.net/itplus/article/details/9361915

MDP模型之Grid World(Q Learining方法)相关推荐

  1. 【足式机器人控制算法】(5.1)分解式虚拟模型VMC解耦思想 +反馈控制的方法规划反作用力 +运动学雅可比+虚功原理规划关节扭矩方法

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.分解式VMC 的实现原理 1.虚拟力的定义 2.虚拟力分配方法 ...

  2. matlab血糖预测,一种基于VMD-PACF-BP模型的动态血糖在线预测方法与流程

    本发明属于血糖预测技术领域,尤其涉及一种基于VMD-PACF-BP模型的动态血糖在线预测方法. 背景技术: 目前,中国患有糖尿病人数已成为在世界上拥有糖尿病患者最多的国家.为了降低糖尿病患者长期处于高 ...

  3. ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)

    ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参[2种方法,ShuffleSplit+GridSearchCV.TimeSeriesSplitGSCV].模型评估) 目录 ...

  4. python sklearn.neural_network.MLPClassifier() 神经网络改变模型复杂度的四种方法

    MLPClassifier() 改变模型复杂度的四种方法 调整神经网络每一个隐藏层上的节点数 调节神经网络隐藏层的层数 调节activation的方式 通过调整alpha值来改变模型正则化的程度(增大 ...

  5. 指标体系|四个模型教会你指标体系构建的方法

    作为数据分析师,构建数据指标体系是较为基础但是极为重要的工作内容.好的指标体系能够监控业务变化,当业务出现问题时,分析师们通过指标体系进行问题回溯和下钻能够准确地定位到问题,反馈给业务让其解决相应的问 ...

  6. bigru参数计算_[数据挖掘]华中科技大学 李黎 周达明:基于CNN-BiGRU模型的操作票自动化校验方法...

    原标题:[数据挖掘]华中科技大学 李黎 周达明:基于CNN-BiGRU模型的操作票自动化校验方法 智能变电站操作票校验是保障站内操作准确无误的重要环节,当前基于经验的人工校验方法主观性强,校验效率较低 ...

  7. 3dmax给模型添加渐变背景有哪些方法

    3dmax给模型添加渐变背景有哪些方法 3dmax软件给模型添加渐变背景有什么方法?3dmax软件模型制作完成后,渲染模型背景黑色的居多.为了让模型更加逼真,我们也可以将背景颜色改为渐变背景.那么,今 ...

  8. 3dmax软件渲染模型导出JPG格式图片的方法

    3dmax软件渲染模型导出JPG格式图片的方法.感兴趣的小伙伴们快和小编一起看看3dmax软件渲染模型怎么保存为JPG格式的吧! 3dmax软件渲染模型导出JPG格式图片的方法如下: 步骤一.首先在电 ...

  9. 提高机器学习模型性能的五个关键方法

    提高机器学习模型性能的五个关键方法 1. 数据预处理 2. 特征工程 3. 机器学习算法 4. 模型集成与融合 5. 数据增强 以下是各个方面的具体分析和方法: [ 说明:1.这里主要是各个关键方法的 ...

最新文章

  1. JavaScript 同时建立多个websocket连接
  2. AB1601读触摸芯片ASC0106的IIC波形图
  3. 奖金+大赛入门,来参加我们的论文有奖复现!
  4. iOS之深入解析Runtime的Method-Swizzling方法交换的妙用和底层原理
  5. 如何设置电脑自动锁屏_这个手机锁屏密码竟可以根据时间而变化!密码每分钟都会发生改变...
  6. 专访:混合云的发展趋势
  7. IME输入法编程心得
  8. 视频编解码(十):FFMPEG操作总结二
  9. VMware View虚拟桌面在安卓平板电脑上的演示
  10. 超强大几十款功能组合而成的一款工具箱微信小程序源码下载支持N个流量主
  11. Linux操作系统面试题
  12. OEL6.5+11GR2安装(超级详细版)
  13. 解决Windows服务器localhost可以访问,IP无法访问的问题
  14. Angular2 Directive讲解
  15. 计算机教育中缺失的一课 - MIT - L5 - 命令行环境
  16. 苦练基本功之分布式系统学习
  17. python 源代码 macd双底 高 低_macd双底选股公式
  18. 固态硬盘颗粒:SLC/MLC/TLC有什么区别?
  19. matlab的imshow()显示图片过小咋办
  20. 【JVM源码解析】模板解释器解释执行Java字节码指令(上)

热门文章

  1. python 三维矩阵乘以二维矩阵_如何将一个二维数组和一个三维数组矩阵相乘得到一个三维数组?...
  2. 卡特兰数[catalan数]`
  3. Android 适配魅族去掉smartbar
  4. IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter
  5. 【Word】关于页码和节的一些经验分享
  6. Java中transient关键字的详细总结
  7. transient解析
  8. SQL Server 数据查询 ②
  9. Route-Map个人理解及实验解析
  10. Vue静态资源之public文件