随着AlphaGo和围棋第一人柯洁的对战,强化学习又将迎来一波热潮。
强化学习到底是怎么让机器能够玩游戏的,这个问题很久之前就困扰着我。
(如果需要从数理上了解强化学习,请阅读参考资料,或者在网络上检索“强化学习”,本文只是一般科普文章,本文认为你多少知道什么是卷积神经网络,并且有初步的机器学习知识)
机器玩游戏,需要克服哪些问题呢?
机器如何知道游戏规则
其实,按照现在的科技水平,人类还是无法开发一个泛用的人工智能,去胜任所有的游戏,游戏规则是人类告诉机器的。但是,这里的告诉,并非告诉机器所有的事情,具体告诉机器的事情如下:
在当前的状态下,如果你选择了某种动作,游戏给予如何的评价(正面的,负面的,或者中立的,并且是量化的)。
例如 Flappy Bird 中,在某个状态下,如果你让小鸟往上飞行之后,小鸟是通过一个水管了(正面),还是撞到水管了(负面),或者是没有发生任何事情(中立)
当然,一般的游戏,都有一个表示分数的区域,有时候程序会告诉AI表示分数的区域在哪里,然后程序能够自己读取分数,知道在选择某个动作之后评价如何。
当前状态怎么表示
一般的视频游戏,如何让AI知道当前状态,归根到底就是让AI能够读图,懂得画面表示的意义。
AI看到的只是游戏画面,就是像素,AI无法知道游戏的逻辑,目标到底是什么的!
例如Flappy Bird 的游戏,AI是无法知道我们是想让小鸟尽量穿过水管的。
就如图像识别AI一样,她能识别出图像中是否有猫,但是,她并不知道猫到底是什么。(很有趣的悖论)
一般的游戏视频画面,最简单的1帧也要80x80的大小,考虑到彩色的游戏,即使转化为灰度,也有256种。
80 x 80 x 256 =1638400种游戏状态,这个如论如何也是不能接受的。这里的话,还是祭出了图像处理的大杀器,卷积神经网络,通过卷积的各种技巧,将状态数控制在一个很小的,可接受的数值内。
原理介绍
强化学习的一个最简单的原理就是告诉机器,你在某个状态下,选择了某种动作,会得到何种反馈。并且使得你进入另一种什么样的状态。通过不断的训练,就是要让机器能够获得最大的正面的反馈。
什么场景适合AI
在AI疯狂的训练下,小鸟已经可以非常优雅的在水管之间穿梭自如了。
其实,FlappyBird这个游戏,如果使用普通的程序来写的话,代码量其实不多(除去图像识别的代码,强化学习是用CNN卷积做的,两种思想没有可比性),也无需任何学习,理论上说,如果代码没有Bug的话,小鸟是可以永远一直飞下去的。
当然,FlappyBird只是一个例子来描述强化学习的方法,也是一个合格的好的例子,够简单,能说明问题。
有句话说得好,如果人类在一秒钟之内可以完成的任务,则该任务是适合AI来做的。
但是,有些任务,如果用传统的编程来做的话,可能也能做得很好,而且避免了黑箱,难以调试,结果不稳定的缺陷。
由于学习了ML,有时候,看到什么问题都考虑用ML的方法来解决,有了锤子什么都是钉子了。
水果的分类
Tensorflow来做的话,无非是给机器喂很多数据,高等,中等,低等,然后在使用softmax进行分类罢了。这样做的效果肯定也非常好,模型会给你拟合出来一个标准。但是,如果用传统程序来做的话,也是可以的,只是这个标准你需要事先确定罢了。所以说,ML在没有明确标准的时候,或者结果受到很多因素制约,同时还要考虑到概率分布的时候,则是非常适合的。
简历过滤
HR对于海量简历,是不是能够通过机器学习进行面试候选人的过滤呢?
如果投简历的人的特征和录取概率可以有一个模型的话,理论上是可以的。收集很多简历,很多录取信息,建立一个模型也是可以的。但是现在也没有看到这样的模型被开发出来,其中理由不是技术可以说明的。
(HR在过滤简历的时候,只是简单的过滤一下是否符合职位要求罢了。)