各位乡民午安
我来分析一下到底AlphaGo的技术到底要怎么整合到目前的电脑AI
AlphaGO所使用的技术为卷积神经网络(以下简称CNN)并搭配蒙地卡罗搜寻树,
去模拟人类理解盘面的过程,并找出最佳的落子点
※我们先来介绍一下CNN
http://imgur.com/qtYoiW3
CNN可以透过区域的特征比对,去分析图像的边缘
其强大之处在于,可以透过多层神经网络的堆叠,去理解深层的概念
而这是传统Rule-based模型非常难做到的(详见上一篇)
http://imgur.com/aFC4Ywl
那么,什么叫做理解深层的概念呢?
举例来说,第一层的神经元会学到如何辨识边缘
第二层的神经元便可以根据第一层的结果,去组合不同的边缘特征,
而辨识出这是什么东西的轮廓(ex.人脸/汽车/大象/椅子)
那么,再堆叠下去到更深层,有什么用呢?
辨识出人脸后,再深一层可以辨识出男生、女生的脸部轮廓特征
再深下,甚至有办法推估年龄、表情等资讯
表情辨识:
http://imgur.com/GQMRDCz
年龄推算:
http://imgur.com/WgZQfKN
(我不太确定两个范例是不是用CNN做的,但应该87不离19)
※AlphaGo的技术
讲到这里,你可能会想,做图像辨识的技术,怎么会和围棋有关系呢?
首先,这是一张围棋棋盘:
http://imgur.com/20aJ2aj
共有19*19=361个落点,每个点会只会有三种状态:没有子、黑子、白子
于是乎,我们可以很轻易的把棋局的状态转成一张19*19的3色位图
把这张状态图丢到AlphaGo的卷积神经网络(CNN)中
经过大量的训练后,便可以分析出下一步的最佳落点
AlphaGo的分析是使用13层的神经网络,能够从区域局势理解到整个大局
而做出与围棋高手相同水准的预测
详见
https://www.bnext.com.tw/article/38923/BN-2016-03-14-120814-178
※CNN要怎么用在LOL上,以及用在LOL的限制
那么,要怎么将这样的技术应用到LOL的AI呢?
聪明的你,可能会想到:
我们可以用相同的手法将角色、小兵、塔、龙等物件用相同手法
将游戏的状态转换为一张位图丢进去分析
譬如这是上一篇提到Google DeepMind AI打星海,AI看到的样子
http://imgur.com/CwJT6dF
然而,考虑到分辨率问题,一场围棋是19*19*3(色)*361(步)的维度
那么,LOL的局面,究竟该用多少的维度来描述呢?
假设我们用200*100的图来描述一个玩家的画面(你的萤幕应该有1920*1080)
只区分英雄、小兵、塔、野怪、墙壁、草这6种物件
假设游戏时间30分钟,每0.2秒更新一次(人的反应速度~0.2秒)
那么你会需要200*100*6(种物件)*9000(每0.2秒一张图)的维度去描述一个玩家在一场游
戏中的行为
如要模拟五个玩家,那还得在乘上5倍!
这么大量的运算,办比赛跟人对打还可以。
但要实作在Server上,同时服务数万名玩家、却是非常的不切实际
经过简单的估算,CNN要做到模拟人在LOL上的细微操作,会耗费非常大量的资源
因此,从"模拟个人操作"及"Server效能"的角度来看,CNN不是一个好的模型
我认为强化传统的rule-based model才是正解
※大局观
话虽如此,但AlphaGo的CNN技术也并非无用武之地
中国棋圣聂卫平在AlphaGo与李世石对决后下了这么一个评论:
“AlphaGo的大局观远胜人类”
由此可知,CNN的强项在于大局观,也就局势评估。
那对LOL来说,有哪些行为是需要有大局观才做得好的呢?
会call龙的打野
预测对方眼位gank的打野
会插眼&会扫眼的sup
草丛蹲人
依照局势带线推塔、主动开战的CARRY
这些都是现在AI没有,但CNN能够做得很好的特性
那么CNN最麻烦的分辨率问题呢?
看大局可以观察小地图就好,粗估缩到64*64的分辨率
都还能够分辨小地图上塔、英雄、小兵位置的关系
时间上,我们也不需要去模拟人类反射速度,大概2秒算一次就可以了
64*64*6(种物件)*900(每2秒一张图)
这样的规模放上服务器运算,我认为现在是可以做到的
那Riot有没有在做呢?我认为是有的
请见今年愚人节新闻:
https://lol.garena.tw/news/3520
文中提到"于是我们开始着手建立一套类似于卷积神经网络的深度学习系统。"
虽然这整篇通篇唬烂,但我认为他们是有打算引入CNN来强化AI
结论:
要用CNN模拟玩家操作,运算量会很大,不适合建在给大量玩家用的server上
用CNN可以做出较好的打野AI
CNN擅长分析大局,可以补足目前AI缺乏大局观的问题
用CNN分析大局+目前方法处理个人操作=上面两点
Riot应该有在做
以上是小弟我的浅见