跳转至

AI 专业科研入门:科研到底是在做什么?

先说在前面,笔者也不是科研特别强的人,写这篇更多是想抛砖引玉。很多内容也只是我自己在做项目、读论文、写论文过程中的一点体会,不一定完全正确,但希望能给刚接触 AI 科研的同学一点参考。

在正式开始之前,先推荐一下彭思达的 pengsida/learning_research:本人的科研经验。这是我目前见过中文互联网里比较系统的一份 AI / CV 科研经验总结,里面从怎么入门科研、建立领域视野,到怎么找问题、想 Idea、做实验、写论文、做 Presentation、Rebuttal,基本把一个 Research Project 的完整生命周期都讲到了。

当然,你看完之后可能还是会觉得一头雾水,这也很正常。科研这个东西,看一百篇“如何做科研”,都不如真的跟着一个 Project 做几个月。所以这篇文章里,我想用尽量简单、直白的话,聊聊我理解的“科研”到底是在做什么。

1. 科研到底是什么?

我自己的理解是,大部分时候:

科研,就是发现一个已有方法还没有解决好的问题,提出一个你觉得可能有效的办法,然后通过实验和分析证明你的判断,最后用论文的形式说服社区的人相信这个判断,并从中得到一些新的理解。

举个很简单的例子。

假设现在有一个视觉模型,在正常白天图片上做目标检测很准,但一到夜晚场景,性能就明显下降。刚开始,这只是一个现象。然后你继续分析,发现它可能是因为模型比较依赖颜色、纹理这些信息,而这些信息在低光环境下变化很大。

于是你开始形成一个猜测:模型是不是过度依赖了对光照不稳定的信息?

接下来,你会进一步想:能不能让模型更多利用一些对光照变化更稳定的特征?于是你开始设计方法。方法做完之后,还要通过实验回答一系列问题:性能到底有没有提升?哪些场景提升了?为什么会提升?是不是因为你前面的判断?如果去掉关键设计,效果还在不在?换一个数据集、换一个模型之后,这个结论还成立吗?

当这些东西能连起来的时候,才慢慢形成一个完整的 Research Story。

所以科研通常不是“随便想一个 Module,加到网络里,涨点,然后写论文”。更真实的过程往往是:先看到一个现象,对这个现象产生困惑,提出一个解释,再通过实验去验证。实验过程中又会出现新的现象、新的问题,于是你继续提出新的假设、继续验证。

稍微形式化一点,一个科研项目大概会经历这些环节:

建立领域视野
↓
发现问题
↓
提出 Research Question
↓
形成 Hypothesis / Idea
↓
设计 Method
↓
实现 Prototype
↓
跑通 Baseline
↓
Main Experiments
↓
Ablation / Analysis
↓
形成完整 Story
↓
写 Paper
↓
投稿
↓
Review / Rebuttal

但真实科研基本不会这么顺利。更多时候是:Idea 做出来不 work,回头重新读论文;发现 Baseline 有问题,修完之后结果涨了;做 Ablation 又发现原本以为最重要的模块其实没什么用;于是重新解释、重新设计,最后甚至连一开始想研究的问题都会发生变化。

这些都很正常。科研之所以难,很大程度上就是因为它没有标准答案。

2. 如何培养科研每个环节的能力?

这里我不展开太多细节,很多具体方法可以去看前面推荐的链接。我主要想简单聊聊一些基础问题和常见误区。

2.1 建立领域视野

很多人刚进实验室,老师会说:“你先看看论文。”

于是每天看一两篇,一个月下来可能也读了二三十篇。但如果这个时候问他:“这个领域到底在解决什么问题?现在有哪些主流路线?每条路线的核心差别是什么?”很多人可能还是说不清楚。

所以,读论文并不只是“把论文读完”。

更重要的是建立一种理解:这个领域最终想解决什么问题?现在主要有哪些方法路线?这些路线为什么会出现?它们分别解决了什么问题,又留下了什么问题?

刚开始不一定要读懂每一篇论文的所有公式和实现细节。很多时候,一篇论文真正值得反复细读的部分可能就那么几块。更重要的是抓住它背后的基本问题。

读论文时也可以带一点批判视角。比如多问几个为什么:为什么需要这个模块?如果去掉会怎样?它真的解决了作者说的问题吗?还是只是为了凑 Novelty 加上去的?实验到底证明了什么?又有哪些地方没有证明?

很多时候,论文里没有解释清楚、没有证明充分的地方,就可能是你继续做的空间。

当你开始从“学习别人做了什么”,慢慢变成“思考别人为什么这样做,还有什么没解释清楚”,你才真正开始接近科研。

2.2 发现问题

一个比较好的 Research Question,至少要想清楚几件事:

这个问题到底存不存在?它为什么重要?已有方法为什么没有很好解决?以及,它是不是一个当前阶段可以研究的问题?

其中,“已有方法为什么不行”尤其重要。

