First Experience in Research

7 minute read

Published:

开学一周,感觉最近在各个方面都遇到了一些瓶颈,很容易陷入到“看似在工位上坐了一整天却没什么实质性的产出”的神奇的状态。不太喜欢这种感觉,思来想去,效率低的原因之一是缺乏一个比较好的时间规划方案。这学期课很少,也没打算在这学期找实习,大概是会把大部分时间都投入在科研的尝试和一些考试上,因此一个合理的计划还是有必要的,该玩的时候好好玩,该学的时候就好好学。还有一个原因是现在做的事情本身就到了更困难的一个阶段。借此时机,对过去半年的学习状态做一个总结,以及想一想接下来要做的事情。

在我认识到上面这些问题的同时,突然发现我似乎已经开始用一个科研人的身份来要求自己的学习和生活了。虽然我不认为自己已经入门了,也不知道自己是不是做好了充足的准备,但过去半年的经历让我感受到自己是正在往这条道路上走的。

说来并不复杂,其实最主要的就两方面的突破:论文阅读能力、代码能力。由于没人带,所以基本上是自己一步一步摸索着前进,这中间的尝试还是值得记录一下的。

先说说读论文。其实在上学期刚开学时,阅读一篇学术论文对我来说还是一件非常困难的事情——在此之前我只看过有关 Transformer 和 BERT 的几篇影响力最大的工作,且基本上不怎么看实验部分,往往看完了方法就当看完了。当时认识到想要跟着师兄做一些工作的话还是得先多读几篇论文,总得对这个领域有一定了解吧,于是在九月的下半个月断断续续地开始读 passage retrieval 领域早期的一些经典工作。这个时候属于硬着头皮去完整地读一篇论文。有一个经典的“看三遍”的方法,第一遍看摘要、结论、图表;第二遍大致浏览全文,基本上理解文章的方法、贡献;第三遍精读,这个时候做到对文章的每一个细节都很清楚。按照这个步骤,我当时应该是做到了第二遍的水平。

这段时间有一件事值得一提。当时开组会,老师说我可以对一个小方向做一些调研,我脑子突然一热,说“下周组会刚好轮到我分享,就分享一下调研的结果吧”。于是乎,在那周的周末,我在两天内找到并看完了差不多十篇论文,之后又花了两天整理思路、完成了 PPT,最终顺利完成了分享(甚至讲了半个多小时)。这个事情让我收获还是很大的,一是快速泛读的能力,在阅读的时候快速把握重点;二是对相同方向的论文的梳理和比较能力,这个是在之前阅读论文时比较缺乏的,在这次机会中得到了锻炼;三是演讲和展示的能力,在觉得自己看明白之后尝试去对别人讲明白。当然,短短一周时间并不能带来质的提升,甚至现在看来当时的分享甚至存在很多不足的地方,但这个尝试为我接下来的论文阅读提供了一个改进的方向。

再之后到现在就是阅读量的积累了。除了阅读正在跟进的方向的论文之外,有一些专业课也需要阅读一些经典论文,或者做一些小调研,这些阅读其实都产生了潜移默化的影响。随着阅读论文数量的上升,很多东西都像水到渠成一般,例如会觉得开始掌握一些(但不多)基本的鉴赏能力、对比能力,对领域也能形成一个初步的认识。说到底,在入门阶段,提高论文阅读能力的唯一方法就是多读。

再聊一下写代码。其实我一直觉得自己代码能力还行,但在半年前,我对深度学习代码的了解还是比较空白的,甚至连写一份完整的 CNN 训练代码都会觉得费劲。这里就不得不提到上学期的一门课——林衍凯老师的《知识表示学习》,这门课虽然被吐槽作业多且难,但对我的代码能力的提升是非常非常巨大的。原因很简单,我们需要从头开始构建一份深度学习代码,包括数据、模型、训练。而比较有意思的事情是,上课是从一个比较高的视角讲的,导致我们面对一个之前不太了解的任务(例如命名实体识别、关系抽取)时,根本不知道如何构建代码。没办法,只能去阅读一些优秀的源码仓库。于是,我为了搞懂整个任务的流程,基本上把几个有名的开源工具包从头到尾看了一遍。之前并没有这种经历,因此这个事情对我的代码阅读能力还是有一个比较大的提升的。有了这个从头构建的经历,我终于对“数据、模型、训练”这三部分应该怎么写都有了一个完整的认识。在这段时间内,我还阅读了一些论文的源码,接触到了用 huggingface 的框架把代码写得更优雅的一些方法,于是在上学期后半段的作业里,基本上就是对框架使用的实践,这件事情也是挺有意义的。

到了寒假,就是开始跑论文源码的阶段了。这时候会发现,看完论文和代码复现结果中间还是有一点点距离。于是用了大概两周研究 dense retrieval 的一个开源工具包,并且把训练和测试的完整流程跑通了。后来觉得这个仓库写得是真的好,于是就 fork 过来以此为基础做一些适配的改进,打造一个自己的代码库。这时候我认为我的代码能力已经能支撑我完成一些简单的工作了,剩下的无非是要用什么再学什么的东西。

当然,还有一些其他方面的进步,例如几次作业展示,制作 PPT 和演讲的效果个人感觉还是不错的。再有就是写作,通过作业的报告,也算是慢慢开始尝试向学术写作靠拢。

寒假的时候,做深度学习课程的大作业,从前期调研到写代码再到写报告,如果当作对这半年来学习成果的检验,那个人感觉现在应该算是快“上道了”。当然还是开始时所说的话,我并不认为自己已经入门了科研,因为还没有经历过一个完整的科研周期,但确实是在往这个方向在努力。

总结下来,无论是读论文还是写代码,都是一个实践出真知的过程,“make your hands dirty”,多看、多想、多做,虽然不知道何时能够达到质变的效果,但在此之前做一些量的积累,总是不会错的。

这学期应该会继续做一些探索,也希望未来能真正在这个技术变革的时代(ChatGPT 出来之后更是如此,或许能再写一篇讲讲有关它的事情)做出一些东西,至少先朝着这个方向努力。当然除了科研上的努力,这学期还有挺多任务的,也需要对未来的升学或就业有一些规划了,希望尽快调整一下状态,在半年后,能有一个好的结束和开始吧。