Skip to content

完成第一篇论文

在加入课题组之后,下一件事情就是完成自己的第一篇论文了。

一般来说我们认为,进组之后的状态存在两种,一种是老师分配了一名或者多名师兄带你(具体的形式可能是让师兄本人和你对接,或者安排你进入师兄的课题中,看看能否帮上一些忙),另一种则是老师希望你自己独立完成一个课题。值得一提的是,在这个过程中大多数时候实际上并不存在一个所谓的状态,是被你的老师放养了。课题组并不是某种贴心的论文/科研辅导机构,你需要主动联系老师以及师兄,并且寻找自己在其中可以做些什么事情,而并不是等待他们贴心地找上你。

在这里回扣上一章节的内容,事实上在选择课题组的过程中,老师所进行的课题是否收敛也是很关键的一个评判指标。笔者的第一段实习很难说不坎坷,老师打算开展一个新的方向,并且让笔者探索,这在某一方面意味着整个课题组中实际上只有笔者一人有经验。哪些代码是好用的,有没有具体的调参技巧,哪些论文是有必要阅读的,这些经验往往只有同课题组中更加资深的老师或者前辈才可以给你指导,而假如老师研究的领域并不集中,这或许意味着你会看到不同领域的师兄彼此没有交集,所能获得的帮助也就更加分散,这并非有助于长远发展的。

回到正题,在两种参与课题的情况中,一般来说第一种是更加合理且幸运的结果,也就是有一名前辈带领你进行第一次科研实践,并且以核心身份参与到他的课题中。在这里我们会先简要说明整个科研的流程,并且在之后强调剩余需要关注的重点。不过在此之前,你需要分辨前辈让你做的事情是否是核心参与者需要进行的,而不是亲切的 PUA 你帮助课题组标注一些数据,或者进行其他的打杂工作,这些内容让你不能参与到课题的核心迭代流程中,从而不仅因为没有参与核心工作而作者位次较低,也很难从中学到任何内容。

一般来说,一个课题的诞生从 insight 开始,也就是对于领域中发现了某个关键问题,或者对于有的问题找到了更好的解决思路,或者基于某些理解可以进行一些针对性的探索,并且从探索的结果中寻找思路。

在参与课题的过程中,读者有必要跟随前辈的思路,积极参与对于整体模型的迭代,并且在这个领域中尝试寻找其他有待解决的问题。在这里举例一个笔者所参与的领域的例子,也就是 VLA Manipulation 这个方向,即使用模型控制机器人(主要是机械臂)进行操作任务,例如分拣桌面上的物品。

在对于之前的 VLA,在实验的过程中不难发现,对于抓取任务来说,很多时候机械臂确实已经到达了物体的上方,但是在向下抓取的时候,因为高度不够导致没有成功抓取,从而导致了非常大的失败率。这里就呼应了前面提到的找到一个关键问题,也就是当模型只有 RGB 输入的时候,缺乏对于深度的感知,从而使得任务失败率很高。在遇到问题之后就去分析导致问题的原因,并且可以思考最直接的方式去解决,在这个问题中,最好的方式当然是接入一个深度编码器(当然事实上这里只是一个例子,类似的方法已经有其他人做过,笔者才不会心疼去讲这个)。在往更加细致分析,VLA 目前常见的架构是 VLM+Diffusion 拼接在一起的模型,本身进行端到端训练,可以简单理解前面的 VLM 负责任务理解以及各种的语义理解,甚至包括 grounding,而后面的 Diffusion 则关注于动作本身。这时需要关注的重点就在于基于领域中的方法以及一些常识进行分析,应该如何更好地实现自己的 idea。对于这个问题来说,VLM 大多数输出的是语义信息,这意味着其失去了更加细致度的表达,将深度信息作为 VLM 的输入,并且希望 VLM 将这一信息传递到后面显然是更加不具有效率的,而直接将深度编码和 VLM 输出拼接在一起作为 Diffusion 的 condition 虽然是更加直接且有效的方法。这时候一个最基础的新方法就已经出现了,剩下的对于读者来说就只需要实现算法并且形成一篇论文了。

在拥有了 idea 之后,之后就是要进行代码的实现了。在这里一般来说对于第一篇论文,还是建议基于以前的方法的代码进行改进,在他们的基础上加入自己的创新点。一个事实是,现如今绝大多数的论文的要求不只是算法有效,更需要超过当前领域中的全部论文,达到 SOTA 的性能,以往的论文除了自己的创新点,但也包括不少的调试技巧。直接在他们的代码基础上进行修改,可以确保你的方法带来的性能改进是在当前最好的基线上进行上下波动。而假如自己从零开始进行实现,极大的概率是忽略了一些实际影响深远的技巧,从而导致难以对齐性能。

这里同样有必要提及此时此刻的代码能力,在此之前我们建议读者掌握 Python 以及 Linux 的使用方法,并且在学习深度学习的过程中了解 pytorch 的内容。假如读者处于一些主流领域,那么在拥有这些基本功,并且熟练了解 Git 以及 GitHub 之后,同样有必要了解 Hugging face 以及 Transformer 库,在一些比较传统的领域中,这些内容没有被推广,但是更多的领域内它们已经成为了绝大多数代码的基石。

不同的领域包含了不同领域细分的需要掌握的技巧,这些内容就需要读者自己去练习了,假如参与其他人的课题,代码是一件工作量很大的事,而重点在于了解自己的能力边界,并且在能力边界之内尽力去参与,而不是揽下大多数自己似乎可以去做的事情,但是最后却发现没有兑现自己的承诺。

完成了方法的实现之后,剩下的就是漫长的实验过程,其自然包括了对于性能的调试。事实上一个悲伤的事情是,排除方法确实很有效这一情况,在大多数时候对于略微无效的方法,可以通过调试技巧使得性能超越以前的方法,假如读者认为就是有必要的,或者说大多数时候这都是有必要的,那么在性能不是最好或者不够理想的情况下,不断地在实验中迭代是必须的。

实验过程有两个重点需要注意。

其一是需要详细的记录实验每一步的 setting。一个事实是在论文写作的过程中包含 ablation study 这个环节,你需要客观分析你的方法在整体的性能提升中带来的增益,一些更加细节的参数带来的影响,以及假如这是一个更加偏向于探索,而非制作一个模型的论文来说,阐述此时此刻模型内部的运作机制,使用一些定性或者定量的实验来证明你的观点,这些也是必要的。这意味着那些即使在调试过程中性能不理想的内容,既然可以作为实验结果放到正文之中。

一个简单的例子是关于学习率的敏感性,在调试的过程中,按照数量级对于学习率进行缩放是常见的调参技巧,假如说进行了反复的调试,但是性能没有什么变化,那么这些实验结果就可以作为「模型对学习率不敏感,非常稳定」的佐证;假如说在调试中有了明显的变化,那么则可以阐述如何更好地选择学习率。

其二是在实验过程中依然关注哪些问题是存在的,老实说之前的创新点确实可能不大,后续我们会阐述针对有限的创新应该如何形成一篇论文,在这里明显更好的结果是发现新的问题,并且对于方法进行更多的补充。

在完成了主要实验的同时就可以进行论文的写作了,这也是形成一篇论文中最后的重要环节。写作主要从三个方面进行讲解,分别是故事线、创新点以及作图。

一种调侃是当今的写论文就是在讲故事,这从某方面侧面反映了事实。所谓讲故事以及所谓论文的故事线,完全不是一个贬义词。本身论文是事关学术的,这意味着在论文中,你不是在讲述那些你费尽心思写下的代码机制是如何实现的,或者各种调参中你是多么的辛苦,你是如何使用一个 torch 的类做到了某个模块,而是需要赋予整个论文一条故事主线。继续下面对于深度的例子,这条主线可能是当前深度信息的缺失导致了模型抓取精度的丧失,从而引出如何将深度信息更合理的编码到模型中的问题,并且讲述自己论文的贡献点。

所以这里就是第二点了,也就是如何阐述论文的贡献点,一般来说论文的贡献点都在三条左右,其中可能包括一点是在当前所有的测评基准中都获得了 SOTA 的性能,但是另外两件往往事关方法本身。如何从巧妙的角度找到切入点,并且贴合故事进行讲述,这是需要技巧的。

对于上面提到的 idea 来说,我们之前讲到合理的深度输入位置,可以带来更好的改进,这里就已经是一个关键创新点了,而在此基础上需要衍生出下一个点。

例如,如果使用目前已有的深度编码器,这意味着模型都是在通用数据上进行训练的,而我们其实希望我们的模型可以聚焦于机器人领域的深度信息,这些深度信息是具有特征的,比如说对于腕部视角来说,一因为相机固连在机械臂的夹爪上,夹爪部分的深度不变,而这些可以作为锚定的信息,可以为模型带来更加准确的深度估计,那么自然也可以提出一个类似于机器人域上的深度信息微调的贡献点;又或者就像上面提到的内容一样,同样出于让模型适配机器人数据,那是不是对于最后任务上的训练过程,依然可以不冻结深度编码器,从而自然引出了是否可以设计一个多阶段训练的策略。诸如此类的方法还有很多,可以充实你的框架。

最后一个要点在于作图,作图实际上是论文呈现中非常重要的一个环节。一种说法是,好的作图可以让你不看论文就理解方法,甚至性能的图表也可以让你不看文字就理解他想表达什么,这是一个需要长期锻炼的能力,多看多积累审美。在这里推荐使用 PPT 进行作图。

值得一提的是,读者在阅读论文的过程中,不少的领域中通常会有极其复杂的作图,若干的模块交织在一起,看上去十分有创新点。然而需要怯魅的是,事实上排除一些确实需要工程实现的论文,例如某些 Agent 论文,绝大多数这类论文实际上反而是没有核心的创新点以及故事线,而是在堆砌一些看上去不明觉厉的模块,最后也难以进行非常详细的分析,对于他们如何达成了最后的性能。

