铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 4252|回复: 23

AlphaGo使用的深度学习技术科普

[复制链接]
发表于 2017-5-28 22:14 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
写在前面

本文是我对于AlphaGo使用的技术的一些粗浅认识,因为水平有限,文中可能包含有大量错误。想深入严谨了解这项技术的读者请参阅其团队发表的一系列论文。

本文尽量避免数学上的表述,只使用少量的几个公式。

点评

不明觉厉,给代码实现具体功能可以考虑加精  发表于 2017-5-28 23:01

评分

参与人数 1声望 +12 收起 理由
winson7891 + 12 赞一个!

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-5-28 22:56 | 显示全部楼层
深度学习

考虑这样的问题:对于一组输入数据,进行分析并判断,应该如何做?

以上的问题比较抽象,我们举一个例子:对于以下6张图片,判断应该归于0~9中的哪一类?

如果其中1张图记为x,那就是构造一个函数f(x),其取值为0~9之间。

这实际上是机器学习领域里的一个入门例子,对于AlphaGo来说,问题是:对于某个进行中的棋局图,下一步放在哪里能保证胜率最大?

通常来说,我们会分析一下每一类图片的特征,例如:如果有一个大圈,那结果是0,如果上下两个小圈,结果是8。但是这样决策的过程会很复杂,程序写起来也比较麻烦。也就是说f的形式会很麻烦,里面可能包含有几百个参数,构造起来相当复杂,而且可能有很多漏掉的情形。
这里解决问题的顺序是:分析问题特征,依据特征构造函数(决策过程),微调。

那么我们现在把解决思路换一个顺序,先构造一个足够复杂的函数,然后用已知的大量数据对其进行调整,会不会简单一点?
没错,这样操作起来确实简单一点,但是这里存在几个问题:
1. 这个函数必须能够拟合前面依据特征构造的函数,这样的函数是否存在?
2. 即使这样的函数存在,要调整函数所需的计算量有可能非常大,能不能在一个较短(可以接受)的时间完成?

答案存在:就是深度学习。

那么深度学习是什么?
我们刚才提到函数f(x),其形式可能非常复杂。那么我们考虑能不能用一个简单的变换,例如线性变换来模拟,按照矩阵的写法是:

y=Ax+b

这个函数的形式太简单了一点,不足以模拟复杂的函数,那再变换一次会不会好点?

y=A2(A1x+b1)+b2

但是这样好像好不到哪去,展开之后相当于一次线性变换。
那就加点非线性的东西进去吧,比如弄一个g(x),管他什么形式都好,只要非线性就行。这样式子变成了:

y=g2(A2(g1(A1x+b1))+b2)

目前已有理论证明,足够多的层数和参数可以模拟任何函数,这是深度学习方法成立的基础。
大概就是函数的具体形式是什么我也不知道,但是用这个形式总是能模拟的。
在深度学习里,经常管一次变换叫一层,上面就是两层。许多层叠起来叫做神经网,因为这个方法实际上是从仿生角度搞出来的。新版的AlphaGo堆了40层。而每次变换并不是都使用的矩阵乘,而是用了卷积计算。具体我就不介绍了,只要理解为卷积计算强调的是近邻数据之间的关系(包含横向纵向),而只使用矩阵乘则是考虑数据的全局的情况,并不适合所有场合。
至于如何调整参数适应具体问题,目前一般使用的是反向传播方法,这个过程叫做训练。

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-28 23:06 | 显示全部楼层
不错不错,看了这篇文章,我的九阴真经领悟更深了,乾坤大挪移已经突破了第三层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-28 23:31 | 显示全部楼层
学历有限啊 只能看一遍
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-5-28 23:43 | 显示全部楼层

计算量
这里需要指出的是,矩阵乘法和卷积计算在数据量很大的时候都是很慢的,但是最近几年出现了用GPU计算的方法,速度远远快于使用CPU计算。
一般来说,CPU算什么都快(也可以理解成算什么都慢),但是核心数比较少,民用的一般8到16个,一次也只能算这么多,有几万个数据就要慢慢排队。
而矩阵乘法通常只需要做大量乘法和加法,GPU基本只会算这个,速度也不见得比CPU快,但是核心数单卡可以到3000个,这样速度就上来了。
Google为了计算这些,还搞出了TPU,其他的功能都不要了专门算这个,速度自然更快。

