Code前端首页关于Code前端联系我们

什么是深度学习?卡内基梅隆大学博士告诉你

terry 2年前 (2023-09-23) 阅读数 386 #AI人工智能

这篇文章 作者李沐,前百度员工,大规模机器学习和优化算法专家,在其他人不断在职场上进步或创办金公司的时候,他却坚定了自己的决心。我选择了一条不同的道路:我去了卡内基梅隆大学(CMU)学习博士和亚历克斯·斯莫拉的专家机器,并在那里呆了五年。

他今天在知乎上发表文章说:“人的一生要工作五十年,为什么要花五年时间去追求自己的理想和感情呢?”没有耽搁,博士作完最后的汇报后,我终于毫无留恋地登上了回家的航班。

他说:“回顾过去的五年,是战争的五年,也是自尊、提升的五年。五年前的想法,希望对大家有帮助。以下是他八千多字的长文,希望对每一个读到它的人有所启发,让自己的感受和理想更加完整。

前言

2012年8月,我抵达匹兹堡机场一个行李箱,找不到住宿的地方,也不知道怎么去CMU,对未来感到迷茫,但又充满希望。现在,我刚刚完成博士时代的期末报告。我在同一个机场,等待航班起飞。

回望过去的五年,是一段煎熬的五年。是一年,但也是自我认识的一年。在这里,我尝试记录一下这五年来我所做的重要事情和我的想法,希望对大家有所启发。

0年:3/11-8/12

11年来第一次申请美国博士学院,但是收到的offer没有最合适的老师,所以就去了北方。加入文源。 。我对百度的企业搜索服务做了一些广告点击预测。一般来说,机器学习用于预测用户是否会点击广告。当时“大数据”这个词还没有流行两年,但当时的百度数据至今仍然庞大。我的工作是如何高效地使用数百台机器在数十 TB 的数据上快速训练模型。

当时产品使用的算法是基于LBFGS的,所以我就想是否可以改成收敛速度更快的算法。几天后我就找到了一个好东西。但在实现过程中发现了性能、收敛性、稳定性等方面的问题。当时可用的是裸露的 Linux 和非常旧版本的 GCC,一切都必须从头开始编写。我花了很多时间改进系统、改算法、上线测试,终于在一年后上线获得满量广告流量。

现在回想起来,我发现我花了一整年的时间调整各种细节,有时花费数千行代码只是为了提高 5% 的性能。这一切都导致算法过于复杂和定制化。但深入到各个细节提高了自己的技术,遇到的很多问题也成为了后续研究方向的来源。这里写了一些算法思维。当时深度学习刚刚出来,我觉得这应该是大机器学习的未来。然而,几年后,它才真正开始流行起来。

2011年12月中旬,我无奈再次寄出材料,选择了CMU和MIT。结果,我意外地收到了CMU的offer。有一天,我和凯哥(于凯饰)、童哥(张童饰)在百度咖啡馆吃饭。我说我已经接受了CMU的offer,正在考虑去还是不去。他们立即表示将与 Alex Smola 交谈,他将加入 CMU,我们将把他介绍给您。

我记得出发前一天我就开始收拾行李了。早上去公司开会,中午下班,跟朋友们道别,让他们出去走走,然后赶往机场。那天北京的天气太好了,我什至不记得前一天的雾霾笼罩着天空。

第一年:9/12-8/13

第一年最重要的是适应环境和上课。 CMU课程相当重。博士需要八科,每一科的负担都是巨大的。此外,我还需要担任两门课程的助教。当助教比上课还累。

今年我学过的最有用的课程是《高级分布式系统》。当我加入ACM班时,我已经学了很多精品课程,知识型课程对我帮助不大。但这门课主要是阅读论文,然后讨论它们。这不仅仅是知识,更是对设计概念的理解。众所周知,对于系统来说,设计是一门艺术,而不是一门科学。这是美学和哲学观念的体现。同时,系统世界的历史也包含着一波又一波的趋势。了解历史的发展和重复模式非常重要。

