我是如何成为一名机器学习从业者 – Greg Brockman

这篇文章讲述了作者在OpenAI的前三年里梦想成为机器学习专家的经历。尽管最初进展缓慢,但在过去的九个月里,他终于成功过渡成为一名机器学习从业者。文章强调,成为一名机器学习专家不是不可能的任务,尤其对于那些优秀的程序员,只要他们了解或愿意学习相关的数学知识。作者提到,自学技术方面有许多在线课程可供选择,但他面临的最大障碍是心理屏障——接受再次成为初学者的现实。

文章还描述了作者在OpenAI的早期工作经历,包括参与OpenAI Gym和Universe项目,以及后来转向Dota项目。在Dota项目中,作者感受到了因为只能从软件视角看问题而带来的局限性,这促使他渴望学习机器学习以获得更全面的理解。

2017年,作者开始从事一项利用行为克隆教授神经网络的机器学习项目。尽管过程中遇到了挫折和挑战,他最终克服了对成为初学者的恐惧,开始自学并逐渐掌握机器学习的基本知识和技能。在个人生活中,他的伴侣给予了他在学习过程中的支持,这也成为他坚持下去的重要因素。

文章的后半部分着重讲述了作者自学机器学习的过程,包括选修与自然语言处理相关的课程、阅读论文和理解机器学习模型。通过不断的努力和实践,作者逐渐理解了整个机器学习模型,并开始在实际项目中应用所学知识。

文章最后,作者鼓励其他软件工程师也可以成为机器学习工程师。他强调,在机器学习的学习过程中,围绕自己的专家非常重要。他以自己的经历为例,指出加入像OpenAI这样的团队可以让人受益匪浅。

在OpenAI的前三年里,我梦想成为一名机器学习专家,但在实现这一目标上几乎没有取得任何进展。在过去的九个月里,我终于成为了一名机器学习从业者。这是一段艰难但非不可能的旅程,我认为大多数优秀的程序员,如果了解(或愿意学习)相关数学知识,也能做到。有许多在线课程可以自学技术方面的知识,而我最大的障碍原来是一个心理屏障 —— 接受自己再次成为初学者的事实。

2018年假期期间学习机器学习。

早期经历 #

OpenAI的一个创立原则是,我们同等重视研究和工程 —— 我们的目标是构建能解决以前不可能完成的任务的工作系统,所以我们需要两者兼备。(事实上,我们的团队由25%主要使用软件技能的人、25%主要使用机器学习技能的人和50%同时使用这两者的人组成。)所以从OpenAI成立的第一天起,我的软件技能一直很受欢迎,我一直在拖延学习我想要的机器学习技能。

在帮助构建OpenAI Gym之后,我被召去参与Universe项目。当Universe接近尾声时,我们决定开始致力于Dota项目 —— 在进行任何机器学习之前,我们需要有人将这款游戏转变为一个强化学习环境。

Dota #

将这样一个复杂的游戏转化为一个没有源代码访问权限的研究环境是令人振奋的工作,每当我克服一个新的障碍时,团队的兴奋都给了我极大的认可。我想出了如何打破游戏的Lua沙盒,LD_PRELOAD进入一个Go GRPC服务器以程序化控制游戏,逐步将整个游戏状态转储到Protobuf中,并构建了一个Python库和抽象,以适应我们可能想要使用的许多不同的多代理配置。

但我感觉自己半盲。在Stripe,虽然我倾向于基础设施解决方案,但我可以在整个技术栈中进行更改,因为我对产品代码了如指掌。在Dota中,我被限制在用软件视角看待所有问题,这有时意味着我试图解决一些通过稍微不同的机器学习就可以避免的难题。

我希望能像我的团队成员Jakub Pachocki和Szymon Sidor那样,他们提出了推动我们Dota机器人核心突破的想法。他们质疑了OpenAI内部的普遍看法,即强化算法不具备扩展性。他们编写了一个名为Rapid的分布式强化学习框架,并每两周左右将其指数级扩展,我们从未遇到障碍。我希望能够像他们那样做出结合软件和机器学习技能的关键贡献。

