• OpenAI联合创始人Greg Brockman:我从传统软件工程师转向机器学习领域的心路历程
  • 发布于 2个月前
  • 199 热度
    0 评论
  • 遥歌
  • 2 粉丝 35 篇博客
  •   
本篇文章发表于 2019 年 7 月份,作者是 OpenAI 联合创始人兼总裁 Greg Brockman,在加入 OpenAI 之前,Greg 是 Stipe CTO,专长是软件后端基础设施与架构。在 2019 年之前 Greg 几乎不懂机器学习,本文讲述了 Greg 从传统软件工程师转向机器学习领域的心路历程。他和我们普通人一样在学习机器学习过程中遇到了很多障碍,也一度情绪低落,没有信心,但最后克服困难,坚持了下来。

我们一起来学习下 Greg Brockman 的这篇文章。

在 OpenAI 的最初三年里,我梦想着成为一名机器学习专家,但是在通往这个目标的道路上一直没有取得太大进展。但是在过去九个月中,我终于转型成为了一名机器学习实践者。这个过程虽然困难,但并非不可能,我相信大多具有良好编程能力且了解(或愿意学习)数学的人都能做到这一点。网上有很多课程可以自学,而我最大的障碍实际上是心理屏障 —— 接受自己重新成为初学者。

一.初期
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 的分布式强化学习框架,并大约每两周就将其规模成倍增长,我们从未碰到过任何问题。我希望能够像他们那样做出结合软件和机器学习技能的关键贡献。

2017 年 7 月,我的机会来了。软件基础设施已经稳定下来,我开始着手一个机器学习项目。我的目标是使用行为克隆技术来教会一个神经网络如何从人类训练数据中学习。但我没准备好让自己作为初学者来学习。

我经常因为一些小的工作流程细节感到沮丧,这让我不确定自己是否在取得进步,例如不确定特定实验使用了哪些代码,或意识到我需要对比上周的一个结果,而那个结果我没有妥善保存。更糟糕的是,我不断发现一些小错误,这些错误从一开始就影响着我的结果。

我对自己的工作缺乏信心,更糟糕的是,其他人却对我充满信心。人们会提到从人类数据中进行行为克隆有多么困难。我一遍又一遍的跟他们解释,我是个新手,这可能更多地反映了我自己的能力,而不是问题本身。

当我的代码被整合到机器人中时,一切瞬间都变得值得,因为 Jie Tang 使用它作为 creep 阻挡的起点,然后通过强化学习进行了微调。但很快,Jie 找到了一种不使用我的代码就能取得更好结果的方法,我的努力似乎变的一文不值。从那以后,我再也没有在 Dota 项目上尝试过机器学习。

三.暂停
2018 年,在国际邀请赛中我们连续输了两场比赛,大多数观察者认为我们的方法已经达到极限。但我们根据自己的数据指标知道,我们其实正处于成功的边缘,主要还是需要更多的训练。这意味着我时间上的压力减轻了,到了 2018 年 11 月,我感觉我有机会用三个月的时间来冒险尝试。

我学习最有效的方式是要有一个具体的构建目标。我决定尝试构建一个聊天机器人。我开始自学我们为 Fellows 项目开发的课程,只选择与自然语言处理相关的模块。例如,我编写并训练了一个基于 LSTM 的语言模型,然后是一个基于 Transformer 的模型。我还研究了信息论等主题,并深入阅读了许多论文,直到我完全理解了每一行内容。

虽然进展缓慢,但这次我有所准备。我并没有体验到那种心流状态。这让我想起我刚开始学习编程时的感觉,我一直在想花了多长时间才达到精通的感觉。说实话,我不确定自己是否能在机器学习领域变得优秀。但我继续前进,因为…… 坦白说,我不想仅仅局限于理解项目的一部分。我想清楚地看到整个画面。

我的个人生活也是我坚持下去的重要因素。我的伴侣让我觉得即使失败了也没关系。我们在一起的第一个假期,我都在机器学习的难题上挣扎,但不管我们错过了多少原本计划好的活动,她都一直陪伴在我身边。

这时迎来了一个重要的概念性突破,我克服了之前在 Dota 项目中因过于胆怯而未曾尝试的障碍:对别人的机器学习代码做出实质性的更改。我在我找到的聊天数据集上对 GPT-1 进行了微调,并添加了自己的简易采样代码。但当我尝试生成更长的消息时,过程变得非常缓慢,这种挫败感甚至超过了我的恐惧,我实施了 GPU 缓存 —— 这个更改影响了整个模型。

我尝试了几次,由于更改的复杂性超出了我能够理解的范围,我放弃了我的更改。几天后,当我最终让它工作时,我意识到我学到了一些之前认为不可能的东西:我现在了解整个模型是如何构建的,甚至包括代码库如何巧妙地处理 TensorFlow 变量范围的小细节。

四.重新出发
经过三个月的自学,我感到自己已经准备好参与一个真正的项目了。这也是我首次感觉到能够从 OpenAI 众多专家的指导中受益,当 Jakub 和我的联合创始人 Ilya Sutskever 同意指导我时,我非常高兴。我们开始取得非常令人兴奋的成果,Jakub 和 Szymon 全职加入了这个项目。每当我看到他们在我发起的机器学习代码库中提交的内容时,我都感到非常自豪。

虽然我还没有达到精通的水平,但我开始感到自己有能力了。这一点体现在我能够激励自己专注于机器学习工作的时间上 —— 现在我写代码的时间大约为我之前的 75%。

但这是我第一次感觉自己正处于正确的轨道上。最初,我被无尽的新机器学习概念淹没。在最初的六个月里,我意识到,我可以在不断学习全新的基础概念的情况下取得进步。我仍需要在许多技能上积累更多经验,比如初始化网络或设置学习速率计划,但现在的工作感觉是逐步前进,而不是可能无法实现。

通过我们的 Fellows 和 Scholars 项目,我知道拥有线性代数和概率基础的软件工程师可以通过几个月的自学成为机器学习工程师。但不知为什么,我曾自认为是个例外,认为自己无法学习。但我错了 —— 即使身处 OpenAI 的核心,我之所以无法转型,是因为我不愿意再次成为初学者。

你也可能不是个例外。如果你想成为深度学习实践者,你完全可以做到。你需要给自己留出失败的空间和时间。如果你从足够多的失败中学习,你最终会成功 —— 而且可能比你预想的要快得多。

在某个阶段,将自己置于现有专家的环境中确实很重要。在这方面,我非常幸运。如果你是一名出色的软件工程师并达到这一点,记住有一种方法可以让你和我一样被同样的人围绕,那就是申请加入 OpenAI!
用户评论