思考研究思想与技术
在本文中,分享一些关于研究思想与技术之间区别的思考,特别是在机器学习领域。这一区分自开始博士研究以来一直在思考。加入某机构后,并参与了如SynthID等产品发布,意识到在许多项目中,区分研究思想和技术可能非常有用,无论是在工业界还是学术界。
研究的核心组成部分是研究思想的传播。顶级会议,尤其是在机器学习领域,期望这些研究思想具有新颖性,在社区中产生重大影响,并经过适当的实证或理论检验。这反映在研究传播的方式上:通过论文、演讲、海报、教程等,其中思想显然是核心元素。虽然一些会议鼓励开源代码或数据集,或试图将焦点从新颖性或“主观重要性”转移开(见TMLR),但底层技术通常是次要的。
在此,想澄清如何思考研究思想与技术。研究思想是一种相当通用的方法或见解。例如,一种新的训练算法或网络架构就是一个研究思想。在论文中,期望这些思想被详细描述并有适当的动机。更重要的是,希望看到研究思想带来优势或解决问题。这后一部分通常是技术登场的地方。认为,技术是研究思想的实际实现——通常与特定问题、应用或实验相关联。因此,研究思想和技术是互补的。研究思想的部分内容,如底层理论,可能不是实际实现的一部分,但必须作为相应论文的一部分进行传播。技术通常还包括许多实用工具(在机器学习中通常是评估、数据加载、前/后处理等),这些在论文中不感兴趣或不影响研究思想。
那么,为什么喜欢思考这种区别?特别是在学术界,研究思想通常被放在首位。然而,认为采纳实际上发生在技术层面。当然,这假设首先有一个好的研究思想。但反复观察到,好的研究思想如果在技术层面没有被采纳,就会不那么“成功”——为简单起见,使用引用、影响、后续工作作为成功的代理。相反,看到(并亲身经历)研究工作比社区对研究思想重要性的预期更成功,通过适应开源技术或数据集。事实上,感觉很多时候——考虑特定应用、问题或数据集——特定技术可以迅速成为主导。
技术被快速采纳,并不是指人们偏爱特定框架或编程语言。而是看到特定代码片段非常流行,例如,可以在许多作品中找到或多或少相同的ResNet实现,在许多作品中找到数据集X的相同数据加载器等。当然,跨框架、公司等有多个ResNet实现,但看特定应用,研究人员经常基于其他研究人员的工作构建,特定实现可能成为主导。这意味着,特定技术(方法或算法的特定实现)在一个领域中被特别广泛地使用。这可能有不同的原因:良好的编码实践、易于遵循的文档或教程、对特定硬件的支持、快速安装等。有趣的是,这种实现可能并非来自研究思想的原作者。
虽然以上描述了在学术界观察到的现象,但发现在工业环境中思考这种区别也非常有用。事实上,感觉它对任何项目或合作都可能有用。例如,一些项目或情况可能更受益于实际的技术,而不是“仅仅”传播相应的(研究)思想。有时,迫切需要技术解决方案来解决问题。不同团队可能追求不同的想法;并不总是最好的想法被采纳,而是最实用的那个。这通过简单尝试软件来轻松评估。在这种情况下,可能值得快速实现一个原型,而不是起草一篇漂亮的论文或演示。在其他情况下,清晰、有说服力和及时地传播思想可能最具影响力,因为它激励其他人执行这些想法。不幸的是,尚未学会何时偏爱哪种方法……
总体而言,当与其他研究人员或工程师讨论或思考合作和项目时,发现自己越来越经常思考什么最有用:投入精力传播思想还是实现第一个原型。当然,可能存在权衡,但认为回答这个问题在研究中非常有用。