到了这里一步,可以说函数的形式构造好了,而如何调整的方法也找好了,速度也能接受了,那么下面的问题变成如何找数据了。


现在先回过头看看围棋这个问题。

首先看一下为什么象棋的AI很早就能解决,这是因为象棋的目的明显,每个子价值明摆着,构造一个合理的f(x)相对简单,而且变化相对少很多,可以暴力穷举。而围棋的变化多,每个子价值的判断就算顶尖高手也说不清楚,变化又多得不像话,计算机无法穷举。

如果在宇宙某处有一台计算机,能够穷举围棋的变化,那么AlphaGo当然是无法下过它的。因此AlphaGo的相对水平相比诸多象棋AI是很低的,当然人类的相对水平就更低了。

价值网络
既然穷举不了,那就换一个问题,也就是AlphaGo面对的问题:一个正在进行的棋局,下一子放在哪里可以让胜率最大?
这个解应该是存在的,但是大部分情况,也就终局前能看出来,棋子还很少的时候,还是看不出来。
不管怎么说,先把这个函数用深度学习(神经网络)构造一下,然后弄些数据来学习一下。这个网络被称为价值网络。

那么这时需要什么数据?自然是在某个局面下,根据下一子摆放的位置,得到的获胜概率。
但是这个数据其实是没有的,因为现存的棋谱都是从头记到尾,最后知道哪边赢了。而胜率则是统计概念,至少要演练几千几万次才有结论,高手怎么可能陪你把某个局面演练个几千几万遍给你算胜率?

策略网络
所以现在没有高手,只能先造一个还凑合的手出来。这就是策略网络。这个网络的作用是根据当前局面,推测下一步应该走在哪里合理,并不是解决胜率问题,所以可以认为是一个中间结果。
这时人类高手棋谱就有用了,虽然大部分局面下,下在哪里好看不出来,但是既然都是高手,那就当成好的吧。
这样策略网络就出来了。因为是学习的人类高手,所以下法跟人类是很像的。但是这个东西的水平不高,因为深度学习目前来看学习的效率远不如人类,主要的原因还是生搬硬套不知变通。就拿前面的数字来说,人类学习十几张图,就能达到一个很高的水平了,至少角度偏移和位置偏移对人类影响很低。而机器却看不清这些,如果给它学习的图全偏左,偏右的图它很可能就看不出来。
同时,这些下法里面还包含着大量错误,即便是最终赢棋。也就是这一步下错了,赢棋是后来逆转的。

但是现在大量的实验表明,如果数据能覆盖大部分情况,机器所表现出的稳定性却远远高过人类。

策略网络为什么水平不够,原因就是数据不够,以及其中的错误太多。
但是无论怎么样,现在是有办法算胜率了,那就摆下一个局面,让策略网络下个几万盘到终局,看看胜率如何吧。注意这里还使用了蒙特卡洛剪枝的技巧来降低计算量,否则还是算不过来。
经过这么一番折腾,现在价值网络的数据有了,那就可以训练了。

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-29 05:12 | 显示全部楼层
哈哈,要从函数讲起得讲到猴年马月了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-29 08:03 来自手机 | 显示全部楼层
请探讨alphago1.0和2.0的区别
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-5-29 09:57 | 显示全部楼层
蒙特卡洛树

刚才提到的是利用价值网络估计胜率,实战中还加上了一个直接模拟到终局估算胜率的功能。但是这时候要求比较快地模拟,所以使用的是一个简化的策略网络。

按照蒙特卡洛树的思想,本来这里的判断应该是连规则都不知道,干脆乱下的,但是这样比较扯淡,所以相当于叫两个水平很一般的棋手来模拟个几万次,作出一个还可以的判断。

