22岁时,你在干嘛?
这两天,现任Google AI掌门,传奇一般的Jeff Dean,再次收获膜拜和引发热议。全因他的本科毕业论文首次曝光。
这篇论文只有8页。
却成为1990年的最优等本科论文,被明尼苏达大学图书馆保存至今。
同时这篇论文表明,整整28年前,Jeff Dean已经在用C语言,为神经网络编写并行计算的代码。
拜Jeff Dean教的众人又沸腾了。
老论文,新热议
有位大概很年轻的网友,看了论文之后在HackerNews上发出感慨:不可思议,Jeff Dean在1990年就开始对神经网络感兴趣。
一句话,引来众多科普和追忆。总结起来,就是当时神经网络正当红。
有人感慨:“神经网络那时候是一件大事,在1980年代后期非常热门,那真是一段美好的时光。”
1990年,正值第二次AI寒冬之前,当时,神经网络、Prolog、LISP语言、模糊逻辑都正在流行,ANN还没有被SVM等超越,日本在AI领域还大有赶超美国之势。
后来成为Jeff Dean同事(实习生 ^_^)的神经网络之父Geoffrey Hinton,当时也已经有很多重要研究发表,反向传播也出现了。
Jeff Dean这篇论文提到的两种并行训练方法,就都是基于反向传播的。
网友@silverlake说,“我几乎与Dean同龄,我的本科项目是用遗传算法改进神经网络。当时人工智能很流行,但不久之后冬天来了。”
1990年代早期,对神经网络和机器学习来说是一段非常有趣的日子。当时物体识别、手写识别等都有出现,所有进展都在快速推进,但很快资金撤走了,项目全都陷入困顿。
“幸好后来GPU、深度反向传播的出现,数据量开始爆炸之后,神经网络卷土重来。”网友@dekhn说。而对于那些在第二次AI寒冬中坚守至今的人来说,显然已经得到了应有的回报。
回忆往事之外,不少人得出类似不忘初心,方得始终的结论。
比方Jeff Dean本科毕业论文中研究的问题,被指仍然是今天TensorFlow的重大问题之一。
“真正有趣和创新的早期工作,我认为这也解释了为什么TensorFlow不支持层内模型并行。令人惊讶的是,早期的经历对我们的影响有多大。”网友@scottlegrand2评价。
确实如此。实际上本科毕业之后,Jeff Dean并没有一直沿着AI的方向继续研究下去。随后他的兴趣转向编写高级面向对象语言的编译器,并且在这个领域取得博士学位。
“然而那一丝觉得神经网络很有意思的感觉,从来没有真正消失过”,于是后来Jeff Dean又在Google内部主导神经网络、人工智能的研究,并且和吴恩达、Greg Corrado共同发起成立了Google Brain项目并且担任负责人。
有人评价说,Jeff Dean是一位具有编译器优化专业知识的计算机科学家,而TensorFlow本质上是一种将神经网络加速,转化为与编译器优化相关问题的尝试。
当然,还有很多人注意到,这篇优秀毕业论文只有8页。
“一如既往,Jeff Dean从不让人失望。在年轻的时候就解决了一个负责的问题,获得很好的结果,而且清楚简洁的描述了解决方案。”网友@halflings留言说,“我的论文得有60页,但价值不及这篇的千分之一。”
一个学术机构竟然允许提交这么简明的毕业论文,值得表扬。有人回忆起自己读研时的经历:几乎每个修改我论文的人都想加一堆废话。如果你想用一句话简单描述,就会被拒。导师能允许他、甚至鼓励他这么高效精简地沟通,对他真是太好了。
于是,大家开始好奇他导师是谁……
当然有答案。Jeff Dean本科毕业论文的导师,是Vipin Kumar。
Kumar教授现在依然在明尼苏达大学任教,研究数据挖掘、高性能计算和这些技术在气候、生态系统、医疗方面的应用。他还曾在1998年-2005年期间,担任美国陆军高性能计算研究中心(AHPCRC)主任。
Jeff Dean发推说,这篇论文他其实已经弄丢了,于是今年年初,他问当年在明尼苏达大学的导师Vipin Kumar还有没有这篇论文,当然,老师也没有……
他们又去问了学校的荣誉毕业生项目(Honors Program),得到的答案是,纸质论文全都没了。好在,图书馆扫描了一份PDF,才让这篇论文重见天日。
这篇论文在讲什么?
这篇已经快30岁的论文,是怎样并行训练神经网络的?
Jeff Dean探讨了两种基于反向传播来平行训练神经网络的方法。
第一种是模式分割法(pattern-partitioned approach),将整个神经网络表示在每一个处理器上,把各种输入模式划分到可用的处理器上;
第二种称为网络分割法(network-partitioned approach)流水线法(pipelined approach),将神经网络的神经元分布到可用的处理器上,所有处理器构成一个相互通信的环。然后,特征通过这个pipeline传递的过程中,由每个处理器上的神经元来处理。
他还构建了不同大小的神经网络,用几种不同的输入数据,对这两种方法进行了测试。
结果表明,对于模式分割法,网络大、输入模式多的情况下加速效果比较好;
而下面这张图,是两种方法的对比结果:
那时候,Python公开版还没发行,更没有TensorFlow、PyTorch之类的框架。Jeff Dean并行训练神经网络的测试代码,都是用C语言写的。
这些神经网络本身、用来测试的配置,也有有浓厚的年代感。我们从论文里能看到1990年的“大”神经网络什么样:3层、每层分别10、21、10个神经元的神经网络,就算很大了。而Jeff Dean测试用的处理器,最多达到了32个。
这时的Jeff Dean应该还想不到,12年后,他会和吴恩达、Quoc Le等人一起,用16000个CPU核心,从海量数据中找出猫。
论文传送门:
https://drive.google.com/file/d/1I1fs4sczbCaACzA9XwxR3DiuXVtqmejL/view
Jeff Dean小传
1969年生,49岁。
1996年博士毕业于华盛顿大学计算机系(UW)。
美国国家工程院院士,ACM Fellow,AAAS Fellow。
1999年加入初创期的Google,设计并部署了Google广告、抓取、索引和查询服务系统的大部分内容,以及位于Google大部分产品下方的各种分布式计算基础架构,也是Google新闻、Google翻译等产品的开发者。
发起创办了Google大脑。
发起打造了目前全球份额第一的深度学习框架平台TensorFlow。
虽然官方title是Google高级研究员,但Jeff Dean在Google的地位仅次于创始人拉里·佩奇和谢尔盖·布林。
在2018年4月,Google内部架构调整,Jeff Dean接管Google整个AI业务和团队,据称工位也与Google现任CEO皮猜相邻。
△ Jeff Dean的LinkedIn履历
段子中的姐夫
当然,如果你对这位低调的大神了解有限,是时候又要祭出圈内口口相传的Jeff Dean的段子集了。
我们也当面向“姐夫”转述过这些段子,他当时笑着回答说:谢谢大家的喜爱。
一起来看看这些段子吧:
During his own Google interview, Jeff Dean was asked the implications if P=NP were true. He said, “P = 0 or N = 1.” Then, before the interviewer had even finished laughing, Jeff examined Google’s public certificate and wrote the private key on the whiteboard.
当他被Google面试时,Jeff Dean被问及如果P=NP意味着什么。他说,“P=0 或者 N=1”。然后,在所有的面试官还没笑完之前,Jeff瞄了一眼Google的公共证书然后在白板上写上了对应的私钥。
Compilers don’t warn Jeff Dean. Jeff Dean warns compilers.
编译器从来不给Jeff编译警告,而是Jeff警告编译器。
The rate at which Jeff Dean produces code jumped by a factor of 40 in late 2000 when he upgraded his keyboard to USB 2.0.
在2000年后段,Jeff码代码的速度突然激增了40倍,原因是他把自己的键盘升级到了USB 2.0。
Jeff Dean builds his code before committing it, but only to check for compiler and linker bugs.
Jeff还是会在提交代码前把它们编译一遍,不过这么做的目的只是为了检查下编译器和链接器有没有bug。
gcc -O4 emails your code to Jeff Dean for a rewrite.
gcc的-O4优化选项是将你的代码邮件给Jeff重写一下。
Jeff Dean was born on December 31, 1969 at 11:48 PM. It took him twelve minutes to implement his first time counter.
Jeff出生于1969年12月31日的下午11点48分,然后他花了整整12分钟的时间实现了他的第一个计时器。(背景:计算机中的计时器数值通常被设计为从1970年1月1日0点0分0秒到当前为止的秒数)。
When Jeff Dean designs software, he first codes the binary and then writes the source as documentation.
当Jeff写软件时,他是直接码机器码的。写源代码只是为了作为文档使用。
Jeff Dean’s keyboard has two keys: 1 and 0.
Jeff的键盘多达两个键:1和0。
When Jeff has trouble sleeping, he Mapreduces sheep.
当Jeff失眠时,他用Mapreduce属羊。(Mapreduce是Jeff的作品之一,这个分布式处理的框架算法是Google立足的根本之一)。
You name three pointers, Einstein, Euler, and Turing, when you de-reference them, all you get is Jeff Dean.
如果你命名三个指针分别为爱因斯坦、欧拉和图灵,当你查看它们的指向时,你看到的都会是Jeff。
更多Jeff Dean的段子集,还可移步Quora上的「谷歌大神Jeff Dean有多牛」合辑:
https://www.quora.com/What-are-all-the-Jeff-Dean-facts