本科生刚开始做科研时,我觉得从 Failure Case 入手是一个很好的方式。比如一个方法平均成功率已经有 80%,不要只盯着这个 80%,更要去看剩下那 20% 为什么失败。

然后继续问:为什么会失败?这是这个模型自己的问题,还是同类方法都会遇到的问题?如果是一类方法都会遇到的问题,那它就有可能慢慢变成一个值得研究的方向。

很多好的问题,不是凭空想出来的,而是从大量失败现象里一点点挖出来的。

2.3 Idea:先想清楚为什么,再想怎么做

一个很常见的误区是,看到一个问题之后,马上开始设计网络:

Problem
↓
设计一个新 Module

但更合理的过程应该是:

Problem
↓
为什么会出现?
↓
Hypothesis
↓
怎么验证或解决?
↓
Method

也就是说,一个 Idea 最重要的地方,不一定是结构有多复杂,而是背后有没有一个清楚的判断。

一个很简单的方法,如果它解决的是一个明确的问题,并且能够带来新的理解,那也可以是很好的科研。反过来,一个很复杂的结构,如果只是把已有模块堆在一起,但说不清楚它到底解决了什么问题,那就很难让人信服。

所以,想 Idea 的时候不要一上来就问“我能加什么模块”,而是先问:“这个问题为什么会发生?我相信什么?我怎么证明这个判断是对的?”

2.4 做实验:实验是用来回答问题的

本科生最早接触科研,大部分时间可能都在做实验。所以很容易把“实验能力”理解成会写代码、会调参、会跑服务器。

这些当然都很重要。但更重要的是:你要知道自己为什么要做这个实验。

一个实验不应该只是“试试看能不能涨点”,而应该是在回答一个具体问题。比如:这个模块到底有没有用?性能提升是不是来自这个设计?模型是不是在某些特定场景下更容易失败?增加更多历史信息到底是帮助了模型,还是反而引入了干扰?

做实验时也很建议养成记录的习惯。至少要写清楚:这次实验想验证什么,改了什么,结果怎样,观察到了什么,下一步打算做什么。

很多实验单看结果好像没用,但几个月后回头看,经常会发现里面有很重要的信息。

失败实验尤其如此。

比如你本来觉得 Memory 越长效果越好,结果发现 5 帧是 70%,10 帧是 69%,20 帧反而只有 65%。这不是一个“废实验”。它可能说明,更多信息并不一定更好,过多历史反而会带来冗余和干扰。

于是新的问题就出现了:到底什么信息才值得被记住?

这就是实验的价值。实验不只是为了得到一个数字,更是为了帮助你理解问题。

2.5 写论文也是科研的一部分

很多人会觉得,实验做完了,科研就结束了,剩下只是把结果写成论文。

但其实真正开始写的时候,经常会发现很多之前没想清楚的问题。

写 Introduction 时,你可能突然发现:为什么要研究这个问题,自己其实说不清楚。写 Method 时,你可能发现某个模块没有明确的设计动机。写 Experiment 时,你可能发现自己声称解决了长程问题,但根本没有针对任务长度做分析。

所以写论文不是简单地包装结果。它也会反过来逼你重新梳理整个工作。

一篇论文最终至少要让一个没有参与这个 Project 的人理解:你发现了什么问题,为什么这个问题重要,之前的方法为什么不够好,你的核心判断是什么,你做了什么,实验是否真的支持了这些判断,以及最后我们从中学到了什么。

如果这些东西讲不清楚,有时候不只是写作能力的问题,而是这个科研工作本身还没有想清楚。

3. 本科生更适合如何做科研?

看到这里,你可能会想:“那我是不是得先把数学、机器学习、深度学习、PyTorch、Transformer 全部学完,才能开始科研?”

其实完全没必要。

科研很难等到“准备好了”再开始,因为你永远都会发现自己还有很多东西不会。对本科生来说,更现实的方式是:边做 Project,边补知识。

3.1 第一个 Project,最重要的是完整经历一次科研

第一次做科研,目标不一定非得是“发一篇顶会”。更重要的是完整经历一次 Research Project。

比如从读论文、配环境、复现 Baseline 开始,到第一次遇到奇怪的 Bug,第一次跑了很多组实验发现全部没用,第一次组会被老师追问“为什么”,第一次自己设计 Ablation,最后再到整理结果、写论文。

这些过程本身就是科研训练。

本科生早期可以先掌握基本的 Python / PyTorch 和深度学习知识,然后找一个自己感兴趣的具体方向,读几篇代表性论文,再跟着老师或者学长学姐进入真实 Project。

刚开始可以先复现 Baseline、做一些实验、整理结果。之后逐渐负责一个 Sub-problem,最后再尝试自己推动一个比较完整的问题。

不用一上来就要求自己独立选题、独立想 Idea、独立做实验、一作顶会。这些能力本来就是慢慢长出来的。

3.2 先把基本能力练起来,再尝试 Lead 自己的科研

如果你还没有真正完整做过一个 Project,一上来就想自己独立 Lead 一个方向,通常会很痛苦。

