浅谈增强学习

来源:互联网 发布:vb和c语言区别,详细点 编辑:程序博客网 时间:2024/06/10 15:14

前言

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

我在最后会分享一个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

转载请标明出处,谢谢


0 0