2013年 伦敦的deepmind 发了一篇workshop paper:
Playing Atari with Deep Reinforcement Learning
当时真是“天空一声巨响老子闪亮登场”,看完这篇paper和同事都惊呆了,虽然思路上并没有特别奇特的点,但是就这么一个理论上应该可以实现,真正实现的时候,大家还是在感叹, 这样这样也行.
2014年 deepmind 被google收购了,有人说$400+m, 有人说$600+m. 在这个钱比什么都便宜的时代,这个价钱也没什么稀奇。近几年的cs research里面,英国一直在主流之外,但现在 deepmind 以完全不同于主流进化路线的方式野蛮生长着。(想起大洋洲上独立的进化)。包括之后出的neural turing machine,让人觉得他们所在进行的项目或许是超越这个时代的,或者才是正确的方向。
回到游戏ai,有人说dota风靡全球不可缺少的因素就是因为有ai地图。不知道这是不是真相,但我现在还记得大学宿舍里12点断电后,黑暗里摸着键盘在ai地图里练补刀。
无论是warcraft还是starcraft,游戏的核心其实就是伤害判定和范围判定,因为范围判定,才衍生了走位的问题。ai 的关键就是决定什么时候追逐什么时候逃跑,什么时候触发攻击,触发什么样的攻击。传统的 ai 一般是有限状态机,根据玩家出的兵种,生产对应的兵种;根据对方兵力的强弱,决定是打架还是逃跑;dota里面根据自己的血量,离塔的远近,决定追敌人还是跑回家。就是因为这个实现,所以经常有半血ai追残血英雄到塔下却半路跑回家,要是人类玩家估计就咬咬牙上了。
但是像dota这样动辄接近100个英雄,写起这种状态机,应该会是一个噩梦。看了眼 google code 上开源的 dota ai, 不知道这个是不是网上流传的 ai 地图。觉得他们尝试的artificial neural network 的思路,才是应该努力的方向。deepmind 的reinforcement learning就是在这个方向上更近了一步。当然deepmind所实现的ai离即时战略ai的距离还很遥远,论文针对的是好多年前的atari 游戏,是黑白机时代的游戏,小蜜蜂,潜艇等。
相比于现有游戏的各种ai,这篇 paper 才是第一个真正意义上的游戏ai。这篇paper让一个ai不停地通过 reinforcement learning 自我学习,直接以屏幕上的像素作为ai的输入,通过游戏里积分的反馈来教育ai,最后让ai学会玩这个游戏。玩游戏的过程和人类玩家是一致的,整个游戏对于ai来讲是一个黑盒子。ai和人类一样,只能看到屏幕上的内容,直接把屏幕上的像素传给ai。
dota2的ai,其实是人工定义各种状态的,多少血,追逐还是逃跑,都是手动定义的。而deep mind的这篇paper是自动学习的,ai甚至连哪个操作是向左,哪个操作是向右都不知道。ai的学习完全依赖于每一次操作之后,屏幕上发生的变化。
这篇paper最后达到的结果是,这个ai测试了 7个 atari 游戏,在其中的6个超过了以前的ai performance,而且在其中三个游戏的测试中超过了人类专业玩家的水平。其中和人类玩家的比较,是让专业玩家连续玩2小时,取平均成绩。
deep mind reinforcement learning demo
视频里有刚开始的运行结果,训练一小时以后的结果,最终的运行结果。
另外之所以讲这是真正意义的游戏ai,是因为这篇paper用一个model处理了所有7个游戏,并不是传统地为每一个游戏做一个单独的model.
这篇文章的成功同时也说明了一个人类水平的ai有多困难。atari 游戏的操作都非常简单,只有上下左右 以及一个额外的触发键,任何一个即时战略游戏都不会这么简单。但是如果不讨论这种广义上的ai,其实狭义上的游戏机器人并没有那么难。Mario AI Championship 2012 以前有一个mario ai championship比赛,youtube上有很多render比赛结果的视频。人力搬运了几个回来。
还有一个跟着鼠标跑的,操作更加浮夸。
Infinite Mario AI- Mario follows Mouse
这个比赛里,一开始大家也是用特别fancy的Bayesian去做,做到后来有人发现因为可以直接接触到mario内部的状态,所以 a* path search 也能跑得很好,然后Bayesian也做不过 a* , 每年的冠军好像都是通过 a* path search 实现的. 一旦这个 ai problem 不valid了,主办的人也放弃了这个比赛。
还有berkeley的overmind项目,Berkeley Overmind 是星际的ai,作者好像是星际高玩,认为虫族飞龙是这里面最实惠地兵种,单纯暴飞龙,1024线甩飞龙,然后一路过关斩将最后夺冠。隐约记得之后还有一篇文章介绍关于甩飞龙的微操作是怎么实现的,好像是用了一个特别诡异的数学模型。
结尾想起robotics里的一个小故事,做机器人的教授特别羡慕小狗的捡球能力,就想做一个能捡球的机器人,觉得不和人比 和狗比还是有信心的。于是开发了各种抛物线模型,牛逼空气动力,研究抛球的姿势,最后。。。。。还是捡不过小狗。小狗捡球完全不用这些高大上的数学,只要保持45度仰望球,球就会自然而然的进入嘴里。度数小于45度了,就跑远一些,度数大了,就跑近一些。
万一奥特曼打不赢小怪兽
那就扶他逃回到小小星球
有阳光 有鲜花 什么都有
也不缺女粉丝温柔包扎伤口
不久后神功练就 小怪兽捏在指缝
reference: