AlphaGo 是如何把 CNN 接到搜索的?

2023-10-07 17:40
文章标签 搜索 cnn 接到 alphago

本文主要是介绍AlphaGo 是如何把 CNN 接到搜索的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:AlgorithmDog

 现在最热的话题莫过于李世石和 AlphaGo 的围棋大战。虽然我也想蹭下这个热点,但我不懂深度学习,不懂强化学习,更不懂围棋的。因此认真看 AlphaGo 的论文和田渊栋大牛的知乎文章,写一些简明笔记分享给大家。希望没有什么基础的童鞋也能看懂。

      对于这个大热点,新闻媒体自然有自己的解读和分析,比如人工智能多么牛逼,人工智能会/不会威胁人类和深度学习多么牛逼之类的。不过我们更关心技术层面的东西。如果你了解机器学习,知道些 CNN 和搜索,你可能会关心 AlphaGo 是如何把 CNN 接到搜索上的。

alphago


AlphaGo 的工作原理

      介绍 AlphaGo,就必须说下 AlphaGo 的四个系统组成:

1. 策略网络
CNN模型。输入当前局面,输出19*19个概率值(棋盘是19*19的方格),对应下一步落子位置的概率。

2. 快速走子
线性模型。目标和策略网络一致。相比策略网络,速度快1000倍但精度低。

3. 价值网络
CNN模型。输入当前局面,输出获胜的概率。

4. 蒙特卡罗树搜索(Monte Carlo Tree Search, MCTS)
把以上三个部分连起来,形成一个完整的系统。

      如何把策略网络,估值网络和快速走子三者接到 MCTS 上?博客标题有点标题党了,搜索上接到的可不止是 CNN。首先我们介绍下 MCTS 的递归树状结构,如下所示。

                                    monte carlo tree mcts a tree

树中每一个节点 s 代表了一个围棋盘面,并带有两个数字。一个是访问次数N(s),另一个质量度Q(s)。访问次数 N(s)表示在搜索中节点被访问的次数。面对一个盘面,MCTS 会进行重复搜索,所以一个节点可能会被反复访问,这个下面细说。质量度Q(s)表示这个节点下 AlphaGo 的优势程度,其计算公式如下所示。

Q(s)={1siSonSonN(si)siSonSonN(si)Q(si)(1λ)vθ(sL)+λzLsLeafLeafsLeafLeaf

这个公式的意思是:1)对于非叶子节点,质量度等于该节点所有树中已有子节点的质量度均值。2)对于叶子节点,质量度跟价值网络估计的获胜概率 vθ(sL) 有关,还跟快速走子模拟后续比赛得到的胜负结果 zL 有关。叶子节点的质量度等于这两者的加权混合,其中混合参数 λ 介于0和1之间。

      有了 MCTS 的结构,我们就可以继续介绍 MCTS 怎么做搜索的。当李世石落了一子,AlphaGo 迅速读入当前盘面,将之当作搜索的根节点,展开搜索。MCTS 搜索的流程如下图所示,一共分为四个步骤:

monte carlo tree search MCTS

1. 选择
从根节点 R 开始,递归选择某个子节点直到达到叶子节点 L。当在一个节点s,我们怎么选择子节点  s  呢?我们选择子节点不应该乱选,而是应该选择那些优质的子节点。AlphaGo 中的选择子节点的方式如下所示。

su(si)=argmaxsi(Q(si)+u(si))P(si|s)1+N(si)

其中 P(si|s) 是策略网络的输出。一个有意思的点在于一个节点被访问次数越多,选择它作为子节点的可能性越小,这是为了搜索多样性考虑。

2. 扩展
如果 L 节点上围棋对弈没有结束,那么可能创建一个节点 C。

3. 模拟
用价值网络和快速走子计算节点 C 的质量度。

