很早之前看过 OpenAI 总裁 Greg Brockman blog 中的一些内容,觉得不错,这里分享一下这篇 How I became a machine learning practitioner

以下摘要和翻译由 FisherAI Chrome 插件 完成,模型使用 gemini-1.5-pro-latest。

摘要

主要观点

本文讲述了 Greg Brockman 在 OpenAI 的经历,他从一名软件工程师转变为机器学习实践者的过程。文章强调了即使身处机器学习研究的前沿,转变过程依然充满挑战。作者认为,最大的障碍并非技术本身,而是克服成为初学者的恐惧,并允许自己在学习过程中犯错。

关键细节

  • 作者在 OpenAI 的前三年渴望成为机器学习专家,但进展缓慢,主要专注于软件工程工作。
  • 作者参与了 OpenAI Gym、Universe 和 Dota 项目的开发,但受限于软件工程视角,无法深入参与机器学习研究。
  • 作者在 2018 年底决定利用三个月时间学习机器学习,并选择了聊天机器人作为实践项目。
  • 作者通过自学课程、阅读论文和实践项目,逐步克服了成为初学者的恐惧,并最终在机器学习领域取得进展。
  • 作者强调了专家指导的重要性,并鼓励有志于成为深度学习实践者的软件工程师加入 OpenAI。

原文

我如何成为机器学习实践者 • 格雷格·布罗克曼

在 OpenAI 成立的最初三年里,我一直梦想着成为一名机器学习专家,但却在这个目标上几乎没有取得任何进展。在过去的九个月里,我终于转型成为了一名机器学习实践者。这个过程很艰难,但并非不可能,我认为大多数优秀的程序员,只要了解(或愿意学习)数学,都可以做到。网上有很多在线课程可以自学 技术 方面 知识,而我最大的障碍其实是一个心理障碍——接受自己再次成为初学者

gdb-ml1.png 2018 年假期期间学习机器学习。

早期 #

OpenAI 的一项基本原则是,我们同等重视研究和工程——我们的目标是构建能够解决以前不可能完成的任务的实用系统,所以我们需要两者兼备。(事实上,我们的团队成员中有 25% 的人主要使用软件技能,25% 的人主要使用机器学习技能,50% 的人将两者结合使用。) 所以,从 OpenAI 成立的第一天起,我的软件技能就一直很吃香,而我一直拖延着学习我想要的机器学习技能。

在帮助构建了OpenAI Gym 之后,我被要求参与Universe 的工作。随着 Universe 项目的结束,我们决定开始Dota 项目——我们需要有人在任何机器学习开始之前将游戏变成一个强化学习环境。

Dota #

在没有源代码的情况下,将如此复杂的游戏变成一个研究环境是一项非常棒的 工作,每当我克服一个新的障碍时,团队的兴奋之情都让我深受鼓舞。我找到了突破游戏 Lua 沙盒的方法,在一个 Go GRPC 服务器中使用LD_PRELOAD 以编程方式控制游戏,将整个游戏状态增量地转储到 Protobuf 中,并构建了一个 Python 库和抽象,以实现我们可能想要使用的许多不同多智能体配置的未来兼容性。

但我感觉自己像是半盲人。在Stripe,虽然我倾向于基础设施解决方案,但我可以在堆栈的任何地方进行更改,因为我对产品代码了如指掌。在 Dota 项目中,我被限制只能通过软件视角来看待所有问题,这意味着我有时会试图解决一些难题,而这些难题可以通过稍微改变机器学习的方式来避免。

我想成为像我的队友 Jakub Pachocki 和 Szymon Sidor 那样的人,他们取得了核心突破,为我们的 Dota 机器人提供了动力。他们质疑了 OpenAI 内部关于强化算法无法扩展的普遍看法。他们编写了一个名为 Rapid 的分布式强化学习框架,并大约每两周将其规模扩大一倍,我们从未遇到过瓶颈。我希望能够做出像这样结合了软件和机器学习技能的关键贡献。

jakub-szymon-gdb.jpg 左图为 Szymon;右图为 Jakub。

2017 年 7 月,我似乎有机会了。软件基础设施已经稳定,我开始着手一个机器学习项目。我的目标是使用行为克隆,从人类训练数据中训练一个神经网络。但我并没有完全准备好迎接自己再次成为初学者的感觉。

我不断被一些小的工作流程细节所困扰,这些细节让我不确定自己是否在取得进展,比如不确定某个实验使用了哪些代码,或者意识到我需要与上周没有正确存档的结果进行比较。更糟糕的是,我不断发现一些小错误,这些错误一直在破坏我的结果。

我对自己的工作没有信心,但更糟糕的是,其他人却有信心。人们会提到从人类数据中进行行为克隆有多么困难。我总是确保通过指出我是一个新手来纠正他们,这可能更多地说明了我的能力,而不是问题本身。