不是说不可以,而是你会发现自己很难判断:这个问题重不重要?这个 Idea 靠不靠谱?实验该怎么设计?结果不好是因为方法不行,还是代码有 Bug,还是 Baseline 没调好?

所以本科生更现实的路径是:先在一个真实项目里训练基本能力,包括读论文、复现、实验、分析、写作、讨论。等这些能力慢慢有了之后,再尝试自己提出问题、设计方法、推动完整项目。

科研里的很多判断力,不是听几次讲座就能获得的,而是在一次次真实项目中长出来的。

3.3 不要沉浸在辅助性工作挂名里

本科阶段当然可以追求更多论文经历,但我觉得更应该关心的是:自己到底有没有真正做懂一个 Project。

有些工作可能只是帮忙跑了几组实验、处理了一些数据,最后挂了个名。这样的经历当然也有价值,但如果一直停留在这种状态,就很容易只是在“参与科研”,而不是“理解科研”。

真正深入做懂一个项目,往往比浅浅参与很多项目更有价值。

你要尽量问自己:这个工作的核心问题是什么?方法为什么这样设计?实验为什么这样做?每个结果说明了什么?如果 Reviewer 质疑这个工作,我能不能解释清楚?

如果这些问题你都能回答出来,那这段科研经历才真正变成了你的能力。

4. AI 时代下,如何做好科研?

这里也很推荐看看香港中文大学(深圳)韩晓光老师分享的 关于什么是好的科研的一些思考

现在做 AI 科研和几年前已经很不一样了。

以前不会 PyTorch,要自己查文档;不会配环境,要折腾 CUDA;论文看不懂,要一点点搜资料。现在很多事情都可以直接问 AI。读论文、写代码、Debug、查资料、整理实验、润色论文,AI 都可以帮上很大的忙。

所以 AI 确实大幅降低了科研里的执行成本。

但我反而觉得,这会让另外一些能力变得更重要:提出问题、判断问题、形成 Hypothesis、设计有说服力的实验,以及从结果里得到真正的 Insight。

4.1 AI 可以让你做得更快,但不能替你判断什么值得做

以前想到一个 Idea,可能要花几天才能写出 Prototype。现在借助 AI,可能几个小时就可以开始跑实验。

这当然是好事,因为你可以更快验证自己的想法。

但当实现变得越来越容易之后,真正困难的问题反而变成了:为什么要做这个 Idea?这个 Problem 真的存在吗?为什么这个方法可能有效?它到底是在解决一个问题,还是只是在堆已有模块?

AI 可以一次生成十几个“创新点”,但它很难替你判断哪一个问题真正值得投入几个月。

这就是 Research Taste 越来越重要的原因。

Research Taste 很难通过看几篇“科研教程”直接获得。它更多来自读论文、真实做项目、不断失败、和老师同学讨论,然后一点点形成自己的判断。

4.2 用好 AI,但不要把思考外包出去

我觉得科研里完全应该大量使用 AI。

读论文时,可以让它帮你解释概念、对比方法、整理领域脉络;写代码时,可以让它帮你搭 Prototype、Debug、写数据处理脚本;做实验时,可以让它帮你分析异常结果和可能原因;写论文时,也可以让它帮你润色表达、检查逻辑。

你甚至可以把自己的工作交给 AI,让它扮演一个严格 Reviewer,专门挑 Novelty、实验设计和 Claim 上的问题。

但一定要自己思考。

第一,你要知道代码到底做了什么。否则实验出了问题,你很难判断到底是 Idea 不对,还是实现错了。

第二,核心 Research Story 最好自己先想清楚:Problem 是什么?为什么值得解决?核心 Insight 是什么?实验到底证明了什么?

AI 可以帮助你更快完成很多事情,但不要让它代替你形成判断。

5. 写在最后

如果要把前面所有内容浓缩成一句话,我觉得科研大概就是:对一个问题产生好奇,然后认真地把它追下去。

本科生刚开始做科研,不需要一上来就定义一个新领域,也不需要立刻想着解决一个世界级问题。第一次 Project 最后没有 Paper,也不代表这段经历没有价值。

如果你真的经历过这样一个过程:发现一个奇怪现象,想知道为什么,提出一个猜测,写代码验证,发现自己猜错了,再重新思考、继续实验,最后终于对这个问题多理解了一点,那其实就已经是在做科研了。

韩晓光老师在文章最后给本科生的一段建议,我也很喜欢:如果一个问题大到让你完全不知道从哪里开始,它可能暂时对你太大;如果一个问题小到让你一点兴趣都没有,它可能又太小。

对本科生来说,比较合适的可能就是找到一个自己暂时够得着、但又需要稍微踮一踮脚的问题,然后认真做下去。

尤其是在 AI 越来越强的今天,代码会越来越容易写,论文会越来越容易读,信息也会越来越容易获得。但发现一个真正值得研究的问题,形成自己的判断,设计可信的证据,并且知道自己为什么相信最后的结论,我觉得这些东西依然很难,也依然是科研训练真正重要的部分。