手把手教你训练AI打游戏!强化学习新手指南

手把手教你训练AI打游戏!强化学习新手指南

首页休闲益智少年围棋ai无广告更新时间:2024-06-16

近些年来人工智能的热度与日俱增,5G AI IoT几乎成为了人们对于未来的定义。Deepmind开发的AlphaGo围棋AI,在2016年先后击败了李世乭和柯洁,扯下了人类智慧的最后一块遮羞布。被誉为强化学习之父的Rich Sutton老先生,也在2017年作为一名研究科学家加入了Google Deepmind。

University of Alberta, Edmonton, Canada

Richard S. Sutton, Univerisyt of Alberta, 2015

本人有幸上过的Rich Sutton老先生的课,对于强化学习了解一点皮毛。这里我们就简单介绍一下强化学习的基本知识,并利用深度强化学习(神经网络 Q-Learning)来训练一个简单的游戏AI。

在本文中,我们会设计一个AI agent(虚拟玩家),并从头开始训练它学习小游戏贪吃蛇的玩法。我们会利用Keras和Tensorflow来实现一个深度强化学习算法。强化学习算法的核心就是虚拟玩家(agent)根据自身的状态(State)做出动作(action),并且得到反馈(reward),并利用反馈来改进今后的策略(policy)。agent并不知道任何游戏规则,我们的目的是让这个系统自己不断训练,在学习中提高游戏得分,并最终形成一个可行的游戏策略。

我们会看到Deep Q-Learning算法是怎么一步步学习游戏的规则,从一开始的无所适从,随处乱走,到仅仅5分钟后就学习出了可行的策略并且在游戏中轻松获得50分以上。

左图:刚开始训练;有图:训练后。图片来源:Mauro Comi

一、游戏环境搭建

我们利用python和Pygame简单搭建了基础的游戏环境,这样我们就可以直观地观察agent的训练过程了。从上图中我们可以很清楚地看到,刚开始的时候,agent没有任何策略,只能盲目地随机走动。而在训练后,agent的策略已经十分理想了。

二、马尔可夫决策过程(MDP)

MDP是一个用于给策略制定建模的数学框架,常被用来研究最优化问题。强化学习利用MDP来做出决策,而不是像传统的监督学习一样依赖输入(input)和对应的正确答案(target)来训练。

在强化学习中,有两个主要的部分:环境(environment)和虚拟玩家(agent)。每当agent做出动作(action),环境就会依据agent当前所处的状态(state)来给出反馈(reward)。在贪吃蛇游戏中,如果我们假设吃到果实的reward为1,而因为撞墙或者撞到蛇的身体而game over的reward为-1的话。那么我们就可以说,从果实旁边(state)前进一步(action)的反馈(reward)是1。类似的,在墙边(state),向墙前进一步(action)的反馈(reward)就是-1。

agent的目标就是学习在给定的state(包括蛇的位置,果实的位置等等游戏环境)下,什么样的action可以最大化reward。

agent用于做出决策的策略就是policy,我们可以把想象成state到action的映射,指导了agent在给定state下应该做出哪个action。例如在贪吃蛇游戏中,state就是所有可能游戏状态的集合(蛇的位置,果实的位置,地图的大小,蛇的长度等等),而action就是蛇的所有可能动作集合(向上,向下,向左,向右)。

下图为一个MDP的简单例子,由三个state,两个action,两个reward组成的马尔可夫决策过程(MDP):

由三个state,两个action,两个reward组成的马尔可夫决策过程(MDP),图片来自Wikipedia

二、Q-learning算法

Q-table是一个state和可能action的关联矩阵,矩阵中的数值就是在训练过程中根据reward算出该action的预期reward,代表了该action的成功率。利用Q-table,我们可以找出agent的最佳策略(policy)。

很明显,Q-table只能处理有限个state,如果state的数量十分巨大的话我们很可能会遇到问题。这个时候就需要利用深度神经网络了。

每当系统给出了reward,我们可以通过公式(Bellman equation)来更新Q-value:

Bellman equation

Q-learing部分的算法核心大致如下:

三、深度神经网络(Deep Neural Network)

State: 代表了agent观察到了环境的状态,我们也将state用于神经网络的输入。具体而言,state是包含了11个布尔变量的array。

Loss:深度神经网络利用损失函数(loss function)来减少衡量真实结果和预测值的差距。神经网络的目标是最小化lost。这我们这个例子自,损失函数是:

Deep Neural Network:

我们使用的深度神经网络有3个中间层(hidden layer)和120个神经元(neuron)。这个神经网络使用state作为输入,返回3个值,分别对应向左,向右,直走这三个动作。最后一层使用了Softmax函数。

Deep Neural Network by Mauro Comi

四、训练结果

在训练了短短5分钟,在150轮游戏之后,agent已经从毫无策略的乱走,到摸索出了一套有效的策略,并且能够获得50分以上的游戏成绩了!

如图,横坐标为游戏轮数,纵坐标为游戏得分。可以看出,在前50轮,得分很低,agent主要在探索环境。而在后50轮,agent不再执行随机探索策略,而是利用已经学习到的policy做出动作,所以得到了较高的得分。

五、总结

到这里,我们就已经学习了强化学习的基本知识,并且了解了Deep Q-learing算法的基本原理,还通过贪吃蛇这个小游戏检验了DQN算法的效果。

大家觉得短短5分钟的训练效果怎么样呢?感兴趣的朋友可以查看源码验证一下,甚至可以改进算法提升一下训练效果~

reference:

https://towardsdatascience.com/how-to-teach-an-ai-to-play-games-deep-reinforcement-learning-28f9b920440a

https://github.com/maurock/snake-ga


我是零度橙子,科技达人,谷歌认证云计算架构师,AWS认证devops专家,欢迎大家关注我,了解有用有趣的科技知识~

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved