首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Q-Learning 基础强化学习算法

上个周末又看了下,机器学习的应用。对,就是用来打牌(21点)。虽然21点感觉并不是很难,但是如何让机器自己学会打牌呢?这个还是蛮有意思的。这个打牌的算法就是基础的强化学习算法Q-Learning

【算法介绍】

首先,机器学习学的是什么呢? 这个必须先明确,学的是决策机制

Q-Learning, 该算法属于强化学习基础算法。强化学习就是大名鼎鼎的阿法狗Zero的核心部分之一。一般新闻里面讲,强化学习通过试错来学习。那么具体是如何做到的呢? 反正我是很好奇。

Q-learning 就是基础的强化学习算法,接下来我将介绍该算法。

讲到学习,大家可能会想到吃一堑长一智之类的词。 一个地方摔倒了,下次不能再摔了, 这就是学习。抽象点讲,你为什么摔倒了呢。那是你在离水坑0.1米(状态1)的地方,采取了错误的动作(动作1),结果摔倒了。如果摔倒这个结果能打分的花,你可能会给-100分(Q值)

那么总结下,你的试错就是,在状态1(s1)采取了错误的动作(a1), 结果得分(r) = -100

那么你学到了什么呢? 很简单呀,你学到了这个教训呀。 你记忆中在这个位子,采取这个动作的Q值是-100,所以下次你就不会这么操作了

那如果把所有状态下,所有动作的的Q值算出来,那不就行了。

本质上真的真的就这么简单。

那我们让情况复杂点。

假设,现在的任务是一只小猴子(位子1),需要到位子6拿到香蕉。 拿到香蕉算100分。如何让他自己找到拿香蕉的路呢?并且学会找到拿香蕉的路呢。 当然啦,他肯定不能预知下一个位子哈。

【公式讲解】

接下来将解释核心公式:

此算法并不是等每一局结束后才学习。而是逐步学习。假设是位子5走到位子6,学习的机制如下:

s(位子5),a(动作向右),s_(位子6),r(奖励值=100)

以上公式可以拆分为三部分:

1)Q_目标(位子5,向右)= 位子5 奖励值r + Q(位子6).MAX * 折现率90%

2)Q_预测(位子5,向右) 是目前Q值表中 (位子5,向右)的Q值

3)Q(位子5,向右)+= 学习率*(Q_目标 - Q_预测)

通俗解释下该公式:

1)因为位子5本身奖励值是0(没有香蕉),那么相当于Q_预测= Q(位子6) *90%, 这样就完成了反向传递

2) 实际值就是该轮学习前,表格里的Q值

3) 将预测值与实际值的差*学习率 更新到Q值表中。

以实际数据为例子来看下,

以下为4轮完整结束后的Q值表,可以看出从第一轮随机要38步才能找到,到第四轮5步就能走到位子6.这就是他自我学习的过程。

第一轮:

第一个问题,为什么除了(5,右)其他都是0?

因为,Q-learning是逐步学习,当1走到2时,1向2学; 当4走到3时,4向3学。但是在第一轮初始Q值表都是0. 所以学习的结果也是0. 只有(5,右)的下一步是6,所以能学到。

9 = 100* 折现率90% * 学习率 10%

第二轮,大家看到第二轮的(4,右)也有值了。那是因为位子5 Q值的存在,使得他能够向下一步学习

第三轮,第四轮 从图能够看出,慢慢的Q值就会反向传递到每个位子。这样就计算了完整Q值表

简答的说,Q-Learning就是要做一张大表涵盖所有的状态和动作,然后将最终奖励通过逐步学习的方式,传导到之前每一个状态中去,然后用Q值表指导选择。

【代码讲解】

终于来到代码部分,还没搞清楚微信公众号如何上传代码或者说共享文件,所以这次先以截图的形式。 如果有会上传的朋友,请私信下我,谢谢!

注:此代码块是在周莫凡大神的基础上修改得来。

这部分是import必要的模块,定义参数(学习率,折现率,状态个数,动作类型等)

这部分是用Pandas模块,制作一个空的表格,行代表动作,列代表状态

这部分是如何决策。就算最初始状态也是有决策的(虽然是随机)

if 后面两行的意思是,如果 一个(0~1)的随机数 大于0.9 或者说Q值都为0, 那么随机选择动作

else 后面一行的意思是,如果不满足If条件,则选择当前状态下,Q值最大的动作

以下就是最关键的学习过程了:

第一行是,创建一个空的Q值表:

中间是参数设置,然后重点在While not is_terminated:下面

A=choose_action()的作用是用我们上面定义好的策略选择动作;

S_,R 就是选择动作后的环境的反馈。

接下来就是计算Q_目标值

q_target = R + GAMMA * q_table.iloc[S_, :].max()

和将目标值与目前Q值表里的值进行学习,Alpha是学习率

q_table.loc[S, A] += ALPHA * (q_target - q_predict)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180619A1XK9B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券