当我的代码被应用到机器人中时,这一切都短暂地感觉值得了,因为 Jie Tang 将其用作了爬行阻塞的起点,然后他用强化学习对其进行了微调。但很快 Jie 就找到了不用我的代码就能获得更好结果的方法,而我的努力却一无所获。

我再也没有在 Dota 项目中尝试过机器学习。

暂停 #

在我们 2018 年在国际邀请赛上输掉了两场比赛后,大多数观察者认为我们已经达到了 我们方法所能达到的极限。但我们从指标中得知,我们离成功只有一步之遥,主要需要更多的训练。这意味着我对时间的需求已经减少,在 2018 年 11 月,我觉得自己有机会用三个月的时间来赌一把。

ti-elevator.png 在国际邀请赛上输掉第一场比赛后,队员们仍然兴致高昂。

当我心中有一个具体的目标要构建时,我学得最好。我决定尝试构建一个聊天机器人。我开始自学我们为研究员 项目开发的课程,只选择与 NLP 相关的模块。例如,我编写并训练了一个 LSTM 语言模型,然后又训练了一个基于 Transformer 的模型。我还阅读了信息论 等主题的资料,并阅读了许多论文,仔细研究每一行,直到完全理解为止。

这是一个缓慢的过程,但这一次我预料到了。我没有体验到心流状态。这让我想起了我刚开始编程时的感觉,我一直在想,要达到精通的感觉需要多少年。老实说,我不相信自己有朝一日能精通机器学习。但我一直在努力,因为……嗯,老实说,因为我不想被限制只理解我项目的一部分。我希望清楚地看到全局。

我的个人生活也是我坚持下去的一个重要因素。我开始和一个让我觉得即使失败也没关系的人交往。我们一起度过了第一个假期,我一直在绞尽脑汁地学习机器学习,但她一直陪伴着我,无论这意味着要放弃多少计划好的活动。

一个重要的概念步骤是克服我在 Dota 项目中一直不敢做的事情:对别人的机器学习代码进行实质性的修改。我在我找到的聊天数据集上微调了GPT-1,并做了一个小小的改动,添加了我自己编写的朴素采样代码。但当我试图生成更长的消息时,它变得非常缓慢,我的沮丧感战胜了我的恐惧,我实现了 GPU 缓存——这一改动触及了整个模型。

我不得不尝试了好几次,因为我的改动超出了我脑海中所能掌握的复杂度,所以我放弃了这些改动。几天后,当我终于让它工作起来时,我意识到我学到了一些我以前认为不可能的东西:我现在理解了整个模型是如何组合在一起的,甚至是一些小的风格细节,比如代码库如何优雅地处理 TensorFlow 变量作用域。

经过三个月的自学,我觉得自己已经准备好参与一个实际项目了。这也是我第一次感觉到我可以从 OpenAI 的众多专家那里获益,当 Jakub 和我的联合创始人 Ilya Sutskever 同意指导我时,我感到非常高兴。

ilya.png Ilya 在我们公司的户外活动中唱卡拉 OK。

我们开始得到非常令人兴奋的结果,Jakub 和 Szymon 全职加入了这个项目。每当我在我启动的机器学习代码库中看到他们提交的代码时,我都感到自豪。

我开始觉得自己很有能力了,尽管我还没有达到精通的程度。我从自己能激励自己专注于机器学习工作的小时数中看到了这一点——我现在大约是我过去 编码小时数的 75%。

但这是我第一次觉得自己走上了正轨。起初,我被看似无穷无尽的新机器学习概念所淹没。在最初的六个月里,我意识到我可以在不不断学习全新基本概念的情况下取得进展。我仍然需要在许多技能方面获得更多经验,比如初始化网络或设置学习速率计划,但现在这项工作感觉是循序渐进的,而不是不可能完成的。


从我们的研究员和学者项目中,我知道,只要有几个月的自学,拥有扎实的线性代数和概率论基础的软件工程师就可以成为机器学习工程师。但不知何故,我说服了自己,我是一个例外,无法学习。但我错了——即使身处 OpenAI 的核心,我也无法完成转型,因为我不愿意再次成为一个初学者。

你可能也不是例外。如果你想成为一名深度学习实践者,你可以做到。你需要给自己空间和时间去失败。如果你从足够多的失败中吸取教训,你就会成功——而且所需的时间可能比你预期的要少得多。

在某种程度上,让自己身边有现有的专家是非常重要的。这就是我非常幸运的地方之一。如果你是一位优秀的软件工程师,已经达到了这一点,请记住,你有一种方式可以像我一样身边都是同样的人——申请 加入 OpenAI!