转载自 | 智源社区
送新书!《Python深度学习基于Torch/TF(第2版)》,有ChatGPT拓展
导读
由于ChatGPT的广受关注,OpenAI成为了万众瞩目的明星企业。在大语言模型的竞赛中,OpenAI的研究者们是如何脱颖而出的?科研idea从0到1,研究者们经历了哪些思维模式和研究方法的转变?让我们一起回顾研究科学家和创始成员之一John Schulman两年前的一篇博文——机器学习研究指南「An Opinionated Guide to ML Research」,文中详细讲述了从研究问题选择,到实践落地过程中最至关重要的环节。
原文:An Opinionated Guide to ML Research
链接:http://joschu.net/blog/opinionated-guide-ml-research.html
John Schulman
研究科学家、OpenAI联合创始人;加州大学伯克利分校计算机科学博士,师从Pieter Abbeel。现领导强化学习团队,致力于研究使用RL算法来改进GPT等语言模型。
在这篇文章中,根据我多年来做研究和指导研究的经验,我为机器学习领域新入门的研究人员提供了一些建议,这些建议包括如何选择要研究的问题和规划时间。我也推荐以下关于类似主题的文章:
1. You and Your Research by Richard Hamming
https://www.cs.virginia.edu/~robins/YouAndYourResearch.html
2. Principles of Effective Research by Michael Nielsen
http://michaelnielsen.org/blog/principles-of-effective-research
本文将涵盖类似的主题,同时更契合机器学习研究的特点。成功的关键在于解决正确的问题,并在这些问题上不断取得进步,实现持续不断的个人成长。本文由三个部分组成,每个部分涵盖其中一个主题。
▶︎ 选择研究问题
▶︎ 不断进步
▶︎ 个人发展
练习。首先,花几分钟时间谈谈机器学习中的哪些发现和成就对你来说是最有趣和最有用的。思考一下让这些研究成果脱颖而出的原因——是一个突破性的结果改变了你对某个问题的看法; 还是一个可复用的算法;亦或是对一些反复出现的问题的深刻见解。你应该追求产生这种级别的结果、算法和洞察力。
选择要研究的问题
提高你的品味
对于研究者来说,选择正确研究问题的能力甚至比原始技术技能更重要。随着时间的推移,你会发现,这种选择正确问题的品味需要慢慢培养,方式是去观察哪些想法成功,哪些想法被遗忘。在此过程中,你会发现哪些方法是新想法和新成果的基础构件,哪些方法因为太复杂或太脆弱、或增量改进太小而被忽略。
那么是否有一种方法可以加快培养对研究问题选择的好品味呢,事实上有几种好方法。
阅读大量的论文,并进行批判性地评估。尽可能地和对这个主题有更深入了解的人探讨。
与其他研究类似课题的人一起,以研究小组的形式工作。这样可以彼此之间吸收经验。
向经验丰富的资深研究人员寻求建议。研究别人建议的想法并不可耻。想法遍地都是,并不稀奇。选择研究哪个想法,以及执行水平的好坏,决定了你的技能是否会被凸显。
花时间思考什么样的研究是有用的和有成果的,思考下面几个问题:
理论在什么时候是有用的?
实验结果何时可迁移?
为什么有一些方法被广泛采纳,有一些又被遗忘?
你所在领域的趋势是什么? 哪些工作会使其它工作过时?
其中,1到3项涉及研究环境和从其它研究者处获得信息,而第4项是你独自要做的事情。至于,1-3项为什么如此重要,思考一下为何有影响力的工作总是集中在少数研究团体和机构中。
之所以做出有影响力的工作,并不是因为这些人比其他人聪明一大截,而是因为他们拥有更多的专业知识和视角,让他们能够领先于AI社区中的其他人,进而产出了优异的研究结果。即便你没能足够幸运地处在一个高密度的专业知识环境中,也不要绝望。只需加倍努力,争取领先,更重要的是要足够专注,同时发展出自己独特的视角。
想法驱动与目标驱动的研究
粗略地说,关于下一步要研究什么问题,有两种不同的方法来判断。
1. 想法驱动。在文献中寻找答案。如果你看文献时对于「如何处理 X」这个问题萌生了更好的想法,那么就可以开启一个项目来测试新想法;
2. 目标驱动。制定一些你想要实现的人工智能新能力的愿景,并解决实现过程中的各种问题。(下面,我给出了几个我自己的研究实例,其中包括使用强化学习进行三维人形运动的目标。)通过实验,你可以测试文献中各种现有的方法,并开发新想方法来进行改进。
当然,这两种方法并不是相互排斥的。任何机器学习的子领域的研究都与一些目标有关(例如,目标检测)。任何想法驱动的项目都是在朝着该子领域的目标迈进,因此从某种意义上说,想法驱动的研究就是目标驱动的一部分。这里,目标驱动的研究可以理解为,你的研究目标比整个子领域的目标更为具体。这个目标更像是,让 X 首次有效,而不是让 X 效果更好。
我个人建议大多数人进行目标驱动的研究,我自己也大多遵循这个策略。
想法驱动型研究的一个主要缺点是,想法很有可能被抢先,或者撞车。世界各地的研究人员都在阅读相同的文献,所以很容易产生类似的想法。想要在想法驱动的研究中取得突破,就需要对研究的主题有非常深刻的理解,以及一个与其他人不同的视角ーー当然有些人可以做到这一点,但这非常困难。
另一方面,通过目标驱动的研究,你的目标会给你一个与社区其他人不同的视角。它会引导你问出别人从来没有问过的问题,让你能够取得更大的进步。目标驱动的研究也可以更具激励性。你可以每天早上醒来,想象着实现目标的结果会是什么样子,你会有什么感觉。在这种感受的驱使下,就更容易坚持一个长期研究计划,即便中间有磕磕绊绊。目标驱动还可以促使一个研究团队一起工作,解决问题的不同侧面,而想法驱动的研究,团队最好只有1到2个人,进展较为高效。
目标驱动研究的实例: 我在博士期间的工作
在我博士阶段前半部分,目标是让机器人能够操纵可变形的物体,包括能够打结的手术机器人和折叠衣服的家用机器人。虽然这个目标是由我的导师Pieter Abbeel确定作为实验室的主要目标,我对如何实现这个目标形成了自己的看法ーー我的方法是基于从人类示范中学习,于是从让 PR2系绳结的问题开始。出现了各种意想不到的子问题,其中之一就是轨迹优化,我在这个子问题上的工作最终成为机器人打结这个项目中最有影响力的产品。
在我博士学位的下半部分,我开始对强化学习感兴趣。虽然强化学习可以应用于许多问题领域,但我决定把重点放在机器人运动上,因为有具体的目标,最终的结果令我兴奋。具体来说,我的目标是利用强化学习,让3D机器人从头开始学习跑步。经过一些初步探索,我决定专注于策略梯度方法,因为此方法最利于理解和数学分析,还可以用上我在优化方面的优势。在此期间我开发了TRPO和GAE,最终成功实现了3D机器人运动的初始目标。
在机器人运动研究上,我通过策略梯度方法得到最初的结果时,DeepMind 团队在 Atari 上使用 DQN 得出了结果。结果发布后,许多研究者也开始追赶潮流,试图开发出更好的 Q-learning版本,并应用到 Atari 领域。然而我已经探索了Q-learning的方法,并发现Q-learning对于我正在研究的运动任务来说并不是一个好的方法,所以我继续研究策略梯度方法,并做出了TRPO,GAE,以及后来的 PPO ——这些现在是我最广为人知的工作。
目标驱动的研究:
要求自己采用通用的解决办法
目标驱动型研究的一个缺点就是,把你的目标看得太重。如果你脑海中有一个特定的能力,可能有一些无趣的方法可以实现它,而这种方法并不能促进机器学习领域的发展。你应该将你的研究定义为可以具有通用性以及泛化性并可以尝试应用在其他问题的解决方案上。
例如,在研究机器人运动时,我避免将领域知识纳入到解决方案中ーー目标是在仿真中实现运动,这种方式是通用的,之后也能应用于其他问题上。为了在机器人身上看到一些最初的「生命迹象」,我做了一些特征工程和奖励设计,小心翼翼地做出微小的改变,使这些变化不会影响到我正在开发的算法。现在,我将视频游戏用作试验平台,并确保我的算法思想不只针对特定的设定ーー它们同样可以很好地应用到机器人技术当中。
志存高远,并向着远大目标不断攀升
有时候,那些特别聪明又勤奋的人却没能做出伟大的研究。在我看来,失败的主要原因是他们总是研究一些不重要的问题。每当你开始一个新研究项目的时候,应该问问自己: 潜在的好处有多大?属于10% 还是10倍的改进?我经常看到研究人员从事一些看似合理的项目,但却只能做出一些十分微小的改进。
如果你想要实现更长远的研究目标,增量工作(指那些 10% 的改进)是最有效的。例如,当时关于ImageNet的开创性论文(Krizhevsky、Sutskever 和 Hinton,2012 年)并没有包含任何全新的算法,而是通过大量的小改进叠加起来,实现了前所未有的结果,当时几乎惊艳了所有人(尽管我们现在习以为常)。
日常的工作会让你在性能和理解方面逐渐进步,而这些微小的进步会从整体上让你朝着更高远的目标迈进,量变会带来质的飞跃。
如果你正在研究一些增量式的想法,要注意这些想法是否有用取决于它们的复杂程度。如果是对于基线的改进,最好非常简单,否则没有人会想费力去使用,你自己可能都不想用。如果性能提升了10%,最好是2行代码,如果提升了50%,可以增加到10行代码(只是示例,实际代码量取决于具体领域)。
回过头来看看,你之前列举的最伟大的机器学习成果的名单。这些长期目标是否有潜力能达到与之匹敌的水平?如果未来这个目标无法带来你可以引以为豪的结果,那么就应该修改计划,让它具备这种潜力。
不断进步
要想在机器学习领域不断开发新的算法和产出新见解,你需要长时间集中精力解决一个问题。为了这种持久战,需要培养有效的习惯,使你能够不断地向着更好的结果迈进。
记笔记,随时复习
我强烈建议你找一个笔记本做笔记,记录你每天的所思所想和实验结果。读博士的5年间和在OpenAI工作的2年,我一直都是这么做的,很有帮助。
我每天都创建一个新条目,写下我正在做的事情,所思所想和实验结果(用图表展示)。每隔一到两周,我会做一个复盘,会回顾一下每天的条目,并将这些信息浓缩成一个摘要。
通常我的复盘包含实验发现、见解(可能来自我、我同事或我读过的东西)、代码进展(我实现了什么)以及下一步/未来工作。
在我做完一周的回顾之后,我经常看看前一周,看看我是否跟进了那一周我想到的所有事情。而且,在做这个评论的时候,我有时候会把信息转换成其他的笔记来源。(例如,我把一些次要的想法和项目与笔记本分开列出来。)
记笔记并定期复盘的价值是什么?
首先,一旦你有了想法,笔记本是一个写下它们的好地方,这样你以后就可以重新审视它们。通常,当我回顾一周的日记时,我会填补当时没有想到的谜题中缺失的部分。
第二,笔记本可以帮助你把实验结果保存在一个统一的地方,这样你以后就可以很容易地找到结果。你很容易忘记你的结论,例如,哪些超参数产生了不同,你会想要重新访问你的旧笔记本条目。
第三,笔记本可以让你监控时间的使用情况。你可能想知道“上周做到哪儿了?”笔记本会帮你回答这个问题。您可能会对工作效率感到失望,并意识到需要进行时间管理。你也可能回顾过去几个月,发现自己在各种想法之间跳来跳去太多了ーー你有几个尚未完成的项目,但是你没有花足够长的时间来完成这些项目,以至于没有产生显著的结果。
何时切换研究问题
要解决一个具有挑战性的问题,你需要花足够的时间在上面。但是在经验主义的机器学习研究中,很难知道你是否已经足够努力地尝试了一个想法。有时候这个想法有可能奏效,但是如果你错了一个细节,你将看不到任何效果。但是其他的想法注定要失败,无论你多么努力。
根据我的经验,过于频繁地切换研究问题(并放弃有前途的想法)比不够频繁地切换更容易失败模式。通常情况下,当你正在为实现目前的想法而进行漫长的努力时,另一个有希望的想法会出现,你会想要立即采纳这个想法。如果你的想法可以快速尝试且拥有巨大的潜在提升空间,然后那么就继续做下去。但更常见的是,你在新想法上的初始结果会令人失望,而且需要更持久的努力才能产生显著的结果。
根据经验法则,当你回顾过去几个月你一直在做的项目时,你应该会发现走入了很多小的死胡同,但是你的大部分时间都花在了那些可以交付成果的项目上,比如一篇论文或者一篇博客文章。如果你回顾自己的时间,发现很大一部分都花在了半成品项目上——这些项目并不是绝对的失败,而是你为了一些更新的想法而放弃了它们——那么你应该在未来更加努力地保持一致性,坚持到底。
其中一个策略,虽然我个人没有尝试过,但是仔细想想还是很有意义的:投入一些固定的时间预算去尝试一些与你的主要工作不同的新想法。比如说,每周花一天时间做一些与你的主要项目完全不同的事情。这将构成一种「epsilon-贪心」探索策略,而且它也将有助于拓宽你的知识。
个人发展
无论在研究之路上如何分配时间,你一定会学到很多。每个项目将呈现新的挑战,你可以在过程中充实背景材料、学到技能。然而,通过定期为个人发展留出时间,可以显著提升在长时间段内获得更好工作的机会。具体来说,你应该分配一部分时间来提高你的机器学习的通用知识,而不是在你当前的项目上工作。如果你不分配这些时间,那么在你学习了日常工作所需的基础知识之后,你的知识很可能会停滞不前。你很容易就能走进舒适区ーー你可能需要付出积极的努力来扩展这个区域。
构建机器学习知识的主要方法是阅读教科书和论文,并复现算法。在你职业生涯的早期,我建议在课本和论文之间平均分配你的时间。您应该选择一小组相关的教科书和论文来逐步完成,您还应该重新实现您喜欢的论文中的模型和算法。
大多数学习机器学习的学生在完成学校课程之后并没有花时间阅读教科书。我认为这是一个错误,因为教科书是一个更密集的方式吸收知识比论文。每份会议论文通常都包含一个主要的新想法,但是背景知识较少,以至于无法从中学到任何东西。
你通常需要花费更多的时间来理解符号和术语,而不是理念本身。另一方面,好的教科书收集了几十年来的思想,并用相同的符号以适当的顺序呈现出来。
除了阅读机器学习的入门课本,还可以阅读你感兴趣的其它书籍。我最喜欢的两本著作是 Nocedal & Wright 的《数值优化》和 Cover & Thomas 的《信息论要素》。
除了教科书,我还建议你阅读那些你感兴趣的研究人员的博士论文。机器学习的博士论文通常按以下顺序排列:
1.介绍性和背景材料
2. 几篇之前在会议上发表的论文(据说你只需要把论文“钉在一起”就可以写出学位论文)
3. 结论和展望。
您可能从(i)和(iii)部分中获益最多,因为它们包含一个由专家编写的关于该领域过去和未来的统一视图。最近的论文往往是最好的地方,以找到一个活跃的领域的文献综述,但较老的论文也往往包含有价值的观点。
教科书和论文有助于建立你的基础知识,但是你也需要阅读大量的论文了解前沿动态。
当你刚刚开始你的研究生涯时,我建议你花很多时间重新实现论文中的想法,并将你的结果与已发表的结果进行比较。首先,相比被动阅读,这会让你对主题有更深刻的理解。其次,你将获得运行实验的经验,并且通过重新实现现有的工作(已知期望的性能水平) ,你将比通过做原创性研究获得更快的反馈。一旦你可以很容易地复现最先进的技术,你就准备好超越它了。
除了阅读开创性的论文并复现它们之外,你还应该跟踪在你的领域发表的不太特殊的论文。以批判的眼光阅读和浏览新出现的论文有助于注意到所在领域的趋势(也许你注意到许多论文正在使用一些新技术并取得了良好的结果)。它还可以通过观察思想的依赖图来帮助你建立自己的品味ーー这些思想被广泛使用,并为其它思想打开了大门。
去努力做出伟大的研究吧!
送新书!《Python深度学习基于Torch/TF(第2版)》,有ChatGPT拓展
进NLP群—>加入NLP交流群