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

如何训练一个智能吃豆人?

前几天笔者在挤地铁的时候,偶然看到一个小朋友在用麻麻的手机玩儿吃豆子的游戏,于是一大波关于童年的回忆不禁涌上心头。。。咳咳,回到正题,本篇文章笔者准备以吃豆子的游戏为例,为大家介绍一种能够训练出智能吃豆人的算法。

说到吃豆子的游戏,可能有些童鞋不太熟悉,它是一种类似走迷宫的游戏,玩家需要操控吃豆子的小人在游戏场景中吃豆子,同时要躲避怪物,游戏目标是吃更多的豆子。

想要训练出一个智能吃豆人,让它自己可以选择路线来吃到最多的豆子并且机智地躲避幽灵,并不是说说这么简单的。

首先,我们无法收集到足够数量的数据来支持模型的训练;其次,这并不是一个简单的二分类或者多分类问题,因此我们很难将一般的有监督学习算法和无监督学习算法运用到其中去。既没有足够的数据又没有合适的模型,难道我们只能就此放弃了么?毛爷爷说得好:“世上无难事,只要肯攀登。”带着勇往直前的信念,笔者虔诚地拜访了百老师(百度)和谷老师(谷歌),最终找到了能够用来“孵化出”智能吃豆人的神奇算法—强化学习算法。

强化学习,不同于有监督学习(已知数据和标签)和无监督学习(已知数据,标签未知),它是通过一个智能体(agent)与环境之间的不断交互来调整和改进自己的行为的一种算法。

通俗点说,强化学习是个可以让电脑自己玩游戏以此来获得大量数据,并基于这些数据来自我调整战略的一个算法。就像有监督学习和无监督学习在训练时需要输入训练集一样,在使用强化学习时,我们首先需要有一个能与智能体交互的环境,需要知道智能体的所有行为动作,以及在每种环境下智能体做出每种动作时得到的奖励或者惩罚。当然,上述的环境、行为动作和奖励/惩罚都是由人为设定并且可以更改的。在经过无数次自我学习和调整之后,智能体最终可以做到在每种环境之下选择能使结果最优的动作来完成游戏。这就是我们希望训练出来的智能吃豆人。

可以把强化学习的过程看作是一个马尔可夫链决策过程。游戏开始时,智能体处于一个初始的状态(即起点位置),它需要选择一个动作来改变当前的状态,在状态发生改变之后,系统会向智能体自动返回一个当前的分数和这一个动作带来的奖励/惩罚,而智能体会自动储存在上一个状态做出这一个动作到达这一个状态时所发生的分数变化和奖励/惩罚情况,以此类推,直到智能体到达终点为止。

接下来我们开始第二轮的游戏,同样的,在游戏开始时,智能体处于它的起点位置,这时它要开始参考它在上一轮游戏中的数据,如果上一轮游戏中在这一状态下采取的行动得到的分数较高,那么智能体将会遵循上一轮的走法,为了防止智能体陷入局部最优化,即在没有探索完全部路径的情况下认为当前的走法是最优的走法,我们会预先为它设定一个概率值(一般大于70%),在这一概率值之内,智能体选择它的最优动作,在这一概率值之外,它会随机选择一个动作来进行其它路线的探索。在进行每一轮新游戏时,智能体会自动与前几轮游戏中在同样状态下采取每个行动的得分进行比较,来决定本次的行动。由此往复多轮游戏直到我们可以确定它已经探索过所有路径之后,我们会发现,智能体在每轮游戏中选择的路线几乎是一致的,这样,一个机智的智能体就被训练好了。

在了解完强化学习的主要思路之后,我们来结合具体的例子了解如何使用直接效用估计方法(Direct utilityestimation)计算每一步的分数。在本例中,智能体的起点在(1,1)位置,我们希望通过强化学习让它能够以最少的步数到达(4,3)处,我们不希望它到达(4,2)的位置,(2,2)的位置为障碍物。那么如何开始对智能体的强化训练呢?通过上文我们知道:

首先应该给智能体一个可以交互的环境,本例中为下图的4*3的网格盘;

制定智能体的所有行动,即上下左右,如遇墙和障碍物则无法通过;

设定每种环境下智能体的每个行为动作的奖励/惩罚,本例设置每走一步的惩罚为0.04分,如果最终到达(4,3)那么增加一分,如果到达(4,2)那么减去一分。

假设某一轮游戏中智能体的路线如下:

(1,1)(起点位置) —> (1,2) —>(1,3) —> (1,2) —> (1,3) —> (2,3) —> (3,3) —> (4,3)(终点位置)

我们已经知道(4,3)位置的得分为1分,而每一步需要惩罚0.04分,那么起点位置的得分为终点位置的分数减去从始到终这一路所有的惩罚值,在这一轮游戏中起点位置的得分即为:

1-0.04✖️ 7=0.72

相似的,其它位置的得分为终点位置的得分减去从这个位置到终点位置这一路的惩罚值。那么细心的读者朋友一定会问,如果遇到相同的位置走两遍甚至多遍的情况应该怎么处理,答案是,取它们的平均值(本篇为使读者更易于理解其基本方法,设置直接效用估计法中的损益值为1)。在本次路线中:

(1,2) 的分数为:

(1,3)的分数为:

现在,知道了每一个状态下每个行为的得分,智能体就能自己判断在下一轮游戏中遇到这种状态应该怎么走了,一个机智的智能体马上就可以诞生啦!

不知道各位读者在读完本篇文章后是否已经清楚了强化学习的基本方法和思路,其实到现在为止,强化学习已经衍生出许许多多更高级更智能的版本,本篇文章只能算是为强化学习的学习起到一个最基本的铺垫作用,有兴趣的读者可以自行进行更深入的学习,也欢迎大家踊跃在下方留言和我们共同探讨和切磋关于强化学习的更多问题。

读完本篇文章以后你可以做什么:

1.俗话说得好:“春天到了,儿童节还会远吗?”首先,你可以手把手教会身边的小朋友训练一个会吃豆子的吃豆人,从小培养娃娃对于机器学习和人工智能的兴趣;

2.把强化学习的思想扩展延伸到更多有趣的小游戏上,训练出更多的智能“小人儿”。

本期介绍的是一种简单的被动学习,下一期咱们继续智能吃豆人与强化学习的主题,为大家介绍一种更为复杂的主动学习方法—— Q learning。

想了解更多数据挖掘的有趣实践,大家可以参考咱们团队的书《洞见数据价值》开始入门数据科学哦!

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券