当年教授这门课的教授是张辉(20多岁在CMU任教的伟人之一,他的学生包括Ion Stoica,他就是Spark的导师作者马泰)。他的态度总体上是积极的。 ,对“为什么”这个问题的解释很好。通过这门课程,我对分布式系统有了更清晰的了解。两年后,我无意中发现我的一篇论文出现在这门课程的阅读清单中,这算是一个小小的成就。

除了上课,最重要的是做研究。当我去卡内基梅隆大学时,亚历克斯还在谷歌,没有钱,所以他离开我去了戴夫·安德森。所以我有两位导师,一位负责机器学习,一位负责分发系统。

上半年是一个互相认识的过程。我们每周聊一小时。上半年Alex不在,所以我们就只拍视频。亚历克斯的辨识度常常不好,而且他有德国和澳大利亚口音,走神。大多数时候我听不懂他们在说什么,他们只是可爱地尖叫。我仍然依靠戴夫不断打字来告诉我亚历克斯在说什么来完成前几次会议。

两位老师各有风格。亚历克斯的速度非常快。通常当你说某件事的时候,你心里就已经想到了接下来的十点。很难跟上他的节奏。通常当出现问题的时候,他已经想到了好几种解决办法。如今,要证明你的想法比他们的好并不容易。这需要大量的沟通和实验数据支持。我认为我花了大约两年的时间来证明我的解决方案在某些方面总体上更好,所以现在它不再需要手动操作。

Dave 不会给出很多想法,但他会帮助理解一些东西并解释清楚。因为我的研究方向主要是机器学习,所以前两年,我教Dave什么是机器学习,我尽量不使用公式化的教学方法。

我的第一项研究工作是关于如何分离数据和计算以减少机器学习解决方案中的网络流量。 Alex展示了他的优势,并在几分钟内总结了优化问题中的问题,然后我们三个提出了解决方案。我做了一些测试,发现戴夫的算法更好。接下来的两个月,我对算法做了很多改进,然后做了一些理论分析,写了论文。

不幸的是,这个想法似乎还为时过早。虽然写得一再改进,但是发过几次会议的审稿人都看不懂,或者认为这个问题不重要。当时学术界就开始吹嘘“大数据”,但我想大多数人都不懂,或者说他们的“大数据”还是几GB大小,煮USB也要十分钟。闪存盘。

这是我在 CMU 的工作。我认为它非常有用,但这是我唯一没有发布的。

当时和我坐在同一个办公室的人是彭理查德。他做了理论研究。我经常和他讨论问题,然后提出一些想法并共同完成一个项目。总体思路是实现一种快速的图压缩算法来低估矩阵。我在没有进行实验的情况下为这项工作写了三十页的公式。我主要将其作为编写代码之间的爱好,但我很幸运获得了 FOCS。

说实话,我不是特别喜欢纯理论。比如在债券的证明中,很多词都是直接抛出来的,这让我感觉债券是一个特殊的估计。对于体制内工作的人来说,最不争的就是不变。我觉得这项工作的笼统方法非常不可靠。所以我觉得我们以后应该做一些更实际的事情。

在CMU,我回到了去百度之前每周工作7天的节奏。每周至少在学校呆 80 小时。如果你累了,就去健身房吧。我一般都是晚上12点去。不只是我,每个人都在努力,比如一大早去健身房,凌晨3点去办公室,到处都是中国或印度的学生。我当时的室友田元东华在学校的时间比我多。

这段时间看了很多关于改进的文章。给我启发最大的是Bertsekas在1980年代末写的关于分布式计算的书,这本书也算是对MIT控制领域黄金研究成果的总结,而且还算准时。

我受到启发去研究异步算法,这意味着在分布式环境下无法保证数据的时效性来提高系统的性能。我根据自己在百度做的算法做了优化和理论分析,然后使用了NIPS。

申请了NIPS后,我就去Google Research实习。当时,谷歌大脑成立不久。在“宇宙的答案”的42层,聚集了杰夫·迪恩、杰弗里·辛顿、普拉巴卡尔·拉加万等众多大咖,他们信件的评论加起来超过了80万条。

Alex 让我阅读 Jure Leskovec 的文章,了解别人如何讲故事。我还尝试使用一些用户 GPS 数据来模拟 Google 上的用户行为。但当我写文章的时候,我无法写出Jure所拥有的故事的想法,我意识到我不是材料。因为这篇文章使用了用户数据,所以和斯诺登有重叠,让大家意识到了隐私的重要性。经过一番周折,在谷歌允许发布之前,一半的结果被删除了。有点累,不被爱。

但在 Google 期间,我大部分时间都花在学习内部代码和文档上。谷歌的基础设施很好,文档也很好。虽然没有直接学到什么,但至少让我开阔了眼界。

第二年:9/13-8/14

这学期我学习了Tuomas Sandholm的机械设计。这是另一个大师。例如,他最近在德州扑克中战胜了一位职业选手。他还出售了数亿的前公司。 。可我根本就听不懂这门课,甚至连答应的大作业都没有做完。接下来的两年里,每次我见到Tuomas,他都会问是否有任何进展。他只能远远地看到他,并避开她。

NIPS 被拒绝了,看到审稿人不明白线程和进程之间的区别,我有点恼火。隔壁实验室的一篇论文有类似但更简单的想法,被口头表达了,所以我当时很紧张。 Alex鼓励他说这样的事情经常发生,所以他应该放轻松,然后又举了很多自己的例子。

想了想,一篇好的文章需要有足够的“干信息”,或者说信息量,但是一篇可以接受的文章需要满足以下公式:

文章/文章的信息量

对于机器学习会议,由于投稿数量多,审稿人多,平均数会自动下降。而且,很多分析师要花半个小时到一个小时的时间来阅读文字,所以公式右边的数值往往很小,超出了我们的控制范围。

如果文本包含的信息很少,例如对以前工作的改进或简单的新想法,那么准确的概率非常高。对于包含大量信息的文本,需要努力提高可读性,包括提出明确的问题、解释上下文等。相关专业知识不够,而我们填写的干巴巴的信息太多,让大家一头雾水。

即使是发表的文章,也可以用上面的公式来衡量论文的引用率。例如,经常会看到一些有用信息很多的文章没有被很多人引用,但同时有的作品却比简单的案例研究被引用的次数还多。

在接下来的六个月里,我将致力于一个通用的分布式机器学习框架,希望能够为以后的实验提供便利。该名称是参数分隔符,遵循 Alex 在其 10 年论文中建议的名称。我花了很多时间设计界面,制作应用程序的多个版本,并在工业规模上进行广泛的测试。

但真正花了我很多时间的是写论文。我们的目标是将这项工作献给 OSDI,这是系统行业的两大会议之一。我们希望分析师们能够像两年前 Dave 一样,不会有太多的机器学习和数学知识,因此他们需要使用尽可能少的公式。写这封信花了整整一个月的时间。 14 页的文本充满了文字和图表。但努力没有白费,这封信最终被接受了。然后花了几周的时间准备会议报告。与花一周写信、两三天准备报告相比,这次我的写作和报告能力有了很大的提高。没有收录的公式和定理提交到了下一届NIPS,这次我有幸获奖。

收到文章后心情平静了,做事也更自如了。

寒假回国,去百度找凯哥和童哥。童哥说他最近有一个想法,所以他快速做了一个实验,然后写了一封信提交给KDD。与此同时,学生 Alex 提出了一个他一直希望我做的 KDD 想法,但我觉得这个小计划不值得我花时间。结果,他获得了最佳论文。我报案的那天,现场只有几个人,但旁边却挤满了人。这就是为什么我很长一段时间都想知道跟随我的导师是否会更好。