4. 反向传播
根据 C 的质量度,更新它爸爸爷爷祖先的质量度。

      上述搜索步骤反复进行,直到达到某个终止条件。搜索结束后,MCTS 选择根节点的质量度最高的子节点作为 AlphaGo 的着法。从上面描述来看,策略网络、快速走子和价值网络主要用于减少搜索宽度和减少搜索深度两个方面。策略网络用于使得搜索朝着几个恰当的候选集中,从而减少了搜索宽度。价值网络和快速走子用在评估叶子节点质量度上,使得搜索就不用继续往下搜索,从而减少了搜索的深度。


策略网络,快速走子和估值网络的训练

      AlphaGo 将策略网络,估值网络和快速走子三者在蒙特卡罗搜索树框架下构成的一个系统。这三者的效果和效率就很关键。那么 DeepMind 是怎么训练这三者呢?

      1.策略网络的训练

      策略网络就是一个深层的 CNN 模型。策略网络输入是棋局,输出是19*19个概率值(棋盘是19*19的方格),对应下一步落子位置的概率。其实 AlphaGo 一共训练了两个策略网络:有监督学习策略网络 (Supervised Learning network, SL network) 和强化学习策略网络 (Reinforcement Learning network, RL network)。SL network 用的人类棋谱做训练数据。田渊栋的知乎文章评论有 SL network,“这种做法一点也没有做搜索,但是大局观非常强,不会陷入局部战斗中,说它建模了‘棋感’一点也没有错”,“当然,只用走棋网络问题也很多,就我们在DarkForest上看到的来说,会不顾大小无谓争劫,会无谓脱先,不顾局部死活,对杀出错,等等。有点像高手不经认真思考的随手棋”。

      训练好 SL network 之后,然后使用强化学习进行自我对局进一步更新参数,从而得到 RL network 。RL network 是 SL network 的加强,能力得到了很大提高。据论文报告的结果,RL network 对 SL network 的胜率达到了 80%。不过 AlphaGo 搜索使用的是 SL network, 理由是 SL network 着法比较多样。

      2.快速走子的训练

      论文里说局部特征匹配(local pattern matching)加逻辑回归(logistic
regression)的方法。局部特征匹配就是一些匹配局部形势的特征,比如周围有多少个敌方棋子,有多少个我方棋子。训练数据是人类棋谱。但论文没有太看重这一块。

      3.价值网络的训练

      价值网络也是一个深层的 CNN 模型,输入棋局,输出获胜的概率。价值网络的训练有意思的是训练数据的选择。从人类棋谱里,我们能整理出棋局-胜负对应关系。但如果用人类棋谱,数据量好像不是很够,训练直接过拟合了。论文中报告的结果,如果用人类棋谱,价值网络的训练误差为0.19而测试误差达到了0.37。因此作者们用的是 RL network 自我对弈的3000万棋局作为训练数据,价值网络的训练误差为0.226而测试误差达到了0.234。

      AlphaGo 各个模块的训练流程可以用论文中的一张图表示。

      alphago training


再说点啥

      田渊栋的文章总结说到:“总的来说,这整篇文章是一个系统性的工作,而不是一两个小点有了突破就能达到的胜利。在成功背后,是作者们,特别是两位第一作者 David Silver 和 Aja Huang,在博士阶段及毕业以后五年以上的积累,非一朝一夕所能完成的。他们能做出 AlphaGo 并享有现在的荣誉,是实至名归的”。向大牛们致敬!

      另外,祈祷崔永元不要谈人工智能。


这篇关于AlphaGo 是如何把 CNN 接到搜索的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159359

相关文章

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

记忆化搜索【下】

375. 猜数字大小II 题目分析 题目链接:375. 猜数字大小 II - 力扣(LeetCode) 题目比较长,大致意思就是给一个数,比如说10,定的数字是7,让我们在[1, 10]这个区间猜。 如果猜大或猜小都会说明是大了还是小了,此外,我们还需要支付猜错数字对应的现金。 现在就是让我们定制一个猜测策略,确保准备最少的钱能猜对 如果采用二分查找,只能确保最小次数,题目要求的