Deep Learning学习笔记(5)——AlphaGo
读《神经网络与深度学习》一书,随笔。
1 IBM深蓝下象棋
深蓝打败卡斯帕罗夫用的是蛮力和一些启发式算法。其原理是:用评估函数评估当前棋盘的局势 + 在大量可能局势中挑最有利的。评估函数采用了8000多个因素来计算,需要非常专业的国际象棋知识。用博弈树搜索后面的6步,然后用评估函数在第6层上评估节点的质量,用评估函数的值替换了这个节点下的所有子树的概述,用极大极小算法找到下一步动作。
围棋难在:
(1)落子点太多,使得博弈树搜索到足够深度更困难;
(2)评估函数太难设计。
2 AlphaGo下围棋
AlphaGo的主要原理包括三个重要部分:
(1)估值网络(Value Network,也叫价值网络):用于估计棋局的局势,在当前棋局状态下,每个落子位置导致整个棋局“最后”的胜率。相当于深蓝的评估函数,不同点是自己学习的而不是领域专家精心设计出来的,并且估计的是最终胜率而不是短期的攻城略地。
(2)走棋策略网络(Policy Network):在某一个棋局的状态下,计算各个可能落子位置的概率,并选择下一步最佳的走法。
(3)蒙特卡洛树搜索(MCTS,Monte Carlo Tree Search)
上述每个部分具体是什么?又是怎么训练的呢?
2.1 策略网络
是一个13层的CNN网络,卷积核大小采用5 x 5。
训练数据集:围棋游戏中获取的对局样本,3000万人类对弈的位置信息拆解为训练集。
训练目标:在每一种棋局状态下,人类棋手的下一步落子是什么,对于算法来说就是看每种图形的下一种图形是什么。所以策略网是用来计算对手如何落子的。
结果:用这个数据集直接生硬的训练,精度能有57%,这表明大量人下棋总是凭直觉。只有策略网络的AlphaGo(起个别名P_human)下不过业余6段的人类棋手。
优化:此时的训练数据仍然不够,因此采用强化学习进一步AlphaGo的棋力。
2.2 估值网络
也是一个CNN网络。估值网络是AlphaGo的一大创新。
训练:通过两台AlphaGo对弈的方式来训练。人类完成一局对弈一般数小时,AlphaGo之间对弈1秒钟内能完成数局,这种方式可以快速地累积出正确的评价样本。
因此估值网络并不是通过这个世界上已知的棋谱作为训练的,因为人类对弈会受到主观因素的影响。AlphaGo在对战欧洲棋王时,使用的训练组样本只有3000万个棋谱位置,但是在对战李世石时,棋谱位置已经增加到了1亿个。所以,先前提到的机器下围棋的最大困难点:评价机制的部分,就是这样通过卷积神经网络来解决的。
综上所述,策略网络是分类问题,考虑的是对方会下在哪,估值网络是评估问题,考虑的是我下在这的胜率是多少。
2.3 MCTS搜索
MCTS是当时另外一个非常强的AI棋手CrazyStone中用到的算法,是由Coulum设计的(黄士杰的老师),他最初对围棋一无所知。用MCTS搜索替代了博弈树搜索才拯救了围棋算法。MCTS通过模拟大量的棋局,使得最靠谱的落子方法自己涌现出来,而不是暴力的搜索博弈树中的每一种可能的落子方案。
训练:模拟两个人下棋,起初,用掷骰子的方法决定子落在哪里。如果赢了,一些落子方案的分值就增加。然后继续开始下一盘棋,之前被保存下来的落子方案会引导下一步模拟选择行为,模拟因此越来越不随机。随着想象中的棋局下得越来越多,那些看起来不错的落子方案的分数就会越来越高,而落子方案越是有前途,越会被更多地选中进行推演,于是最有“前途”的落子方法就会“涌现”出来。最后,AlphaGo在想象中下完10万盘棋后,选择它推演中分数最高的那个方案落子,这时,AlphaGo才真正下了当前的一步棋。
优势:MCTS搜索的特点是没有任何人工的特征,完全依靠规则本身,通过不断想象自对弈来提高能力。除此之外,MCTS完全不用等对手落子后才开始计算,在对手思考过程中它就已经在计算了,因为对手的落子完全可能出现在之前想象的对弈中,所以所有的计算都不会浪费。
优化:黄士杰意识到他老师的程序起点太低,需要一个方法替代扔骰子。所以用之前训练好的P_human来代替扔骰子。在这一步还可以加一些由围棋专家设计的手工规则,用来排除一些不好的走法。
2.4 AlphaGo整体训练过程
(1)利用3000万专业棋手棋谱训练两个网络:基于全局特征和CNN训练的走棋策略网;基于局部特征和线性模型训练的快速走棋策略,后面在线对弈时用;
(2)利用第 t 轮的策略网络与先前训练好的策略网络互相对弈,利用强化学习修正第 t 轮的策略网络参数,得到一个增强的策略网络;
(3)利用普通策略网络生成棋局的前 U-1 步,然后利用随机采样决定第 U 步的位置(为了防止过拟合),随后,利用增强的策略网络完成后面的自我对弈过程。第 U 步的盘面作为特征输入,胜负作为label,学习一个估值网络。
2.5 AlphaGo在线对弈过程
核心思想是在MCTS中嵌入深度神经网络来减少搜索空间。
(1)根据当前盘面已经落子情况提取相应特征。
(2)利用策略网络估计出棋盘其他空地的落子概率。
(3)根据落子概率计算此处往下发展的权重。利用估值网络和快速走棋策略网络分别判断局势,两个局势得分相加为此处最后走棋获胜的得分。使用快速走棋策略快速行棋至最后,每次行棋结束后会有一个输赢结果,综合统计这个节点对应的胜率。而估值网络只根据当前状态便可直接评估出最后的结果。两者各有优缺点,可以互补。
(4)利用第3步计算的得分更新之前那个走棋位置的权重。然后,从权重最大的那条边开始继续搜索和更新。
Deep Learning学习笔记(5)——AlphaGo相关推荐
- 笔记 | 吴恩达Coursera Deep Learning学习笔记
向AI转型的程序员都关注了这个号☝☝☝ 作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图.具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析.架 ...
- 网上某位牛人的deep learning学习笔记汇总
目录(?)[-] 作者tornadomeet 出处httpwwwcnblogscomtornadomeet 欢迎转载或分享但请务必声明文章出处 Deep learning一基础知识_1 Deep le ...
- CV视觉论文Deep learning学习笔记(一)
论文介绍和监督学习(introduction of paper and supervision of learning) 1. 论文介绍和作者介绍 作者:论文作者是2018年图灵奖得主yoshua B ...
- 【Deep Learning学习笔记】Deep learning for nlp without magic_Bengio_ppt_acl2012
看完180多页的ppt,真心不容易.记得流水账如下: Five reason to explore Deep Learning: 1. learning representation; 2. the ...
- 【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.cpp
模型实现代码,关键是train函数和predict函数,都很容易. #include <iostream> #include <string> #include <mat ...
- Deep Learning论文笔记之(一)K-means特征学习
Deep Learning论文笔记之(一)K-means特征学习 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
- Deep Learning论文笔记之(七)深度网络高层特征可视化
Deep Learning论文笔记之(七)深度网络高层特征可视化 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感 ...
- Deep Learning论文笔记之(六)Multi-Stage多级架构分析
Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些 ...
- Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但 ...
最新文章
- vue颜色选择器_如何制作? Vue的颜色选择器!
- 利用边缘灰度变化建模,来提高圆环直径求取精度
- 国产统一操作系统UOS使用体验
- MySQL高级in和not in
- C++中友元函数,友元类数详解
- 001机器学习深度学习简介
- 程序员最爱用 Emacs 写 Python、Bash,调研了 7300 位开发者有这些发现
- day25 面向对象继承 多态
- Vue项目用webpack打包后,预览时资源路径出错(文末有vue项目链接分享)
- 光电经典好书:《光电系统设计基础》-吴晗平
- 合并报表excel自动模板_自动合并
- 一文带你完全掌握机器人DH参数建模(详细步骤+实例+代码)
- Properties 类的详细使用(十三)
- property java_java-必须为元素类型“ property”声明属性“...
- Java学习分享---【面向对象基础】抽象
- Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters and
- 米世金《货币经济学》思维导图 附自制PPT
- DDR 内存与 PCB 设计挑战
- javaweb简单的外卖平台系统(一)
- HTTP就绪状态和HTTP状态码
热门文章
- 2019-11-29-win10-uwp-如何开始写-uwp-程序
- 在mac上使用vscode创建第一个Python项目
- 自己对ajax的第一次上手被人说菜死还真是菜
- HTML5定稿,为什么是原生App的颠覆
- 投影仪与电视的C位之争,电视会成为下一个被淘汰的电器吗?
- jhin 不在 sudoers 文件中。此事将被报告。
- Python之You-Get库学习
- python如何调整word表格宽度_python-docx编辑word表格
- linux乌班图图形化设置ip,在Ubuntu 18.04 Desktop图形中配置静态和动态IP地址的方法...
- 川土微 数字隔离器CA-IS306X集成隔离电源的隔离式CAN收发器