目录(?)[+]

 

原版论文是《Mastering the game of Go with deep neural networks and tree search》,有时间的还是建议读一读,没时间的可以看看我这篇笔记凑活一下。网上有一些分析AlphaGo的文章,但最经典的肯定还是原文,还是踏踏实实搞懂AlphaGo的基本原理我们再来吹牛逼吧。

需要的一些背景

对围棋不了解的,其实也不怎么影响,因为只有feature engineering用了点围棋的知识。这里有一篇《九张图告诉你围棋到底怎么下》可以简单看看。

深度学习不怎么了解的,可以简单当作一个黑盒算法。但机器学习的基础知识还是必备的。没机器学习基础的估计看不太懂。

“深度学习是机器学习的一种,它是一台精密的流水线,整头猪从这边赶进去,香肠从那边出来就可以了。”
  • 1
  • 1

蒙特卡罗方法

蒙特卡罗算法:采样越多,越近似最优解;
拉斯维加斯算法:采样越多,越有机会找到最优解;
举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的。 作者:苏椰
链接:https://www.zhihu.com/question/20254139/answer/33572009
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

蒙特卡罗树搜索(MCTS)

网上的文章要不拿蒙特卡罗方法忽悠过去;要不笼统提一下,不提细节;要不就以为只是树形的随机搜索,没啥好谈。但MCTS对于理解AlphaGo还是挺关键的。 
MCTS这里的采样,是指一次从根节点到游戏结束的路径访问。只要采样次数够多,我们可以近似知道走那条路径比较好。貌似就是普通的蒙特卡罗方法?但对于树型结构,解空间太大,不可能完全随机去采样,有额外一些细节问题要解决:分支节点怎么选(宽度优化)?不选比较有效的分支会浪费大量的无谓搜索。评估节点是否一定要走到底得到游戏最终结果(深度优化)?怎么走?随机走? 
基本的MCTS有4个步骤Selection,Expansion,Simulation,Backpropagation(论文里是backup,还以为是备份的意思),论文里state,action,r(reward),Q 函数都是MCTS的术语。 
 
图片展示了如何更新节点的胜率,选择胜率大的分支进行搜索(7/10->5/6->3/3),到了3/3叶子节点进行展开选择一个action,然后进行模拟,评估这个action的结果。然后把结果向上回溯到根节点。来自维基百科

具体的细节,可以参考UCT(Upper Confidence Bound for Trees) algorithm – the most popular algorithm in the MCTS family。从维基百科最下方那篇论文截的图。原文有点长,这里点到为止,足够理解AlphaGO即可。N是搜索次数,控制exploitation vs. exploration。免得一直搜那个最好的分支,错过边上其他次优分支上的好机会。 

AlphaGo

 
四大组件。最后只直接用了其中3个,间接用其中1个。

Policy Network (Pσ)

Supervised learning(SL)学的objective是高手在当前棋面(state)选择的下法(action)。Pσ=(a|s) 
要点 
1. 从棋局中随机抽取棋面(state/position) 
2. 30 million positions from the KGS Go Server (KGS是一个围棋网站)。数据可以说是核心,所以说AI战胜人类还为时尚早,AlphaGo目前还是站在人类expert的肩膀上前进。 
3. 棋盘当作19*19的黑白二值图像,然后用卷积层(13层)。比图像还好处理。rectifier nonlinearities 
3. output all legal moves 
4. raw input的准确率:55.7%。all input features:57.0%。后面methods有提到具体什么特征。需要一点围棋知识,比如liberties是气的意思

Fast Rollout Policy (Pπ)

linear softmax + small pattern features 。对比前面Policy Network,

  • 非线性 -> 线性
  • 局部特征 -> 全棋盘 
    准确率降到24.2%,但是时间3ms-> 2μs。前面MCTS提到评估的时候需要走到底,速度快的优势就体现出来了。

Reinforcement Learning of Policy Networks (Pρ)

要点

  • 前面policy networks的结果作为初始值ρ=μ
  • 随机选前面某一轮的policy network来对决,降低过拟合。
  • zt=±1是最后的胜负。决出胜负之后,作为前面每一步的梯度优化方向,赢棋就增大预测的P,输棋就减少P。
  • 校正最终objective是赢棋,而原始的SL Policy Networks预测的是跟expert走法一致的准确率。所以对决结果80%+胜出SL。

跟Pachi对决,胜率从原来当初SL Policy Networks的11%上升到85%,提升还是非常大的。

Reinforcement Learning of Value Networks (vθ)

判断一个棋面,黑或白赢的概率各是多少。所以参数只有s。当然,你枚举一下a也能得到p(a|s)。不同就是能知道双方胜率的相对值

  • using policy p for both players (区别RL Policy Network:前面随机的一个P和最新的P对决)
  • vθ(s)≈vPρ(s)≈v∗(s) 。v∗(s) 是理论上最优下法得到的分数。显然不可能得到,只能用我们目前最强的Pρ算法来近似。但这个要走到完才知道,只好再用Value Network vθ(s)来学习一下了。 
    Δθ∝∂vθ(s)∂θ(z−vθ(s))

    (上面式子应该是求min(z−vθ(s))2,转成max就可以去掉求导的负号)因为前序下法是强关联的,输入只有一个棋子不同,z是最后结果,一直不变,所以直接这么算会overfitting。变成直接记住结果了。解法就是只抽取game中的position,居然生成了30 million distinct positions。那就是有这么多局game了。

MSE training set test set
before 0.19 0.37
after 0.226 0.234

AlphaGo与其他程序的对比。AlphaGo上面提到的几个组件之间对比。这几个组件单独都可以用来当AI,用MCTS组装起来威力更强。(kyu:级,dan:段) 

MCTS 组装起来前面的组件


结构跟标准的MCTS类似。