西蒙在左边;右边是雅各布。

2017年7月,看起来我可能有机会做到这一点。软件基础设施已稳定,我开始从事一项机器学习项目。我的目标是使用行为克隆从人类训练数据中教授神经网络。但我并没有为自己会感到像初学者一样准备好。

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

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

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

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

暂停 #

2018年在国际比赛中输掉两场比赛后,大多数观察者认为我们已经达到了我们的方法所能做到的极限。但我们从我们的指标中知道,我们正处于成功的边缘,主要需要更多的训练。这意味着对我的时间要求放松了,到2018年11月,我感觉我有机会用三个月的时间进行一次冒险。

在国际邀请赛首场比赛失利后,队员们精神抖擞。

我在有具体目标要构建的情况下学习最好。我决定尝试构建一个聊天机器人。我开始自学我们为Fellows计划开发的课程大纲,只选择与自然语言处理相关的模块。例如,我编写并训练了一个LSTM语言模型,然后是基于Transformer的模型。我还阅读了信息论等主题,并阅读了许多论文,仔细研究每一行,直到我完全吸收了它。

进展缓慢,但这次我有所预期。我没有经历流动状态。我想起了我刚开始编程时的感觉,我一直在想要达到掌握的感觉需要多少年。老实说,我不确定自己是否会擅长机器学习。但我继续努力,因为……老实说,是因为我不想仅限于理解项目的一部分。我想清楚地看到整个画面。

我的个人生活也是让我坚持下去的重要因素。我开始与一个让我觉得即使我失败也没关系的人建立了关系。我在我们一起度过的第一个假期季节里,一直在努力克服机器学习障碍,但无论我们错过了多少计划好的活动,她都一直陪伴着我。

一个重要的概念性步骤是克服了我在Dota时太过胆怯而未能做到的障碍:对别人的机器学习代码做实质性的改变。我在我找到的聊天数据集上对GPT-1进行了微调,并添加了我自己的原始采样代码。但当我尝试生成更长的消息时,它变得非常缓慢,我的挫败感战胜了我的恐惧,我实施了GPU缓存 —— 这个更改涉及了整个模型。

我尝试了几次,抛弃了我的更改,因为它们超出了我能够理解的复杂性。几天后,当我让它工作时,我意识到我学到了一些我之前认为不可能的东西:我现在明白了整个模型是如何组装在一起的,直到代码库优雅地处理TensorFlow变量作用域这样的小的风格细节。

重新装备 #

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

伊利亚在我们公司场外唱卡拉 OK。

我们开始取得非常激动人心的结果,Jakub和Szymon加入了该项目的全职工作。每当我看到他们在我开始的机器学习代码库中的提交时,我都感到自豪。

我开始感到能干,尽管我还没有达到精通。我能够专注于进行机器学习工作的时间与我历史上的编码时间相比,现在约为75%。

但这是我第一次感觉自己处于正确的轨道上。起初,我被看似无穷无尽的新机器学习概念所淹没。在最初的六个月内,我意识到我可以在不断学习全新原语的情况下取得进展。我仍然需要在许多技能上获得更多经验,比如初始化网络或设置学习率计划,但现在的工作感觉是增量的,而不是潜在的不可能。

从我们的Fellows和Scholars项目中,我知道拥有线性代数和概率的坚实基础的软件工程师只需几个月的自学就可以成为机器学习工程师。但不知何故,我说服了自己,我是个例外,无法学习。但我错了——即使在OpenAI中,我也无法实现转型,因为我不愿意再次成为初学者。

你可能也不是例外。如果你想成为一名深度学习从业者,你可以。你需要给自己提供失败的空间和时间。如果你从足够多的失败中学习,你就会成功——而且可能比你预期的时间要少得多。

在某个时候,让自己身边有现有的专家变得非常重要。在这一点上,我非常幸运。如果你是一位优秀的软件工程师,达到了这一点,请记住有一种方式可以让你像我一样被这些人包围 —— 申请加入OpenAI!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注