当时凯哥在百度青训教练项目工作,觉得合适就加入了。当时凯哥带领一帮兄弟积极参与深度学习,所以我肯定是掉进了陷阱。在尝试了几种想法之后,我认为分布式深度学习框架是我最喜欢的。我选择CXXNet作为起点,主要是因为我了解天齐。与此同时,我开始做一些像Alexnet这样的实验。

得益于少帅计划,我开始从事与深度学习相关的项目。凯哥也支持我推动开源来回馈社区,而不是只在公司内部做产品。但我当少帅期间却没有为公司做任何事,我真的很惭愧。

第三年:9/14-8/15

回到CMU后,Alex看到深度学习很流行,就说应该买个GPU来玩玩。但我们很穷,所以我们不能只去newegg 获得销售。就开始了抛机的艰苦历程。这一年里我感觉我买了又买又放了。最后我们大概花了几万块钱搭建了一个80块GPU的集群,现在想来,浪费时间是不值得的,而且便宜买不同的硬件导致成本很高。但我当时很享受。具体细节你可以阅读这篇博客。很难说它有多成功。现在想来,有几个原因。当我编写代码时,我会优先考虑性能并支持大多数机器学习算法。但与之前的错误一样,代码破解被忽略了,因此只有少数人可以获得代码并进行开发。例如,我尝试让Alex组的学生使用这段代码,但是异步和各种回调让他们很难理解。其次,没有人可以一起审查代码关系,这使得这些关系带有浓厚的个人色彩,很难让每个人都简单明了。

不过幸运的是,我找到了一群志同道合的朋友。我第一次看到天奇写了xgboost的分布式启动脚本。我看到很有用,就跟他聊了起来。经过讨论,我发现有很多启动脚本、读取文件等基础组件可以用于多个项目,而不是为每个项目造轮子。于是他和田七在Github上创建了一个叫DMLC的组织来加强合作和交流。第一个项目是 dmlc-core,其中包含初始化和数据读取代码。

DMLC 的第二个新项目称为虫洞。这个想法是提供一系列分布式机器学习算法,这些算法使用或多或少相同的配置参数来统一用户体验。我把机器学习相关的算法转移到了参数服务器上,天奇则转移到了xgboost上。参数服务器的第一个系统代码已被确认为ps-lite。

一开始,我听百度的同事说,机器分解(FM)对于广告数据效果很好,所以我把它应用到蠕虫上,就这样。我对发行版做了一些改进并选择了 WSDM。甚至不到一个月,我就奇迹般地被分配到了最佳论文。

蠕虫开发过程中发现的问题是算法不同。他们可以共享一些代码,但是他们有自己的特点,需要特殊的优化才能确保他们的成功。这使得维护变得困难,例如,更改共享代码需要检查整个项目。总之我觉得一个项目做一件事比较好。于是天齐把xgboost的代码放回到原来的项目中,同时我也将FM分离到一个叫difacto的项目中。

通过几个项目,我了解到的一件事是,以当今的人员配置水平,很难构建通用且高效的分布式机器学习系统。更有可能的是为同类型的机器学习算法做一个目标项目。本项目的界面必须兼容此类算法结构,使学生能够轻松了解算法的发展,而不需要了解太多基本结构的信息。

真正发展DMLC社区的项目是第三个,叫做MXNet。当时的概念是CXXNet已经达到了一定的成熟度,但其潜力有限。用户只能通过元素来定义模型,而不能通过交互程序来定义。 Minerva 是 zz 和 Agile 开发的另一个项目。它是一个类似于numpy的交互式编程接口,但是这种灵活的接口给稳定性和性能优化带来了很多挑战。我同时为两个项目做拆分扩展,对两者都有很好的理解。于是就有一个很自然的想法,把两个项目结合起来,取长补短不是很好吗?

这两个项目的创建者都打电话给我进行了几次讨论,我得到了一些粗略的想法。新项目名为 MXNet,可以称为混合网络,它是之前两个名称(Minerva 和 CXXNet)的组合。离开一个已经发展了多年的项目并不容易,但幸运的是,朋友们愿意努力做到最好,所以 MXNet 进展顺利。很快第一个工作版本就可用了。

