位置: IT常识 - 正文

【强化学习】Q-Learning算法详解

编辑:rootadmin
【强化学习】Q-Learning算法详解 1 Q-Learning算法简介1.1 行为准则

推荐整理分享【强化学习】Q-Learning算法详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

我们做很多事情都有自己的行为准则,比如小时候爸妈常说:不写完作业就不准看电视。所以我们在写作业这种状态下,写的好的行为就是继续写作业,知道写完他,我们还可以得到奖励。不好的行为就是没写完就跑去看电视了,被爸妈发现,后果很严重。小时候这种事情做多了,也就变成我们不可磨灭的记忆。这和我们提到的Q-Learning有什么关系呢?原来Q-Learning也是一个决策过程,和小时候的这种情况差不多。我们举例说明。 假设现在我们处于写作业的状态,而且我们以前没有尝试过写作业时看电视,所以现在我们有两种选择:1,继续写作业,2,跑去看电视。以为以前没有被惩罚过,所以我选看电视,然后现在的状态变成了看电视,我又选了看电视,接着我还是看电视,最后爸妈回家,发现我没写完作业就去看电视了,狠狠的惩罚了我一次,我也深刻地记下了这一次的经历,并在我脑海中将“没写完作业去看电视”这种行为更改为负面行为,我们接下来看看Q-Learning根据很多这样的经历是如何决策的。

1.2 Q-Learning决策

假设我们的行为准则已经学习好了,我们现在处于状态s1,我在写作业,我有两个行为a1,a2,分别是看电视和写作业,根据我的经验,在这种s1状态下,a2写作业带来的潜在奖励要比a1看电视高,这里的潜在奖励我们用一个有关于s和a的Q表格代替。在我的记忆Q表格中,Q(s1, a1)=-2要小于Q(s1, a2)=1,所以我们判断要选择a2作为下一个行为。现在我们的状态更新为s2,我们还是有两个同样的选择,重复上面的过程,在行为准则Q表中寻找Q(s2,a1)Q(s2,a2)的值,并比较他们的大小,选取比较大的一个。接着根据a2我们到达s3并在此重复上面的决策过程。Q-Learning的方法就是这样决策的。看完决策我们在来研究一下这张行为准则Q表是通过什么样的方式更改,提升的。

1.3 Q-Learning更新【强化学习】Q-Learning算法详解

所以回到之前的流程,根据Q表的估计,因为在s1中,a2的值比较大,通过之前的决策方法,我们在s1采取了a2,并到达s2,这是我们开始更新用于决策的Q表,接着我们并没有在实际中采取任何行为,而是再想象自己在s2上采取了每种行为,分别看看两种行为哪一个的Q值大,比如说Q(s2,a2)的值比Q(s2,a1)的大,所以我们把大的Q(s2,a2)乘上一个衰减值γ(比如是0.9)并加上到达s2时所获取的奖励R(这里我们还没有获取到棒棒糖,所以奖励为0)因为会获取实实在在的奖励R,我们将这个作为我现实中Q(s1,a2)的值,但是我们之前是根据Q表估计Q(s1,a2)的值。所以有了现实和估计值,我们就能更新Q(s1,a2),根据估计与现实的差距,将这个差距乘以一个学习效率α累加上老的Q(s1,a2)的值变成新的值。但时刻记住,我们虽然用maxQ(s2)估算了一下s2的状态,但还没有在s2上做出任何的行为,s2的行为决策要等到更新完了以后再重新另外做。这就是off-policy的Q-Learning是如何决策和学习优化决策的过程。

2 Q-Learning整体算法

