AI博士如何做出有影响力的研究?斯隆奖得主弟子亲身讲述经验
机器之心编译
作者:Omar Khattab
编辑:蛋酱、博士泽南
写论文?那只是影响研究其中的一小步。
在研究生期间,斯隆怀化市某某广告媒体制造厂很多人经常会迷茫于如何构建自身的奖得讲述经验研究。我们应该如何开展研究,主弟才能在已经相当拥挤的亲身人工智能领域有所作为?
太多人认为,长期的博士项目、适当的影响研究代码发布和深思熟虑的基准测试无法产生足够的激励作用 —— 有时候这可能是你快速而内疚地完成的事情,然后又要回去做「真正的斯隆」研究。
最近,奖得讲述经验斯坦福大学 NLP 组在读博士 Omar Khattab 发布了一篇博文,主弟讨论了顶级 AI 学者们有关做有影响力研究的亲身思考。
让我们看看他是博士怎么说的:
科研的影响力有多种形式,我将只关注通过开源工作(例如模型、影响研究系统、斯隆框架或基准测试)对人工智能产生的研究影响来衡量。因为我的目标部分是完善自己的想法,记录具体的建议,并收集反馈,所以我会做出较为简洁的陈述。如果你有其他的想法,欢迎在评论区讨论。
首先,以下是指导原则:
- 着眼于项目,而不是论文。
- 选择合适的、具有较大发挥空间的问题,可以「挖坑」。
- 提前思考两步并快速迭代。
- 将你的工作公之于众,并推广你的想法。
- 找到方法激励自己:这是关于发展开源研究的提示。
- 通过新论文继续投资你的项目。
- 第五点「关于发展开源研究的提示」值得单独写一篇更长的文章。我可能会在下一篇文章中写到。
着眼项目
而不是论文
这是一个至关重要的思维,其他的一切都基于此。
刚入门的学生会非常重视发表他们的前几篇论文。这是合理的:这是你学习进行研究、探索初始方向和证明早期进展的方式。但这是怀化市某某广告媒体制造厂一个你最终必须离开的阶段:从长远来看,你的成就和成长不太会取决于单纯的论文数量,而更多地取决于你的影响力和你传达的总体研究脉络。
不幸的是,太多的博士生认为大多数可能产生影响的行为都是「不激励的」。这让我很困惑,直到我意识到他们的意思是这些行为可能会减慢你发表下一篇论文的能力。但你如此迅速地发表下一篇论文的能力并不那么重要。
我建议你不要把你的工作看作一系列孤立的论文,而是问问自己:你将要领导的更大愿景,那么其中子领域或范式是什么?你的工作想要带来什么不同?因此,你将发表单篇论文来探索并建立基准,而更大的愿景应该是你有意迭代的东西。它需要比论文所承载的大得多,而且肯定是尚未完全解决的问题。
要想实现这一点,一种方法是围绕你在开源领域中维护的连贯工件(如模型、系统、框架或基准)构建一些研究论文。这种策略比「进行一些实验,并发布一个转瞬即逝的快速仓库」成本更高,但它会迫使你找到一个具有真正影响的问题,并有助于确保你所做的新研究实际上是连贯且有用的:你不会花费力气引入一个对自己一直在开发和维护的工件无用的小功能或技巧。
选择合适的、具有较大发挥空间的问题
可以「挖坑」
并不是你撰写的每篇论文都是值得无限期投资的。许多论文都是一次性的探索性论文。要找到可以转变为更大项目的方向,所以请使用以下标准。
首先,问题必须是前沿的。你可以用多种方式定义它,但在人工智能领域中行之有效的一种策略是 —— 寻找一个将在 2-3 年内「热门」但尚未成为主流的问题空间。
其次,问题必须具有较大的挖坑潜力,即对许多下游问题的潜在影响。基本上,这些问题的结果可能会使足够多的人受益或感兴趣。研究者和人们关心什么可以帮助他们实现目标,因此你的问题可能是帮助他人构建事物或实现研究或生产目标等东西。你可以应用此过滤器来研究理论基础、系统基础设施、新基准、新模型和许多其他事物。
第三,问题必须留有较大的余地。如果你告诉人们他们的系统可以快 1.5 倍或更有效 5%,这可能没什么意思。在我看来,你需要找到这样的问题:至少在经过多年的努力之后,你有非零的希望让事情变得更快,比如快 20 倍或更有效 30%。当然,你不需要一路走到那一步才算成功,你也不应该等到完全走到那一步后才发表第一篇论文或发布第一件作品。
我不想说得太抽象,还是用 ColBERT 来说明吧。2019 年底,应用 BERT 进行检索的研究非常流行,但这些方法非常昂贵。人们自然会问,我们是否能大幅提高这种方法的效率?是什么让这成为一个好问题呢?
首先,它很前言。我们可以正确地预计,到 2021 年(1.5 年后),许多研究者将寻求基于 BERT 的高效检索架构。其次,它有很大的发展空间。新的 ML 范式往往会这样,因为大多数此类工作一开始都会忽略效率。事实上,最初的方法可能需要 30 秒才能回答一个查询,而现在 30 毫秒就能完成更高质量的检索,速度快了 1000 倍。第三,它有很大的 Fanout。可扩展检索是一个很好的「基础」问题:每个人都需要在检索器之上构建一些东西,但却很少有人愿意去构建它们。
提前思考两步
并快速迭代
既然你已经有了一个好问题,就不要急于选择眼前的低挂果实作为你的方法!在某些时候,至少最终会有很多人在考虑这种「显而易见」的方法。
相反,至少提前两步思考。当这个及时出现的问题最终成为主流时,确定大多数人可能采取的途径。然后,找出这条道路本身的局限性,并着手了解和解决这些局限性。
在实践中会是什么样子呢?让我们重温一下 ColBERT 案例。利用 BERT 构建高效检索器的明显方法是将文档编码成向量。有趣的是,到 2019 年底,只有有限的 IR 工作做到了这一点。例如,该类别中被引用次数最多的工作(DPR)在 2020 年 4 月才发布了第一份预印本。
有鉴于此,你可能会认为,2019 年要做的正确事情是通过 BERT 建立一个伟大的单矢量 IR 模型。与此相反,如果只提前两步思考,就会提出这样的问题:每个人迟早都会建立单矢量方法,那么这种单矢量方法会从根本上卡在哪里呢?事实上,这个问题导致了后期交互范式和广泛使用的模型。
再举一个例子,我们可以使用 DSPy。2022 年 2 月,随着提示功能变得越来越强大,人们显然希望通过提示来进行基于检索的质量保证,而不是像以前那样进行微调。为此,我们自然要建立一种方法。再往前走两步,我们会问:这样的方法会在哪里卡住?归根结底,「先检索后生成」(或称 RAG)方法可能是涉及 LM 的最简单的方法。
出于人们会对它感兴趣的同样原因,他们显然会对以下方面越来越感兴趣:(i) 表达更复杂的模块组合;(ii) 通过对底层 LM 的自动提示或微调,弄清楚应该如何监督或优化由此产生的复杂 pipeline。这就是 DSPy。
这条准则的后半部分是「快速迭代」。这也许是我的导师 Matei Zaharia(斯隆奖得主、Apache Spark 创始人)在我攻读博士学位的第一周给我的第一条研究建议:通过确定一个可以快速迭代并获得反馈(如延迟或验证分数)的问题版本,可以大大提高你解决难题的机会。如果你要提前两步思考问题,这一点就尤为重要,因为这已经足够困难和不确定了。
将你的作品公之于众
让你的想法深入人心
此时,你已经发现了一个好问题,然后不断迭代,直到你发现了一些很酷的东西,并写出了一篇有见地的文章。不要继续写下一篇论文。相反,要专注于将你的工作成果公之于众,并寻求与人们进行真正的互动,不仅仅是关于你的一次论文发布,而是关于你正在积极研究的全局。或者更好的做法是,让人们了解你正在构建和维护的有用的开源工具,它捕捉到了你的关键想法。
常见的第一步是在 arXiv 上发布论文预印本,然后发布「帖子」宣布你的论文发布。这样做时,请确保你的帖子是以具体、充实、易懂的主张开头。这样做的目的不是告诉人们你发布了一篇论文,那并不具有内在价值,目标是以一种直接而又吸引人的方式传达你的关键论点。(是的,我知道这很难,但这是必要的)。
也许更重要的是,整个过程不会在第一次「发布」后结束,发布只是开始。鉴于你现在投入的是项目,而不仅仅是论文,你的想法和科学交流将持续一年之久,远远超过孤立的论文发布。
当我帮助研究生在「推特」上介绍他们的工作时,他们最初发布的文章并没有像希望的那样受到关注,这种情况并不少见。学生们通常会认为这验证了他们对发布研究成果的恐惧,并认为这是另一个信号,表明他们应该继续写下一篇论文。显然,这种想法是不正确的。
大量的个人经验、二手经验和观察结果都表明,在这件事上坚持不懈是非常有意义的(顺便说一句,能坚持的人不多)。也就是说,除了极少数例外情况,好想法的牵引需要你在不同的环境中多次告诉人们关键的东西,并不断改进你的想法和你对想法的传达,直到社区能够随着时间的推移吸收这些想法,或者直到该领域发展到更容易理解这些想法的正确阶段。
汇聚兴奋点
发布开源研究的技巧
让人们对你的研究成果感到兴奋固然是件好事,但通过发布、贡献和发展开源工具,将你的想法传递给相关的下游应用,往往能产生更大的影响。
要做到这一点并不容易:仅仅将代码文件连同 README 上传到 GitHub 是不够的。一个好的资源库将是你项目的「故乡」,比你发表的任何一篇论文都更重要。
优秀的开源研究需要具备两个几乎独立的特质。首先,它必须是好的研究,新颖、及时、范围明确、准确。其次,它需要有明确的下游效用和低摩擦。
这是最重要的部分:人们会因为各种「错误」的原因,总是反复回避(而其他人也会反复使用)你的开放源码软件成果。举例来说,你的研究可能是客观的「最新技术」,但人们十有八九会优先考虑摩擦更小的替代方案。反过来说,对于研究生来说,往往不能抓住人们使用你工具原因的重点,比如,因为他们没有充分利用你最有创意的部分。这并不是什么值得抵制的事情,而是值得理解,必须要为此改进的事情。
基于此,我想列出在研究成果开源方面需要注意的几个里程碑。
里程碑 0:让发布的内容可用
发布一个无人能运行的代码是毫无意义的。在你的研究领域,这些人想复制你的运行结果,也许他们会超越过你的工作并引用你的研究结果。这些人比其他类型的用户更有耐心。尽管如此,你还是会发现,根据代码是否容易修补的情况,它在学术影响力方面也存在巨大差异。
里程碑 1:让发布的内容有用
除了在你的细分领域的人,你应该确保你的发布对想要实际使用该项目来构建其他东西的受众有用。在人工智能研究中,这个里程碑很少会自然而然地到来。你应该分配大量时间来思考人们试图解决的(研究、生产等)问题,而你的人工智能成果可以在这些问题上提供帮助。如果你能正确地做到这一点,那么从项目设计到公开的应用程序接口以及展示的文档 / 示例,都会体现出它的很多作用。
里程碑 2:让发布通俗易懂
这对人工智能研究者来说很难,但我们应该意识到,一个有用的版本,在技术上所有的东西可用且是某种程度上可解释,并不等于你的大多数潜在用户会觉得这个版本通俗易懂,足以让他们投入学习或尝试。
知名 AI 学者 Andrej Karpathy 写过一篇关于这个问题的文章:「你建造东西,然后你需要建造坡道通往它」。Ben Clavie 也撰写了大量有关这方面的文章,他将我们在 ColBERT 上所做的工作加以改进,使其变得更加平易近人了,这在很大程度上证明了这一点。
来源:https://www.youtube.com/watch?v=c3b-JASoPi0
里程碑 3:找出显而易见的替代方案失败的原因,并保持耐心
我们一开始就讨论了提前两步思考的问题。在我看来,这一点至关重要,但也意味着大多数人都不会理解,为什么他们需要采用一种解决方案来解决他们还无法明显观察到的问题。我认为,随着时间的推移,你的工作之一就是要建立一个案例。收集证据,并以易于理解的方式说明为什么显而易见的替代方案(一次只思考一个步骤)会失败。
里程碑 4:了解用户的类型,并利用这一点实现增长
当我创办 ColBERT 和 DSPy 时,我最初寻找的受众是研究者和专业的 ML 工程师。随着时间的推移,我学会了放弃这一点,并明白你可以接触到更多的受众,但他们需要的是不同的东西。在做任何事情之前,都不要间接甚至直接屏蔽不同类别的潜在用户。这种情况比人们想象的要普遍得多。
其次,在寻找用户时,要在两类用户之间寻求平衡。一方面,拥有高级用例的专家级构建者可能需要你投入大量资金,但往往会在研究意义上推动某些用例的发展,这可能会带来回报。另一方面,公众构建者通常不是 ML 专家,但他们经常在公众场合构建并分享他们的学习成果,在大规模增长中占据更大的比例,并会让你对自己最初的假设有更多的了解。两者都是你需要的。
里程碑 5:将兴趣转化为不断壮大的社区
OSS 工作的真正成功在于社区的存在,以及不依赖于你的努力而持续增长。一般来说,一个好的社区应该是有机的,但你需要积极努力帮助它形成,例如欢迎贡献和讨论,并寻找机会将兴趣转化为贡献或某种论坛(例如 Discord 或 GitHub)。
里程碑 6:将兴趣转化为活跃、协作和模块化的下游项目
很有可能,你的 OSS 项目在早期阶段并没有解决最初愿景中的所有问题。一个设计精良的项目通常会有多个模块化部分,可以让你发起研究合作(或其他努力),让新的团队成员不仅能推进项目,还能拥有项目的重要部分,从而更快或更大程度地影响他们的想法,同时大幅改进项目。例如,DSPy 目前由不同的团队分别领导及时优化、编程抽象和强化学习方面的研发工作。ColBERT 的外部应用程序接口、底层检索基础架构和核心建模等组件主要由不同项目中的不同人员负责推进。
来,总结一下。开源研究的采用需要好的研究和好的开源成果。这种平衡很难把握,但一旦把握得当,就会收获颇丰。就我个人而言,我花了很长时间才掌握并内化了这一点。这要归功于我的博士生导师 Chris Potts 和 Matei Zaharia 的反复反馈,以及 Heather Miller 和 Jeremy Howard 的宝贵意见。
评估研究的标准是与先前知识相比的「增量」,但在人们能够有意义地利用「增量」之前,软件本身必须是有效的。要使软件有效,其文档也必须有效:除非你向人们展示,否则人们不会看到他们应该使用软件的所有下游方法。也就是说,直到这些任务可以由一个独立的社区来开发。
说了这么多,本节最重要的技巧就是「发布」,真正发布且经常发布,并从中学习。
发表新论文
继续投入自己的项目
当你读到第五条准则时,很自然会产生这样的疑问:研究生哪里有这么多时间花在开放源码软件上?什么时候才能做真正的研究?
实际的答案是,花在开源上的大部分时间都可以用来进行新的、令人兴奋的研究。这两者并不像表面上看起来那么割裂。为什么这么说呢?
首先,处于这种开放源码软件工作的前沿,你可以极早地凭直觉识别新问题。与其他方式相比,你对问题的理解会更加本能。另外,你所建立的社区通常会对自己的方法原型提供直接反馈,并让你有机会接触到了解问题重要性的优秀合作者。你还可以获得有用的「分发渠道」,确保自己在这一领域发表的每一篇新论文都能得到受众的关注,并巩固现有的平台。
举例来说,「ColBERT」不仅仅是 2020 年初的一篇论文。它现在可能有十篇左右的后续相关论文,投资于改进的训练、更低的内存占用、更快的检索基础架构、更好的领域适应性以及与下游 NLP 任务更好的匹配。同样地,DSPy 也不是一篇论文,而是关于编程摘要、提示优化和下游程序的论文集合。这些论文中有很多都是由不同的优秀作者撰写的,他们的工作都产生了巨大的影响,其中一部分是通过开放源码软件渠道创造了大量的受众。
所以说,一个好的开放源码工具可以创造出模块化的作品,供新的研究者和贡献者探索、拥有和发展。
参考原文:https://github.com/okhat/blog/blob/main/2024.09.impact.md