第四年:9/15-8/16

上半年我为difacto和MXNet写了很多代码。说实话,一开始我认为双折更重要。毕竟它改进了线性算法,额外的计算开销并不大。这将极大地改善预测广告等应用。但当我第一次见到吴恩达时,我告诉他我正在一起做这两个项目,他立即告诉我我应该把所有的精力集中在 MXNet 上,因为这个地方就是从那里来的。我一直很喜欢安德鲁的远见,所以我听取了他的建议。

11 月份,MXNet 取得了很多成果。我写了一篇短论文并将其提交给 NIPS 研讨会,这让我得到了休息。但我听说TensorFlow(TF)开源了。由 Jeff Dean 领导的全职工程师团队构建,并得到 Google 庞大搜索引擎的支持,难怪它成为最受欢迎的深度学习平台。 TF不断给我们发力,我们的一些核心开发人员已经转投TF了。然而,在TF让我意识到不要太在意对手,专注于提升自己。

NIPS期间,MXNet的朋友聚会一次,我还是第一次见到他们。随后GTC Nvidia邀请我们进行报道。这两次之间,每个人都玩得很开心,并取得了很多进步。与此同时,用户也在不断增长。我们一直觉得MXNet是一个小型的开发团队,所以快速开发新事物是一个优势。然而,随着用户数量的增加,我们收到了一些投诉,称开发速度太快,导致许多模块兼容性问题。我也思考了一段时间,需要在新技术开发的速度和准确性之间进行权衡。

那时候大数据已经不是一夜之间流行起来了,大家都在谈论深度学习。

我也花了很多精力来推广 MXNet 和吸引开发者。这包括微博、知乎上的沸沸扬扬,到处都有报道。点赞的数量让我有些陶醉,但这么多的批评让我意识到重要的是,我们应该真诚地分享,而不是吹牛。

由于大众传媒的影响,整个深度学习有一种娱乐化的倾向。许多娱乐报道只是简单的信息和(有偏见的)观点,没有实际信息。不仅不利于别人,而且对自己也充满了虚荣心。与其写这些简单的水文学,不如静下心来做一篇深入的文章,包括技术细节、设计思路和经验。

这种分配方式的一个容易的误解是只关注你的成就和良好的结果。这些确实可以证明一个人的能力,对于那些想要重复这项工作的人来说会有很大的帮助。但更多人关心的是应用领域,即在什么条件下效果会弱;为什么产品好;真相是什么?它需要更深入的理解和思考,而不仅仅是展示结果。

写文章也是如此。仅仅说你的结果比基线好只是意味着这是一项很好的工作,但无论结果有多好,并不意味着工作是深入的。

深度学习的普及导致了高收入初创公司的稳定收购。 Alex实在受不了了,于是他和Dave、Ash(雅虎前CTO)和我合伙创办了一家公司,有几十万的天使投资来创办公司。 Alex 编写了爬虫,Dave 编写了系统,我运行了模型。我们辛苦了一段时间。不幸的是,戴夫(Dave)跑开了,杰夫(Jeff)在中间做TF。该公司后来被出售给一家小型上市公司。后来我们发现这家公司不靠谱,就不再考虑和他们做生意了。

我无法形容我的第一次创业有多成功。我从中学到了一些东西:第一,跟教授创业的时候,要注意不要有太多的想法,也不要拘泥于一个;第二,找一批兼职博士学生创业。这项工作具有很大的不确定性,尤其是在结果不明确的情况下。第三,即使你想卖掉公司,你也必须做出产品。我们卖的时候,很多人觉得团队太强,但产品太弱,所以只想要人。第四,试图用技术,尤其是太新的技术来改变一个非技术型公司是很困难的。