上图概括了之前所有的内容。这也是Q-Learning的算法,每次更新我们都用到了Q现实和Q估计,而且Q-Learning的迷人之处就是在Q(s1,a2)现实中,也包含了一个Q(s2)的最大估计值,将对下一步的衰减的最大估计和当前所得到的奖励当成这一步的现实。最后描述一下这套算法中一些参数的意义。ε-greedy是用在决策上的一种策略,比如ε=0.9时,就说明有90%的情况我会按照Q表的最优值选择行为,10%的时间使用随机选行为。α是学习率,来决定这次的误差有多少是要被学习的,α是一个小于1的数。γ是对未来reward的衰减值。我们可以这样想: 重写一下Q(s1)的公式,将Q(s2)拆开,因为Q(s2)可以像Q(s1)一样,是关于Q(s3)的,所以可以写成这样,然后以此类推,不停地这样写下去,最后就能携程这样,可以看出Q(s1)是有关于之后所有的奖励,但这些奖励正在衰减,离s1越远的状态衰减越严重。可以想象Q-Learning的机器人天生近视眼,γ=1时,机器人有了一副合适的眼镜,在s1看到的Q是未来没有任何衰变的奖励,也就是机器人能清清楚楚看到之后所有步的全部价值,但是当γ=0,近视机器人没了眼镜,只能摸到眼前的reward,同样也就只在乎最近的大奖励,如果γ从0变到1,眼镜的度数由浅变深,对远处的价值看得越清楚,所以机器人渐渐变得有远见,不仅仅只看眼前的利益,也为自己的未来着想

3 代码解析

可运行的代码地址如下(免费下载):https://download.csdn.net/download/shoppingend/85186697

3.1 Q-Learning算法更新

上面将的整个算法就是一直不断的更新Q-table里的值,然后再根据新的值来判断要在某个state采取怎样的action。Q-Learning是一个off-policy的算法,因为里面的max action让Q-table的更新可以不基于正在经历的经验(也可以是现在学习着很久以前的经验,甚至是学习他人的经验)。不过本例子我们没有运用到 off-policy,而是把Q-Learning用在了on-policy上,也就是现学现卖,将现在经历的直接当场学习并运用。 下面的代码,我们可以根据上面的图片中的算法对应起来,这就是整个 Q-Learning 最重要的迭代更新部分。

def update(): # 学习 100 回合 for episode in range(100): # 初始化 state 的观测值 observation = env.reset() while True: # 更新可视化环境 env.render() # RL 大脑根据 state 的观测值挑选 action action = RL.choose_action(str(observation)) # 探索者在环境中实施这个 action, 并得到环境返回的下一个 state 观测值, reward 和 done (是否是掉下地狱或者升上天堂) observation_, reward, done = env.step(action) # RL 从这个序列 (state, action, reward, state_) 中学习 RL.learn(str(observation), action, reward, str(observation_)) # 将下一个 state 的值传到下一次循环 observation = observation_ # 如果掉下地狱或者升上天堂, 这回合就结束了 if done: break # 结束游戏并关闭窗口 print('game over') env.destroy()if __name__ == "__main__": # 定义环境 env 和 RL 方式 env = Maze() RL = QLearningTable(actions=list(range(env.n_actions))) # 开始可视化环境 env env.after(100, update) env.mainloop()3.2 主结构class QLearningTable: # 初始化 def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9): # 选行为 def choose_action(self, observation): # 学习更新参数 def learn(self, s, a, r, s_): # 检测 state 是否存在 def check_state_exist(self, state):3.3 预设值import numpy as npimport pandas as pdclass QLearningTable: def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9): self.actions = actions # a list self.lr = learning_rate # 学习率 self.gamma = reward_decay # 奖励衰减 self.epsilon = e_greedy # 贪婪度 self.q_table = pd.DataFrame(columns=self.actions, dtype=np.float64) 3.4 决定行为 def choose_action(self, observation): self.check_state_exist(observation) # 检测本 state 是否在 q_table 中存在(见后面标题内容) # 选择 action if np.random.uniform() < self.epsilon: # 选择 Q value 最高的 action state_action = self.q_table.loc[observation, :] # 同一个 state, 可能会有多个相同的 Q action value, 所以我们乱序一下 action = np.random.choice(state_action[state_action == np.max(state_action)].index) else: # 随机选择 action action = np.random.choice(self.actions) return action3.5 学习

我们根据是否是terminal state(回合终止符)来判断应该如何更新Q-table。更新的方式:update = self.lr * (q_target - q_predict) 这可以理解成神经网络中的更新方式,学习率 ×(真实值 - 预测值)。将判断的误差传递回去,有着和神经网络更新的异曲同工之妙。

