作者:Omar Khattab

编辑:蛋酱、泽南

写论文?那只是个中的一小步。

研究生期间,很多人常常会迷茫于如何构建自身的研究。
我们该当如何开展研究,才能在已经相称拥挤的人工智能领域有所作为?

AI博士若何做出有影响力的研究斯隆奖得主学生亲自讲述经验

太多人认为,长期的项目、适当的代码发布和寻思熟虑的基准测试无法产生足够的勉励浸染 —— 有时候这可能是你快速而腼腆地完成的事情,然后又要回去做「真正的」研究。

最近,斯坦福大学 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