然后我们跑到下一个工厂。 Ash已经财务自由了,所以他想干一番大事,但此时Alex刚刚在湾区买了房子,被迫偿还贷款,所以他选择去亚马逊。所以它一出生就死了。

然后我收到了 Jeff 发来的一封电子邮件,询问他是否有兴趣加入 Google。当然,那是一个激动人心的时刻。当时,我认为创办一家小型的、技术性的企业是一个不错的选择。但考虑到MXNet的发展,去亚马逊是最好的选择之一。你挖的坑总得给你填上。于是我就去亚马逊兼职,带领一帮后辈在AWS上做MXNet开发和深度学习应用。

第五年:9/16-2/17

2015年初,Alex就已经说过我可以毕业了,但作为一个晚期拖延症患者,我并没有开始准备。那时,我意识到我不能再拖延了,所以我留在湾区写我的博士学位。 Alex觉得他的论文应该认真写,但我真的没有兴趣维持我已经做的事情,尤其是加州的阳光很好。我大部分时间都躺在院子里躲避阳光。当时B站完全被小学生占据,在这里买书不太合适。出于沮丧,我查看了许多起点。后来他写了一篇关于炼金术的论文。

CMU 要求安全委员会由 3 名 CMU 教职人员和 1 名校外人员组成。除了两位导师之外,我还见到了刚刚加入 CMU 的 Jeff Dean 和 Ruslan Salakhutdinov。结果,拉斯加入了苹果,整个委员会都在湾区。杰夫开玩笑说他可以去谷歌寻求保护。不幸的是,经过与CMU的多次讨论,校外答辩仍然是不可能的,三个委员会都必须参加。这些限制造成了防守的拖延,巴纳巴斯·波佐斯临时上场弥补了比分。最终,杰夫的助理很快就安排好了时间,安排好了一切。如果没有他,我可能会推迟几个月。

防守的时候,有点奇怪。该委员会中有来自谷歌、亚马逊和苹果的人工智能领导者,另外两人和我在这三家公司兼职。这是当前人工智能领域学术界走向工业界的趋势的体现。

不过,安全性很简单,与普通报告没有什么不同。尽管 Russ 质疑 MXNet 或 TensorFlow 哪个更好,但和平是存在的,但没有战争。

答辩结束​​后我问委员会我正在考虑在学术界找工作,你们有什么建议吗?大家分享了很多经验,但是大家强调的一点是:学术界很忙而且很穷,而工业界的工资(简直是耻辱)是CMU的校长每一分钟都在赔钱。你必须认真思考。

总结

答辩的前一天晚上,我想到了两个问题,一是“博士最大的功德是什么”,二是“如果可以重来一次,他会做什么?”关于第一个问题,过去五年我学到了很多东西。例如,我学习了分布式系统,跟踪了过去五年的机器学习发展,提高了我的写作能力、幻灯片演示和报告能力,还提高了我的编码能力。有点强。我的信心增强了,我感觉我不仅在做一流的研究,而且还在编写与大团队竞争的代码。只要你努力,你的对手就没什么可怕的。

但最重要的是,博士在位的五年可以集中精力让一些东西在技术上变得更好,取得新的进步。这种氛围是其他地方所没有的。

第二个问题的一个选项是如果你留在中国会发生什么?当时百度的大部分合作伙伴都表现不错,引领着这波AI趋势。甚至有几家公司的营收已达数亿。所以如果你看金钱或者影响力,进入这个行业也不错,也许你已经很有钱了。

但我想我还是会选择读博士。赚钱的时间还有很多,但只有一次是有机会在一个领域呆上几年,开始获得技能或者推动这个领域的发展。站在这个领域的高处,你会发现,世界虽然很大,但其他领域其实使用的是同样的技术,有着同样的发展原理。博士在他那个时代学到的学习方法,在各个方面都是非常有用的。

最重要的是理想和感情。人的一生要工作五十年,为什么要用五年的时间去追求自己的理想和感情呢?

什么才是深度学习?卡内基梅隆大学博士告诉你

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门