去年今日,AlphaGo 一举击败围棋世界冠军、韩国九段棋手李世乭,开创了人工智能的新纪元。一时间,人工智能成为贯穿全年的热门话题。
值此围棋人机大战一周年之际,我们特别邀请到卡耐基梅隆大学博士、北京大数医达科技有限公司 CEO—邓侃,为大家带来对 DeepMind 公司创始人 Demis Hassabis,以及大腕儿 Oriol Vinyals 的最新论文的读后感。
一周前,2017年3月6日,Google 旗下的 DeepMind 公司,发表了一篇题为《神经情景控制 Neural Episodic Control》的论文。
DeepMind 公司很出名,不仅因为 AlphaGo 是它的产品,而且因为 DeepMind 的员工发表了很多深度学习的论文,数量多,水平高。
《神经情景控制》很抢眼,因为作者中不仅有深度学习的大腕 Oriol Vinyals,而且还有 DeepMind 公司创始人 Demis Hassabis。
这篇论文的主题,是如何大幅度提高深度强化学习的计算效率。
提高计算效率是很重要的课题。譬如迎战李世乭时,AlphaGo 动用了 1920 颗 CPU、280 颗 GPU。如果能够大规模提高计算效率,那么就不需要动用如此暴力的硬件。
如何大规模提高计算效率?《神经情景控制》的思路并不新鲜,以占用庞大的硬盘空间为代价,来节省 CPU 运算时间。
—01—
以围棋为例,先定义两个概念
1.棋面 (State):
围棋棋盘上,总共有 19 x 19 =361 个落子位置。譬如目前已经下了 100 手,那么棋面上黑子和白子各有 50 粒,这些黑子和白子分别占据的位置,就是一种棋面。
据专家估计,棋面的数量,大约是 250 的 150 次方,250^150。
2. 赢面 (Action Value):
赢面是指当前棋局下,黑子(或白子)占据的优势。
开局或者中盘的赢面(优势)不太容易计算,因为只有到了终局以后,才能知道输赢几目。
但是终局前一步的赢面很容易计算,因为对手多半会把棋子落在最佳位置上。所谓最佳位置,就是赢的目数最大,或者输的目数最少的位置。
不过,也许对手一时糊涂,会出臭棋。所以,终局前一步的赢面,应该是终局时的输赢目数,乘以一个不确定系数。
终局前两步的赢面也很容易计算,因为自己也一定会把棋子落在最佳位置上,逼迫对方输的目数最多,或者赢的目数最小。
不过,也不能保证自己永远保持清醒。是人都会犯糊涂。所以,终局前两步的赢面,应该是终局时的输赢目数,先乘以对方的不确定系数,再乘以自己的不确定系数。为了方便计算,假设对方和自己,犯糊涂的概率都一样,那么终局前两步的赢面,等于终局时的输赢目数,乘以不确定系数的平方。
依次循环,从终局一路回溯到中盘,再一路回溯到开局,就可以估算所有棋面下的赢面了。
—02—
快速查找棋面的索引
理解了赢面的计算方法以后,就容易理解《神经情景控制》论文中提出的新方法了。
1.棋面-赢面查询表:
用一路回溯的办法,可以计算每一种棋面的赢面。但是一路回溯的计算量很大,不如预先设置361 个表,每个表对应一个落子位置。
每个表有若干行,每行有两列,第一列是棋面,第二列是赢面。
预先训练 AlphaGo 时,对于 361 种落子的位置,分别计算在各个棋面下,对应的赢面。
训练结束后,就可以找人对弈了。
面对某一个特定棋面时,AlphaGo 该落子在哪一个位置呢?只需要在 361 个表中,分别找到对应的棋面所在的行,取出相应的赢面的值。
这样总共获得 361 个落子位置的 361 个赢面的值。取其中赢面最大的那一个落子位置即可。
2.快速索引:
每一个表有多少行呢?从开局到终局,差不多有 250^150 种棋面,所以每个表差不多有 250^150 行。
如果一行一行地查找当前的棋面,计算量仍然非常大。
提高查找速度,办法有两个。
一个是建索引。通过索引,找到相似的棋面,然后再仔细查找确切的棋面。
另一个是近似。没必要严格查找每一种棋面下的确切赢面,不妨把相似棋面的赢面,取个均值。
《神经情景控制》这篇论文,用的是近似的办法。
不妨把棋面看成一张图片,用卷积神经网络(CNN)提取层层抽象棋面特征。CNN 的输出,是棋面特征的编码。
棋面特征的编码是一个数字向量,数字本身没有明确意义,但是相似棋局的数字向量很邻近。
在这篇论文的实验中,特征编码的数量是 5 * 10^5,远远小于 250^150。换而言之,250^150 种棋面,被 CNN 聚类成 5 * 10^5 种相似棋面。
3. 学习:
棋面与图片不同。轻微改变图片中的像素,图片的大致模样不会发生太大变化。但是轻微改变棋面中的黑白子的分布,赢面却大不相同。
所以,CNN 必须非常敏锐地识别棋面中的细微特征。
如何让 CNN 变得更敏锐?
在训练过程中,用一路回溯的办法,精算每个棋面的赢面。然后对比精算出来的赢面,与查询表中的近似赢面,两者之间的误差。
误差是错误的近似导致的,错误的近似是错误的 CNN 参数导致的。
逐步调整 CNN 参数,减少精算与近似之间的误差,从而让 CNN 学会更敏锐地识别棋面中的细微特征。
来源:paperweekly