在论文的写作过程中,一个重点在于反复向前辈以及老师寻求反馈,并且进行迭代。记录他人的指导,并且详细的落实,甚至在部分有分歧的地方咨询他们的指示,在大多数时候他们都是正确的。

作为科研中新手,读者的第一次论文写作可能过于理想化,例如对于一些自己方法的 feature 进行了 overclaim,一个想法是这样讲才会更加抓人眼球或者令人印象深刻,而前辈的建议则不建议这么说。这实际上都是从以往的经验出发,过分的 overclaim 反而会以来审稿人的质疑,就像过分的遣词造句会使得文章晦涩难懂。

适当的故事是有助于表达的,但却在于如何将你的实际方法串联起来,并且形成完整的表述,而并非去讲云里雾里的新名词。让别人能够立刻看懂论文才是第一要务,也是一篇好论文的核心素养,你需要在实验部分进行细致的分析,或者在方法部分展现有趣的设计,而非堆砌废话。

与此同时,丁霄汉在 Writing AI Conference Papers: A Handbook for Beginners 中给出了一个更加聚焦到细节的论文写作流程,感兴趣的读者可以参考。

形成论文之后,下一个重点就在于投稿了,但事实上一般来说选择投稿的会议往往在正式论文形成之前,从而导致你需要在会议投稿截止之前进行经典的 rush,从而按时完成你的提交。

在这里简单介绍人工智能领域的投稿概况,排除诸如 NSC 这种最顶级的刊物,在人工智能领域的一个普遍现象是会议的含金量大于期刊,这是因为人工智能领域的迭代速度过快,而期刊的审稿周期往往更长,因此周期更短的会议更受研究者的喜爱,从而形成了这样的格局。甚至到如今大家同样愿意将论文投稿到预印本平台,让论文可以第二天就发布,从而进行宣传。毕竟预印本平台也可以算引用,影响力即是远远大于会议中稿(毕业要求除外)。

目前在国内存在的评价标准是 CCF 评级(SCI 分区并不在人工智能内被认可,假如有人和你强调他的论文是 SCI 某区,这往往意味着他的论文含金量较低),分为 ABC 三个等级,一般来说 A 才是所谓的顶会。当然在不同的领域中也有所例外,而 A 中也并非全都是好的。例如在机器人领域的 IROS 评级为 C,更加广泛的,ECCV 作为计算机视觉三大会,评级为 B;而 ICLR 作为顶级会议,甚至没有评级。当然也存在包括 TPAMI 在内的不少顶刊,认可度依然很高。

论文投稿首先在注册,会议中通常需要在网上搜索会议的信息进入主页,然后前往对应的平台进行注册,注册过程往往是免费的,之后你需要在截止日期之前投稿的论文。在论文正文的提交同时还可以提交附录,包括文本形式的补充材料,以及甚至可以有视频以及网页,当然在其中需要注意的是双盲,也就是你不能向审稿人透露你的身份,即使是无意的泄露也会导致被直接拒稿,即 desk reject。一些会议的补充材料需要在正文截止之后的一周内提交,剩下的可能需要同时提交。

在投稿完成之后就只需要等待结果了,第一轮审稿意见由审稿人给出,一般一篇论文会被分配三到四名审稿人,他们会在对论文给出意见的同时进行打分,之后你可以对他们的意见进行回复,解释他们认为的不足并且提供补充以及修改,也就是所谓的 rebuttal。不少会议要求回复在一页 pdf 之内,这意味着这一要求依然存在:保持表述的准确与简洁。

本质上来说,审稿人的意见仅供参考,最后的是否接受的决定则由 meta reviewer 决定,但是一般来说依然有必要进行参考,一个基准是评分是否都在 borderline 以上,也就是没有负分,对于五分制的会议来说,意味着每一个分数都要大于等于三。

一个好消息是审稿人在看到你的回复之后会再次修改分数,并且在此之后交给 meta reviewer 进行决定。

大多数论文的整体流程就是如此,在过程中你当然需要决定何时继续课题,这个课题已经难以进行或者需要撤稿,在中稿之后你才需要正式进行注册,也就是进行缴费。一般来说大多数的会议都需要至少一名作者进行正式注册,而同时你不需要让全部作者都注册。注册之后就意味着你的论文可以被正式接收了,在此之后你需要提交一个正式版本,称之为 camera ready,然后你就不需要管了。线下参加会议并非必须的,但是确实是可以选择。

以上就是一次完整科研的流程了。

在这里再次回到一开始的命题,关于是否第一个课题就是自己独立完成,其实本身和参与别人的课题没有非常大的区别,但是确实会带来更多的坎坷,这意味着上面的事情内容大多数都需要你独立完成,花费更多时间思考以及试错,不过在结束之后也可以为你带来更多的成长。

而在第一个课题结束之后,接下来就是在继续对于这个课题内你发现的问题开始下一段课题,或者重新在更广泛的领域中去寻找新的问题。