def learn(self, s, a, r, s_): self.check_state_exist(s_) # 检测 q_table 中是否存在 s_ (见后面标题内容) q_predict = self.q_table.loc[s, a] if s_ != 'terminal': q_target = r + self.gamma * self.q_table.loc[s_, :].max() # 下个 state 不是 终止符 else: q_target = r # 下个 state 是终止符 self.q_table.loc[s, a] += self.lr * (q_target - q_predict) # 更新对应的 state-action 值3.6 检测state是否存在

这个功能就是检测Q-table中有没有当前state的步骤了,如果还没有当前的state,那么我们就插入一组全0数据,当做这个state的所有action初始values。

def check_state_exist(self, state): if state not in self.q_table.index: # append new state to q table self.q_table = self.q_table.append( pd.Series( [0]*len(self.actions), index=self.q_table.columns, name=state, ) )

文章来源:莫凡强化学习https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/

本文链接地址:https://www.jiuchutong.com/zhishi/299802.html 转载请保留说明!

上一篇:01-Node-Express系统框架搭建(express-generator)(node express安装)

下一篇:从傅里叶变换到小波变换详细解释(含代码)(傅里叶变换的过程)

  • opporeno7支持无线充电功能吗(opporeno7支持无线充电吗)

    opporeno7支持无线充电功能吗(opporeno7支持无线充电吗)

  • 苹果手机悬浮球怎么设置关闭(苹果手机悬浮球怎么显示)

    苹果手机悬浮球怎么设置关闭(苹果手机悬浮球怎么显示)

  • 微信星标朋友有什么用呢(微信星标朋友有什么不同)

    微信星标朋友有什么用呢(微信星标朋友有什么不同)

  • qq钱包积分怎么不见了(qq钱包积分怎么获得)

    qq钱包积分怎么不见了(qq钱包积分怎么获得)

  • 微信显示对方无法接收消息(微信显示对方无应答有几种情况可能)

    微信显示对方无法接收消息(微信显示对方无应答有几种情况可能)

  • 苹果x底下12个孔干嘛的(苹果x底部孔位)

    苹果x底下12个孔干嘛的(苹果x底部孔位)

  • 手机如何充电 才能保证电池使用最长久(手机如何充电好)

    手机如何充电 才能保证电池使用最长久(手机如何充电好)

  • 1+8手机什么时候出(1+8手机什么时候上市)

    1+8手机什么时候出(1+8手机什么时候上市)

  • vivox30是双卡双待吗(vivox30是双卡双待手机吗)

    vivox30是双卡双待吗(vivox30是双卡双待手机吗)

  • 三星手机出现蓝屏英文要怎么处理(三星手机出现蓝线滑动)

    三星手机出现蓝屏英文要怎么处理(三星手机出现蓝线滑动)

  • 荣耀30s多少hz(荣耀30s多少毫安)

    荣耀30s多少hz(荣耀30s多少毫安)

  • 苹果6p频繁自动关机(苹果6p频繁自动开关机)

    苹果6p频繁自动关机(苹果6p频繁自动开关机)

  • 剪映慢动作视频怎么制作(拍好的视频怎么制作慢动作特效)

    剪映慢动作视频怎么制作(拍好的视频怎么制作慢动作特效)

  • 三星9198什么时候上市的(三星9191)

    三星9198什么时候上市的(三星9191)

  • qq冻结好友辅助多久通过(qq好友辅助验证一直不通过)

    qq冻结好友辅助多久通过(qq好友辅助验证一直不通过)

  • ipad断触怎么解决(ipad断触修复小技巧)

    ipad断触怎么解决(ipad断触修复小技巧)

  • 抖音怎么上传原图照片(抖音怎么上传原画质视频)

    抖音怎么上传原图照片(抖音怎么上传原画质视频)

  • 朋友圈如何推广(朋友圈如何推广白酒文案)

    朋友圈如何推广(朋友圈如何推广白酒文案)

  • 手机yy怎么搜索房间(手机yy怎么搜索频道语音聊天)

    手机yy怎么搜索房间(手机yy怎么搜索频道语音聊天)

  • 手机qq群里怎么@所有人(手机qq群里怎么@全部)

    手机qq群里怎么@所有人(手机qq群里怎么@全部)

  • x27怎么设置手势(vivox27怎样设置手势解锁)

    x27怎么设置手势(vivox27怎样设置手势解锁)

  • iphonex怎么设置应用锁(iphoneX怎么设置动态壁纸)

    iphonex怎么设置应用锁(iphoneX怎么设置动态壁纸)

  • 淘宝和天猫有什么区别(淘宝和天猫有什么区别ppt)

    淘宝和天猫有什么区别(淘宝和天猫有什么区别ppt)

  • 苹果手表能不能单独使用(苹果手表能不能测血糖)

    苹果手表能不能单独使用(苹果手表能不能测血糖)

  • 苹果8p尺寸长度和宽度(苹果8p手机的长宽高各是多少)

    苹果8p尺寸长度和宽度(苹果8p手机的长宽高各是多少)

  • word目录怎么添加一行(word目录怎么添加下级目录)

    word目录怎么添加一行(word目录怎么添加下级目录)

  • 小米9手机断流怎么解决(小米手机断流严重怎么解决)

    小米9手机断流怎么解决(小米手机断流严重怎么解决)

  • 苹果x充电为啥这么慢(苹果x为什么充电)

    苹果x充电为啥这么慢(苹果x为什么充电)

  • macOS 11 Big Sur 开发者预览版 Beta 8推送

    macOS 11 Big Sur 开发者预览版 Beta 8推送

  • 跨年增票能开红冲吗?
  • 税负怎么计算
  • 研发支出指的是什么
  • 企业银行贷款报表要求
  • 钢材贸易公司是做什么的
  • 企业会计准则颁布部门
  • 发票作废后对方不退回抵扣联怎么办
  • 物料损失怎么入账
  • 培训机构的教材需要教育部门审批吗
  • 企业垃圾处理费计入什么科目
  • 收到以前年度的政府补助会计分录
  • 盈余公积属于什么类账户
  • 劳务派遣公司税务
  • 关联的公司
  • 商标注册费用计入会计科目二级
  • 防伪标识会有假的吗
  • 交通费汇算清缴怎么做账
  • 半月的发票未认证能用吗
  • 个人独资企业免税额度
  • 金蝶用户管理怎么设置
  • 消费税为什么不计入长投成本
  • 什么情况下企业不能辞退员工
  • 企业如何选择会计准则
  • 非居民个人所得税税率表最新
  • 支付航天开票技术服务费280
  • 设备安装需要预缴吗
  • 低值易耗品报废账务处理
  • 划拨用地无使用权怎么办
  • php追加写入
  • 圣托里尼岛游玩攻略
  • 销售方红字发票账务处理?
  • 一文通透从输入URL到页面渲染的全过程----高频面试
  • php微信公众号 全站模板
  • 补缴以前年度公积金账务处理
  • 成品油电子普通发票如何入账
  • 坏账准备计提范围包括
  • 坏账准备的计提金额怎么算
  • 质保金需要确认收入吗
  • 公司买的材料做什么分录
  • 固定资产原价和账面价值的区别
  • 销售货物收到托运怎么办
  • 优惠券抵扣账务处理流程
  • 如何理解会计中的借贷? 知乎
  • 进出口总额用什么字母表示
  • 公司向个人借款合法吗
  • 保险发票入账
  • 开给个人的普通增值税
  • 什么是资产减值转回
  • 研发费用核查要点
  • 银行日记账余额与银行对账单不符
  • 进项发票已认证未抵扣分录
  • 没有本地策略的网站
  • 查看电伊
  • 微软the initiative
  • linux如何开启ftp
  • win7旗舰版怎么进入bios
  • win10打开ie8
  • 命令提示符操作方法
  • 如何卸载centos7
  • win10怎么升级到2020
  • win个性化设置没反应
  • win10非正常关机系统修复
  • unity绘制曲线
  • bootstrap框架怎么用
  • 微信小程序实现留言功能
  • javascript标题
  • js拖动图片
  • 用javascript写表单代码
  • pygame csdn
  • 从最近两会看苹果和谷歌的最大梦魇
  • android应用层是什么
  • PreferenceActivity与PreferenceFragment应用
  • 使用SQLite本地数据库
  • 国税局定额发票查询
  • 电商平台税收怎么交
  • 济南社保减免政策2020通知
  • 知道金额,税额怎么计算
  • 电子税务局密钥不一致
  • 省级税务机关是什么
  • 江西省国家税务局客运定额发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设