每次MCTS simulation选择

at=argmaxa(Q(st,a)+u(st,a))=argmaxa(Q(st,a)+C∗Pσ1+搜索次数N(s,a))

我自己补了个常数C,写到一起容易看点。 
V(θL)是叶子节点的评估值,Q是多次模拟后的期望V(θL)。有趣的是实验结果λ=0.5是最好的

V(θL)=(1−λ)vθ(sL)+λzT
  • value network vθ
  • fast rollout走到结束的结果zL

最开始还没expand Q是0,那SL的Pσ 就是prior probabilities。Pσ还能起到减少搜索宽度的作用,普通点得分很低。比较难被select到。有趣的结论是,比较得出这里用SL比RL的要好!!模仿人类走棋的SL结果更适合MCTS搜索,因为人类选择的是 a diverse beam of promising moves。而RL的学的是最优的下法(whereas RL optimizes 
for the single best move)。所以人类在这一点暂时获胜!不过另一方面,RL学出来的value networks在评估方面效果好。所以各有所长。

搜索次数N一多会扣分, 鼓励exploration其他分支。

summary

整体看完,感觉AlphaGo实力还是挺强的。在机器学习系统设计和应用方面有很大的参考意义。各个组件取长补短也挺有意思。 
了解了AlphaGo之后,再去看别人的分析就比较有感觉了,比如fb同样弄围棋的 @田渊栋 的 AlphaGo的分析 - 远东轶事 - 知乎专栏

 
 

AlphaGo原理-蒙特卡罗树搜索+深度学习的更多相关文章

  1. 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...

  2. 蒙特卡罗树搜索(MCTS)【转】

    简介 最近AlphaGo Zero又火了一把,paper和各种分析文章都有了,有人看到了说不就是普通的Reinforcement learning吗,有人还没理解估值网络.快速下子网络的作用就放弃了. ...

  3. 调参侠的末日? Auto-Keras 自动搜索深度学习模型的网络架构和超参数

    Auto-Keras 是一个开源的自动机器学习库.Auto-Keras 的终极目标是允许所有领域的只需要很少的数据科学或者机器学习背景的专家都可以很容易的使用深度学习.Auto-Keras 提供了一系 ...

  4. AlphaGo、人工智能、深度学习解读以及应用

    经过比拼,AlphaGo最终还是胜出,创造了人机大战历史上的一个新的里程碑.几乎所有的人都在谈论这件事情,这使得把“人工智能”.“深度学习”的热潮推向了新的一个高潮.AlphaGo就像科幻电影里具有人 ...

  5. 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探

    1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...

  6. AlphaGo原理浅析

    一.PolicyNetwork(走棋网络) 首先来讲一下走棋网络.我们都知道,围棋的棋盘上有19条纵横交错的线总共构成361个交叉点,状态空间非常大,是不可能用暴力穷举的方式来模拟下棋的.但是我们可以 ...

  7. 机器学习、深度学习以及人工智能正在快速演进(ML、DL、AI)

    机器学习.深度学习以及人工智能正在快速演进 机器学习.深度学习和人工智能(ML.DL和AI)是彼此相关的概念,他们正在改变不知多少行业,改变其自身管理模式,同时改变做出决策的方式.显然,ML.DL和A ...

  8. 深度学习国外课程资料(Deep Learning for Self-Driving Cars)+(Deep Reinforcement Learning and Control )

    MIT(Deep Learning for Self-Driving Cars) CMU(Deep Reinforcement Learning and Control ) 参考网址: 1 Deep ...

  9. 谷歌大神Jeff Dean:大规模深度学习最新进展 zz

    http://www.tuicool.com/articles/MBBbeeQ 在AlphaGo与李世石比赛期间,谷歌天才工程师Jeff Dean在Google Campus汉城校区做了一次关于智能计 ...

随机推荐

  1. java——类加载机制

    类加载机制 JVM把class文件加载的内存,并对数据进行校验.转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制. 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命 ...

  2. 最终类object 和内部类

    Object 类 性质:[1]是所有类的根类.             [2]如果一个类没有显示继承另外一个类,那么该类一定继承于Object toString() 返回对象的字符串表示形式 特殊:[ ...

  3. caffe RandomHue和RandomSaturation

    https://www.cnblogs.com/wangyblzu/p/5710715.html HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度 1.RandomHue void R ...

  4. CDH4.5.0源代码编译

    Unable to load native-hadoop library for your platform解决 安装maven 1 cmake-2.8.12.1.tar.gz cd cmake-2. ...

  5. hadoop中使用的Unsafe.java

    今天查看hadoop源代码, 发现有个Unsafe.java 稍微总结下 优势 1 减少线程调度开销, Unsafe.java 通过采用非堵塞原子方式来减少线程调度开销        2 传统线程通信 ...

  6. 基于Jquery的原生态dialog弹出窗口-zapWindow

    看到boss系统搓B的填出窗口,不忍直视,坚决的换掉! 采用zapwindow(来源不清楚了,总之是前人留下的),做了修改,当前支持三类弹出类型: 1. 指定url 2. 自定义html 3. 指定D ...

  7. java并发多线程(摘自网络)

    1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和 ...

  8. java基础IO流 复制键盘录入的目录,复制其中的.java文件到指定目录,指定目录中有重名,则改名 对加密文件计算字母个数

    package com.swift.jinji; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im ...

  9. Java 单词 day seven

    Constructor Constructor Constructor Constructor Constructor Constructor Constructor Constructor Cons ...

  10. 泉五培训Day1

    T1 树学 题目 [问题描述] 给定一颗 n 个点的树,树边带权,试求一个排列 P,最大化下式 其中,calc(a, b)表示树上由a到b经过的最大边权. [输入格式] 第一行一个整数 n,表示点数下 ...