浅谈增强学习

前言

这篇文章就是浅谈一下机器学习领域下的增强学习。为什么博文的题目为浅谈,因为笔者对机器学习的认知比较浅。

我在最后会分享一个Q算法的C++代码,该例子体现了如何用Q 算法学习迷宫寻路。读者可参考我上一篇转载博文给出的例子进行学习。


增强学习简介

增强学习,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。这个方法具有普适性,因此在其他许多领域都有研究。

就以下围棋为例,假设某个确定棋局下,该棋局记为S,AI下了一手棋之后,该手棋记为A,之后两方随机乱下,直到分出输赢,输了扣一分,赢了加一分。再次回到S棋局 ,AI再次下A手棋,之后两方随机乱下,直到分出输赢,输了扣一分,赢了加一分。如此往复,直到需要停止时再停止。最后统计出的分数即可认为在S棋局下,下A手棋的分数。关键词语是N多把,下的盘数越多输赢的分数结果就越可信,大数定律。

 比如某一确定棋局下AI下了一手必杀棋,那么之后两方随机乱下N多把后,必杀棋的分数是N,而其他普通棋必然小于N,而臭棋的分数往往小于0,必死棋的分数也就是-N。

AI在遇到某一确定棋局时,下棋时只要选择得分最高的一手棋即可,下棋时AI甚至无需思考。

epsilon  greed

补充一点内容,学习总是漫无方向,两方总是随机乱下也不见得是件好事。介绍一下epsilon greed. epsilon greed说起来比较简单,就是以epsilon 概率随机选取行动,以1- epsilon 概率选取目前已知最优的行动。以下围棋为例,就是当面临某一特定棋局S时,以epsilon 的概率随机的下一手棋,或以1- epsilon 的概率下一手当前积分最高的棋。

epsilon  贪心策略选择了那个行动,那个行动的分数就会被更新。这个策略体现出一种权衡,对于探索(学习)方向的权衡。也就是继续学习没有下过的棋,随机探索然后更新分值,还是继续深入研究哪些目前评估最好的棋,选取最佳然后更新分值,看看他是否更好。随着学习的不断深入,epsilon 的值可以变得越来越小,学习的方式从充分探索转为深入的专研。


AlphaGo也用增强学习

有一些人说AlphaGo 神经网络和增强学习的结合,AlphaGo也采用了上述思想。AlphaGo下了无数把之后,任意棋局下的最佳下法都已学会,自然不是人能搞定的了。。。

当然学几千万把对于围棋庞大的状态空间来说并不是不可战胜的。AlphaGo 还是输给了李世石一把的。


增强学习与其他学习的区别

依据训练方式的不同,机器学习可以分为有监督学习,无监督学习,增强学习,半监督学习。这篇文章就是浅谈一下增强学习,对于其他的学习读者可以自行了解。

增强学习和有监督训练的差别就体现出来了,没有人告诉AI在某一确定棋局下,哪一手棋是好棋,哪一手棋是坏棋,是AI不断的探索出到底哪一手棋是好棋,哪一手棋是坏棋。

对于有监督学习,不断地告诉AI这是好棋这是好棋,它才知道这是好棋。你必须先告诉计算机这是猫,这也是猫,那也是猫。。最后她才知道这是猫,以后才能认识出别的猫。

Q学习算法

继续谈增强学习,我知道的有两大类,一种是蒙特卡罗学习,一种是时序差分学习。

依旧套用围棋的例子,简单来讲蒙特卡罗学习是下完一盘棋之后,批处理更新一次分值。

时序差分学习是每下一步棋,就更新一次分值。理论上讲,时序差分学习更好一些,时间性能比较好,学习的比较快。


我上一篇转载博文介绍的Q算法,是一个时序差分算法。

Q算法 更新状态动作值函数的公式为:

Q(s,a):=Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]   公式1

如果α 为1的话,那么公式可以改写为Q(state, action) = R(state, action) + γ* Max[Q(next state, all actions)]  公式2

公式1 中的s, a,s′  为公式2的state ,action,next state

接下来解释一下公式的各项的含义

Q(state,action)的含义为,在state下,做出action后,多次学习后统计出的累积收益,状态动作值函数。

在当前state 下,我们可以利用epsilon greed.选择一个action,对应于Q(state,action)的state和action。R(state,action)意思是在该state下做action立即得到的回报。

nextstate是指 state 下 做出 action后转换后的状态。 Max[Q(next state, all actions)]是指在nextstate下所有可行action中返回分数最高的分值。

这样通过不断的探索,Q(state,action)会逐渐的接近真实值。可以依据Q函数给出的提示选取行动。


下面的链接给出了Q-Learning-Algorithm的例子,有需要的读者可以下载代码自己玩一玩。

该示例代码,使用并扩展了上一篇的博文的例子 迷宫寻路例子

示例代码


参考链接:

http://burlap.cs.brown.edu/tutorials/cpl/p3.html#qlo   

http://mnemstudio.org/path-finding-q-learning-example-1.htm

https://studywolf.wordpress.com/2012/11/25/reinforcement-learning-q-learning-and-exploration/

https://en.wikipedia.org/wiki/Q-learning

转载请标明出处,谢谢


人工智能大作业-基于强化学习求解迷宫问题python实现源码+项目说明+实验报告+可执行文件 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 强化学习求解迷宫问题 核心代码 - maze.py: 迷宫类的实现,迷宫信息用一个二维数组表示,数组中的每个数代表一个方格,数字值代表方格类型(如0表示墙, 2表示陷阱, 3表示火)。 - train_qtable.py: Q表类的实现,Q表类有Q值的存储,决策的进行,Q表的学习等功能函数,进行预测和学习时会与迷宫(“环境”)进行交互,对其输入动作,得到反馈。 - train_network.py: 监督学习模型的学习,预测等实现。 - git.py: 监督学习用到的批量式学习仓库。 - maze_map.py: 存储6个事先定义好的迷宫 - draw.py: Q表的可视化以及完整走迷宫过程的呈现。 UI代码 - ui.py: 顶层窗口,有两个标签页 - ui_basic.py: “已有迷宫”标签页的实现,用户可以从我们定义好的几个迷宫中选择一个,进行训练并查看完整的走迷宫过程。 - ui_userDefine.py:“用户自定义”标签页的实现,用户可以输入任意大小的迷宫,自定义火焰周期,训练次数上限。之后进行训练,并以三种不同的速度查看完整的走迷宫结果。 - draw_ui.py: 在ui界面绘制Q表和走迷宫过程。 运行方法 - 打开“可执行文件/ui.exe” - 运行“代码/ui.py” - 运行“代码/train_qtable.py”,对maze_map中定义的迷宫进行训练,训练结束后显示Q表和完整走迷宫过程。 编译运行环境 python 3.6, pyqt 5.13.1, matplotlib 3.0.2, numpy 1.15.2, Pyinstaller 3.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值