大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
前言
这篇文章就是浅谈一下机器学习领域下的增强学习。为什么博文的题目为浅谈,因为笔者对机器学习的认知比较浅。
我在最后会分享一个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+γmaxa′Q(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
转载请标明出处,谢谢
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215922.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...