根据AlphaGo论文公布的数据来看,策略网络、价值网络、蒙特卡洛树3个模块单独拿出来,都水平很一般,但是加在一起,水平立刻升上去了,能跟一般的职业棋手一较短长。

强化学习

虽然水平上去了,但是跟人下还是不太行,可能还是数据量不够。
干脆自己造数据吧,让AlphaGo分裂成两个,自己跟自己下棋。继续积攒大量对局数据和胜率数据,强化策略网络和价值网络。
当然一开始的对局质量是比较低的,但是数据量足够的时候,机器学习的威力显出来了,终于某一天达到了强职业水准。
这是有理论根据的,但是实施起来比较困难。目前深度学习的理论更是一团乱,基本上属于能搞出来,但是不知道为啥的状态。
但是结论是有的,这些策略结合起来,至少能造一个水平很高的棋手出来。

这就很吓人了。从上面的讨论中,我们知道源头是人类高手的棋谱,最终通过学习和组合达到甚至超过了高手的平均水平。
但是如果源头是人类顶级高手呢,能不能指望水平超过顶级高手呢?
如果源头是比人类顶级高手还要高一些呢?

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-5-29 12:14 | 显示全部楼层
这就好比,天下所有高手的棋都研究明白了,那么胜过他们之中的八成应该是问题不大的,如果学习效率再高一点,胜过九成也是可以期望的。而AlphaGo这样可以算是非常精细的研究,所以超过所有人也不是做不到。
然后再自己制造一大堆高手,再把他们的棋研究明白了,水平会更高一点。
反复这个过程,水平自然就会越来越高了。

那么为什么AlphaGo可以有这样大的进步,其实根本的原因是人类之前的水平太低了……

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-29 17:16 | 显示全部楼层
学习学习bt巨巨心得
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-29 17:30 | 显示全部楼层
那么为什么AlphaGo可以有这样大的进步,其实根本的原因是人类之前的水平太低了
这句才是正解
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-30 08:53 | 显示全部楼层
啊,请深度剖析决策网络与价值网络的结合技术
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 09:35 | 显示全部楼层
说白了就是求最优解法与最大胜率的过程,唉我这种长期跟数据打交道的程巨猿看到公式就有点懵逼了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 09:50 | 显示全部楼层
建议加精华阿!!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 11:18 | 显示全部楼层
厲害....小弟長知識了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 13:36 | 显示全部楼层
因为围棋有明确的结果,所以可以训练。那如果让阿狗学写诗,是不是就不存在一个价值网络了。这样也就是说深度学习永远达不到李杜的水平?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 14:13 | 显示全部楼层
本帖最后由 怪羊基德 于 2017-5-31 21:54 编辑
pojian 发表于 2017-5-31 13:36
因为围棋有明确的结果,所以可以训练。那如果让阿狗学写诗,是不是就不存在一个价值网络了。这样也就是说深 ...


可以分析跟已有诗歌的相似度来写诗。

现在已经有人用对抗性生成网络(GAN)来写诗了。效果就是给出某些关键词,自动写出一首人模狗样的作品。

能不能跟李杜比,这就不好说了。毕竟评论诗歌有一个厚古薄今的问题,即便是人类诗人写出什么东西,叫板李杜也只是找喷。我觉得电脑写出的诗能过图灵测试就很好了。

去年有一个机器人写诗过图灵测试的新闻:http://guoxue.ifeng.com/a/20160321/48043419_0.shtml
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 15:15 | 显示全部楼层
现在那种生成出来的诗,简直是人工弱智和深度学渣的标准教材。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-5-31 23:37 | 显示全部楼层
bt帝厉害,居然这么认真的去分析这么复杂的事情~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-6-6 12:39 | 显示全部楼层
高手,感谢科普
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-6-6 19:23 来自手机 | 显示全部楼层
能不能按这个函数的原理,把金水的ai也改进一下,所有战旗类游戏都能按这个逻辑加强ai吧,
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-6-13 14:31 | 显示全部楼层
本帖最后由 江东行者 于 2017-6-13 14:38 编辑

这个厉害了!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-10-26 14:04 | 显示全部楼层
顶顶顶顶顶
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-21 17:32

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表