就智能围棋而言,运用深度神经网络进行的下棋决策,已经非常接近于人。
谷歌的智能围棋程序AlphaGo将挑战人类顶级棋手的消息近来引起了外界的广泛关注,也许这场特殊的赛事将成为人工智能征服最后一个人类棋类项目的里程碑事件。
除了谷歌以外,在智能围棋的研究领域,另一家科技巨头—Facebook也在暗中发力。
半个月后,田渊栋将带着DarkForest—他所开发的智能围棋程序,前往日本东京参加在那里举办的一年一度的机器人围棋比赛。作为Facebook 人工智能研究院智能围棋项目的负责人,田渊栋的DarkForest相比大名鼎鼎的谷歌Deepmind的AlphaGo低调了许多,他自己也谦虚地说,Dark Forest的水准较谷歌还是有不小的差距,自己仍在不断的做改进。
围棋之所以成为棋类项目中唯一一块至今未被人工智能所征服的“高地”,是由于其理论上可能的棋局数多过宇宙中原子数量的近乎无限可能性,下棋策略并不完全基于理性,既需要有对大局的把握,又需要具备局部阵地的取舍判断,很多人类围棋高手在谈到某步棋为何要这么走时,往往会说,“感觉上应该这么走”。
近年来,随着深度神经网络和蒙特卡洛树搜索的进展以及计算资源的不断提升,使得人工智能在围棋研究领域获得了重大进展。
尽管田渊栋不愿将Dark Forest和AlphaGo相提并论,但由谷歌AlphaGo引起的人工智能围棋程序战胜人类选手的轰动效应,使得背靠Facebook人工智能研究院的Dark Forest近来也引起了外界的关注。
“因为我是《三体》的粉丝,所以把自己的程序取名叫‘Dark Forest’(黑暗森林)。”在接受腾讯科技专访时,田渊栋在电话那头这样说。
他将《三体》中人物托马斯• 维德的经典话语:“前进!前进!不择手段地前进!”放在了个人知乎专栏的签名档中。
这位有着科幻情怀的计算机学神,工作之余还喜欢写诗和小说。他对自己的要求极高近乎苛刻,曾在论文截稿前一小时,由于回答不了妻子随意提出的一个问题,决定将花了大半年精力的论文撤稿。
他说,启动智能围棋项目是一次“无心插柳”的尝试,却让Facebook的创始人、座位离他仅6米远的扎克伯格亲自在个人页面上为他的成就“点赞”。他自谦围棋水平并不高,但对Dark Forest却信心十足,说尽管在“估值网络”方面和谷歌相比有所欠缺,但在“走棋网络”方面则更强。
在谈论Dark Forest时,田渊栋给人在谈论自家孩子的错觉,既呵护,又希望他能争气。
他不愿预测谷歌对阵李世石的比赛结果,称对AlphaGo所使用的具体方法和目前的计算能力并不完全了解,却在挂下电话后不到24小时,在自己的知乎专栏上写下一篇详细的AlphaGo的专业分析文章。
田渊栋说,就现在的研究进展来说,人工智能已经和人类的思维非常接近,就智能围棋而言,运用深度神经网络进行的下棋决策,已经非常接近于人,就是凭借“感觉”,而选择下一步棋的落子。
坐在6米外的扎克伯格“点赞”了他的围棋项目
如果硬要将谷歌的AlphaGo与Facebook的Dark Forest做比较,确实有些不公平。首先谷歌的这一项目已经进行了快10年左右,那篇著名的发表在《自然》杂志上引起轰动的论文的第一作者,其博士论文便是智能围棋项目的研究,由于近年来进展迅速,谷歌方面也不惜投入大量资源,AlphaGo的团队在最近一年半的时间内已经扩充到20人,相比来说,Facebook的智能围棋项目,是由田渊栋去年初从谷歌无人驾驶汽车组加入Facebook后才开始进行的项目,除了他以外,还有一位实习生帮助做一些辅助性工作,但绝大部分的工作由田渊栋一个人完成,因而说Dark Forest是一个人的项目并不过分。
让田渊栋感到自豪的是,上月底,Facebook创始人兼首席执行官Mark Zuckberg在其个人的Facebook页面上发了一篇文章,专门谈到了Facebook正在进行的智能围棋项目,并称“从事这个项目的田渊栋的座位离我只有20 feet (6米)远,我希望我的人工智能团队成员离我很近,这样我可以向他们学习他们正在进行的项目。”
田渊栋说,老板的肯定给了他很大的鼓舞,他用自己的Facebook账号转发了这篇文章,并附上了评论“Honored! ”(“自豪”)。
扎克伯格“点赞”田渊栋智能围棋项目
爱写诗的知乎学神
尽管嘴上不愿和AlphaGo做比较,但田渊栋暗暗想跟其较劲的想法却藏不住,他几天前在知乎专栏上发表了一篇最新文章,仔细分析了谷歌发表在《自然》杂志上的那篇文章,这篇文章已经收获了几百个赞,评论中几乎到处都是“膜拜大神”这样的字样。
田渊栋在知乎上已经是个红人,他的专栏有4000多人关注,基本上关于人工智能相关的问题,他都会受到回答的邀请,在一则“围棋作为唯一一种电脑下不赢人的大众棋类,是何原因导致?以及量子计算机出现后有无可能?”的问题下,收到三份邀请后,田渊栋的回答获得了4000多的赞成投票。在知乎上的很多读者心目中,在人工智能研究领域,他是很多问题的最好的解答者。
除了专业性很强的文章之外,在工作之余,田渊栋还爱写一些个人的工作生活总结,这让外界更多地了解到他专业领域的另一面。
在“2015年末总结”中,他这样写道:“但男人,得要为自己的选择负责。对别人负责,更要对自己负责。”
当时的他,正面临职业生涯中的一次重要抉择,2014年底,他选择离开谷歌无人驾驶汽车组,转而加入Facebook人工智能研究所,字里行间里,能够体会到这位既热衷于学术研究,又对自己和家人有着高度责任心的研究者在工作和生活中的一些纠结和思考。
他对自己的要求严格近乎极端,曾花费大量精力准备了大半年的研究论文,只是因为截稿前最后一小时,“我让老婆随便读一读,她出于好奇提了一个问题,我想了想,说回答不了,于是撤稿。”
作为一名标准的理工男,在高度理性之余,田渊栋却又不乏感性,他爱写诗,在网上能找到的他写的最早的诗是2010年,当时他赴CVPR(计算机视觉大会)开会,一口气写了八首诗,吃顿饭到他这里就成了“六人豪享海鲜宴”,和老朋友见面又促成了“九转南下会旧友”。不难体会到,当时田渊栋意气风发、少年得意的心境。
尽管研究的是人工智能,是如何让机器像人一样去思考、去感知,田渊栋却并没有越陷越深,他清晰地知道人和机器的区别,“人偏偏是个奇怪的动物,不能像机器一样不眠不休地干活,总要有七情六欲,总要有宣泄的出口。”
田渊栋是上海人,从小到大都是标标准准的“别人家的孩子”,从上海交通大学获得计算机本科和硕士学位后,他来到卡耐基梅隆大学机器人研究所攻读博士学位,毕业后加入了谷歌无人驾驶汽车项目组。
机缘巧合的智能围棋项目
在来到Facebook后,田渊栋最初并没有很明确的研究方向,开了七八个研究项目。
“做研究的风险很高,很多项目开始想想觉得很有道理,但做着却发现进行不下去。”田渊栋说。
后来决定进行智能围棋项目,却是一个机缘巧合,田渊栋说,最初只是为了验证一个事后证明是不对的想法,于是搭建了平台、数据,完成后发现既然平台已经搭建好,还不如继续利用一下,于是才有了智能围棋这个项目。
田渊栋说,目前几乎所有主流的智能围棋程序都使用蒙特卡洛树搜索,而谷歌的AlphaGo和Facebook的Dark Forest则是运用深度神经网络加上蒙特卡洛树搜索,通过强大的计算资源,一般都是用基于规则的或者基于局部特征,从而形成决策。
他说,谷歌的AlphaGo运用走棋网络(Policy Network)和估值网络(Value Network)两方面来进行,第一部分的作用是给定当前的局面,预测或采样下一步的走棋,第二部分的作用是给定当前的局面,估计是白胜还是黑胜。
田渊栋说,对于第一部分的Policy Network,Dark Forest比AlphaGo更为增强,但Value Network部分,Dark Forest目前还不具备。
他还强调说,Alphago具备2微秒下一步棋的基于CPU运算能力的决策,这一点也很重要,因为运用神经网络往往速度较慢,需要花费毫秒级的时间。
田渊栋说,Dark Forest目前最高水平已经达到业务5段,在KGS对战平台上,接受来自人或其他围棋程序的对弈比赛。
“但还有一个问题是,水平还不太稳定,有时可以战胜高段位的选手,但有时也会输给水平低的多的选手。”田渊栋说,“这主要是因为深度神经网络对于大局观的把握比较好,而对局部的一些策略的把握并不太容易。”
在谈到Dark Forest的程序时,田渊栋常给人一种在谈论自己孩子的错觉,既为他获得的成就感到欣喜,又为他所犯下的失误惋惜不已,希望他能更争气。
对于未来智能围棋研究的突破方向,田渊栋认为,任何进展都是需要长期的积累,通过很多失败的经验,逐步发现问题并做出改进,不可能一蹴而就。
“无论是蒙特卡洛树搜索还是深度神经网络都不是新东西了,只是以前的搜索和计算能力没有现在这么强,这些都是慢慢进步的。”
但所追求的终极目标,是希望能找到能学出规律的学习算法,出现“质变”,田渊栋认为这才是解决问题的根本手段,而不是仅仅依赖现有的算法和框架,利用计算资源和能力的不断提高的“量变”。
·氧分子网(http://www.yangfenzi.com)延伸阅读:
PyTorch昨天发布,这是一个支持强大的 GPU 加速的张量计算(类似numpy),构建基于 tape 的 autograd 系统的深度神经网络的深度学习研究平台。这是numpy 的替代,以使用 GPU 的能力,能够提供最大的灵活性和速度。田渊栋在接受专访时表示,新的平台不像以前 torch 需要clone_many_times。另外从 numpy ndarray 可以转到torch.Tensor,不需要copy。
专访Facebook研究员田渊栋和PyTorch作者Soumith
新智元 :田博士,关于PyTorch的发布,请问可以采访您几个问题嘛?
田渊栋 :哦,你要问什么?我可以把问题转给Soumith。
新智元 :请问 PyTorch 除了是基于 Python,其它架构是否与 Torch 一样?
田渊栋 :基本C/C++这边都是用的torch原来的函数,但在架构上加了 autograd 这样就不用写backward 函数,可以自动动态生成computational graph 并且自动求导,反向传递后自动回收内存,这个让写程序变得更方便了。另一个重要的不同是权值(weights)和activation/gradInput分开了,这样同一个layer 可以复用很多次,存储的时候也不用 clear gradient,不像以前 torch 需要clone_many_times。另外从 numpy ndarray 可以转到torch.Tensor,不需要copy。
Lua这边一直有每个 thread 2G的限制,这个对写多线程的程序不是很有利。Python有GIL,所以一般用 multiprocessing 写程序,PyTorch针对这个有比较好的支持,比如支持进程间共享内存(这个对parameter server有利),支持shared Cuda context,等等。
我自己已经在用了,写了一个增强学习的框架,效果还是不错的。
新智元 :tensorflow也支持 python,请问这两种有什么区别呢?
Pytorch作者Soumith:像TensorFlow, Theano,Caffe以及CNTK都是静态的计算图结构。而PyTorch这边是动态地生成计算图结构(Computational Graph)的,所以可以在训练时动态改变图的拓扑,而不用改代码重新开始。
新智元:对GAN 和 深度强化学习支持怎么样?
田渊栋 :自带的tutorial里面已经有GAN的样本了,RL的框架我在写,在一些例子上已经达到了目前的最好水平。
新智元:您指的一些例子是什么类型的例子呢?
比如说OpenAI Gym Atari game Breakout-v0。
HN评论:深度学习库生态没有停滞
几个月前人们还说,深度学习库生态系统开始稳定。我从来不这么认为。深度学习库的最新前沿是确保对动态计算图的有效支持。
当需要完成的工作量是可变的时,动态计算图形出现。这可能是在我们处理文本时,一个例子是几个字,而另一个是文本的段落,或者当我们对可变大小的树结构执行操作时。这个问题在某些的领域尤其突出,例如自然语言处理。
PyTorch 很好地解决了这个问题,如 Chainer 和 DyNet。事实上,Pytorch 的构建直接从 Chainer 获得,尽管重构了并且设计得更快了。我已经看到所有这些在最近几个月,特别是在许多研究人员进行领域的前沿研究重新产生兴趣。当你使用新的架构时,你希望在框架允许范围内,获得最大的灵活性。
另一面,TensorFlow 不能很好地处理这些动态图问题。虽然有一些原始的动态结构,但它们不灵活,通常相当有限。在不久的将来,有计划允许 TensorFlow 变得更加动态,但添加它是一个挑战,特别是还要有效地做。
披露:我的Salesforce Research团队广泛使用Chainer,我的同事James Bradbury是PyTorch的贡献者,而它处于隐身模式。我们计划从Chainer过渡到PyTorch,以便将来的工作。
PyTorch 官网介绍
PyTorch 是一个 python 包,提供以下两个高级功能:
强大的 GPU 加速的张量计算(类似numpy)
构建基于 tape 的 autograd 系统的深度神经网络
在需要时,你可以再使用你喜欢的其他 python 包来扩展 PyTorch,例如 numpy,scipy 和Cython。
在粒度级别上,PyTorch 是一个由以下部分组成的库:
通常可以把 PyTorch 作为:
numpy 的替代,以使用 GPU 的能力;
一个深度学习研究平台,能够提供最大的灵活性和速度。
以下是更详细介绍:
一个支持 GPU 的 Tensor 库
如果你使用 numpy,那么你已经在使用 Tensors(也就是 ndarray)。
PyTorch 提供的 Tensors 支持 CPU 或 GPU,并为大量的计算提供加速。
我们提供多样的 tensor 程序以加速并适应用户的科学计算需要,如 slicing, 索引, 数学运算,线性代数,缩减。而且,速度非常快!
动态神经网络:基于 tape 的 Autograd
PyTorch 具有独特的构建神经网络的方法:使用并重放 tape recorder。
大多数框架,如 TensorFlow,Theano,Caffe 和 CNTK 都是静态的。使用者必须构建一个神经网络,并重复使用相同的结构。更改网络表现的方式意味着必须从头开始。
PyTorch 使用一种被称为反向模式自动微分(Reverse-mode auto-differentiation)的技术,能够让用户以零延迟或开销的方式任意改变网络表现。我们的灵感来源于几个相关话题如 autograd,autograd,Chainer 等的研究论文,包括当前的和过去的论文。
虽然这种技术不是 PyTorch 独有的,但它是迄今为止最快的实现之一。在研究中使用 PyTorch,你将得到最快的速度和最好的灵活性。
以Python为先
PyTorch 不是把 Python 绑到 C++ 框架上去,而是深度集成到 Python 语言中。你可以可以就像你用 numpy / scipy / scikit-learn 之类的一样使用。你可以用 Python 本身写新的神经网络层,可以用你最喜欢的库或者包,例如 Cython 和 Numba。我们的目标是尽量不要重新造轮子。
实践经验
PyTorch 符合直觉、好理解、易用。当你执行一行代码,它马上运行,不是跟异步的。当你进入 debug 或者收到错误信息进行 stack trace,都很容易理解。stack trace point 就是你代码的地方。我们不希望你因为差劲的 stack trace 或者 不同步和模糊的运行,而花上几个小时 debug。
又快又稳
PyTorch 具有最小的框架开销。 我们集成加速库,如英特尔MKL和NVIDIA(CuDNN,NCCL),以最大化速度。 在核心,它的CPU和GPU Tensor和神经网络后端(TH,THC,THNN,THCUNN)作为独立的库用 C99 API编写。
它们是成熟的,已经测试了多年。
因此,PyTorch是相当快 – 无论你运行小或大的神经网络。
相比 Torch 或其他一些框架,PyTorch的内存使用是非常高效的。 我们为GPU编写了自定义内存分配器,以确保您的深度学习模型具有最大的内存效率。 这使你能够训练比以前更大的深度学习模型。
轻松扩展
编写新的神经网络模块,或 PyTorch的Tensor API 的使用,其设计非常直接和最小的抽象。
你可以使用torch API或你最喜欢的基于numpy的库(如SciPy)在 Python 中编写新的神经网络层。
如果你想用C / C ++编写你的图层,我们提供一个基于cffi的扩展API,它是高效的,并且有最小的样板。没有需要编写的包装代码。 你可以在这里看到一个例子:https://github.com/pytorch/extension-ffi