大家好,我是 Jack。
用 AI 算法玩游戏,打破人类玩家的记录,是一种什么体验?
DreamerV2 agent(智能体)可以在 Atari(雅达利)的 55 款经典游戏中挑战人类玩家。
其中不乏我们熟悉的打砖块、蒙特祖玛的复仇、小蜜蜂等经典游戏。
可能有些朋友不知道 Atari,这里简单介绍一下。
1976 年,Atari 公司在美国推出了 Atari 2600 游戏机,这是史上第一部真正意义上的家用游戏主机系统。
80 后、90 后非常熟悉的 FC 红白机(超级马里奥、魂斗罗、松鼠大作战、坦克等等)则是十几年之后的事情了。
正是这样的一台主机创立了现在上千亿美元的家用游戏机产业。
今天要说的主角 DreamerV2 就是在这样一系列具有纪念意义的游戏中的 agent (智能体),Google 的最新力作。
在没有人为的干预下,DreamerV2 agent 可以学习自己打游戏,并且比肩人类,甚至超越。
这样一个看似高大上的算法,咱们现在都能玩!
DreamerV2 刚刚开源,并且只需要一个 GPU 就能跑!
本文,就先带大家简单学习一下 DreamerV2 的原理,以及如何让这个算法打游戏!
强化学习
强化学习是机器学习的一个领域。
这就像训练宠物一样。当宠物做出了指定动作之后,我们给它一些食物作为奖励,使它更加坚信只要做出那个动作就会得到奖励。
这种训练叫 Reinforcement Learning(强化学习,简称 RL )。
DreamerV2 就是一种 RL 算法,举个简单的例子,说明下工作原理。
上图的网络,最左边是输入,右边是输出。游戏屏幕的图像是输入数据,经过卷积层和全链接层,最后映射到游戏手柄所有可能的动作。
强调如何基于环境而行动,以取得最大化的预期利益。
其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。
在强化学习的世界里,我们的算法被称为 Agent,它与环境发生交互。
Agent 从环境中获取状态(state),并决定自己要做出的动作(action)。
环境会根据其自身的逻辑给 Agent 予以奖励(reward)。这个奖励有正向和反向之分。
比如,动物生活在大自然中,吃到食物即是一个正向的奖励,而挨饿甚至失去生命就是反向的奖励。
动物们靠着自己的本能趋利避害,增大自己得到正向奖励的机会。
如果反过来说,就是避免得到反向的奖励,而挨饿什么的最终会导致死亡。
所以动物生存的唯一目的其实就是避免死亡。
再举个感同身受的例子。
小时候不写作业就挨揍,这就是反向的奖励。
在电子游戏世界(特指Atari 2600这一类的简单游戏。不包括推理解密类的游戏)中:
- 环境指的是游戏本身,包括其内部的各种逻辑;
- Agent指的是操作游戏的玩家,当然也可以是指操作游戏的AI算法;
- 状态就是指游戏在屏幕上展现的画面。游戏通过屏幕画面把状态信息传达给Agent。如果是棋类游戏,状态是离散的,状态的数量是有限的。但在动作类游戏(如打飞机)中,状态是画面中的每个物体(飞机,敌人,子弹等等)所处的位置和运动速度的组合。状态是连续的,而且数量几乎是无限的。
- 动作是指手柄的按键组合,包括方向键和按钮的组合,当然也包括什么都不按(不做任何动作)。
- 奖励是指游戏的得分,每击中一个敌人都可以得到一些得分的奖励。
- 策略是Agent脑子里从状态到动作的映射。也就是说,每当 Agent 看到一个游戏画面(状态),就应该知道该如何操纵手柄(动作)。RL 算法的任务就是找到最佳的策略。
DreamerV2 是一种理解环境的强化学习算法,我们称为 Model-Based RL。
DreamerV2 只需要输入游戏的图像画面,即可学习。它建立在循环状态空间模型(RSSM)的基础上,在训练过程中,编码器会对图像进行随机表示,并整合到世界模型的循环状态中。
由于画面表示是随机的,Agent 需要提取有效信息再进行预测,这样可以让 Agent 对未见过的画面更具鲁棒性。
DreamerV2 的详细论文解读,可以看这个视频:
跑起来
DreamerV2 项目地址:
https://github.com/danijar/dr...
算法需要使用 Tensorflow 2,版本为 2.3.1,用的游戏环境是 OpenAI 的 Gym。
这是一个支持 Python 语言的游戏环境库,一款用于研发和比较强化学习算法的工具包,它支持训练 Agent 做任何事情,从行走到玩游戏。
直接安装需要的第三方库。
pip install --user tensorflow==2.3.1
pip install --user tensorflow_probability==0.11.1
pip install --user pandas
pip install --user matplotlib
pip install --user ruamel.yaml
pip install --user 'gym[atari]'
配置好后,就可以开始训练我们自己的 Agent 了。
python dreamer.py --logdir ./logdir/atari_pong/dreamerv2/1 \
--configs defaults atari --task atari_pong
使用 Tensorboard 监控训练情况。
tensorboard --logdir ./logdir
动手训练一个自己的 Agent 吧!
福利时间
今天元宵节,过了元宵节,这个春节也就算真正结束了。
Jack 祝大家:
日圆,月圆,圆圆如意。
官源、财源,源源不断。
人缘、福缘,缘缘于手。
情愿、心愿,愿愿成真!
元宵节快乐!
作者:Jack Cui
原文:https://mp.weixin.qq.com/s/Hu...
关注作者公众号,获取更多有趣AI应用~
系列篇
更多AIoT领域有趣的算法应用及产品请关注有趣的AIoT应用专栏。