很幸运不久前,发表了第一篇学术论文。作为一个初入科研的小白,我深知自己资历尚浅,不足以谈论研学之道。但在老师引领做论文的过程中,也有一些体会和感悟,借此机会与大家交流相互学习,分享一下自己阅读论文、代码实践、论文写作的经验,希望能给大家带来一些启发与思考。

基础准备:完成FLIP学习

​ 根深而枝叶茂,打下坚实的基础是进行科研工作必不可少的,科研的基础包括科研工具的使用和知识的积累。作为Tulip lab成员,一定要把握住机会完成FLIP课程学习,在此学习过程中初识各种工具,攒下科研基础知识弹药储备。即便并不能完全掌握各种工具的使用,也会在日后学习使用中逐渐的熟练和得心应手,大大提高工作效率。基本科研工具在FLIP中都会讲到,这里列出一些常用的在线科研工具:

​ (1) LaTex在线文档编辑工具**overleaf**:overleaf可以在线多人共享编辑文本,是论文写作过程中必不可少的工具,LaTex基础语法会在FLIP课程中系统学习。

​ 同时推荐一个表格转换工具tableconvert:在论文写作过程中可以快速将实验结果转换成LaTex格式。

​ 一个在线LaTex公式编辑工具**latexlive**:可以在线编辑公式,将论文中的公式图片识别为LaTex格式。

​ (2) 在线绘图工具**desmos**:desmos是一款在线函数绘图工具,可以帮助快速可视化各种各样的函数,在科研过程中,将公式可视化会大大帮助我们完成对数学原理的理解和思考。

​ (3) 代码版本管理工具**github**:科研过程中代码管理是必不可少的,使用github管理代码会带给你很棒的体验。

​ (4) 代码debug问答网站**stackoverflow**:在实验过程中,遇到bug是不可避免地,该网站有很多技术大牛分享各种问题的解决办法。

​ (5) 搜索相关论文在线工具**connectedpapers**:在论文阅读过程中,想要查询一篇感兴趣的相关文献时,可以在这个网站上进行查询,会将相关文献以图网络可视化的形式展现出来。

​ (6) 论文方法、数据、代码和state-of-the-art对比网站**paperswithcode**:该网站提供某项任务下(例如图片分类,节点分类)研究方法发展趋势,提供相关论文数据和代码,大大帮助我们了解某一任务下当前最新研究情况。

​ (7) 斯坦福大学提供的一些开放的实验数据集:在实验过程中可以在上面寻找相关实验数据。

​ 除了上述一些能帮助大家提高科研效率的工具,FLIP中还会学习Data Science数据处理知识、机器学习、概率论等基础理论知识,深度学习框架pytorch、包管理工具Anaconda等。这里再分享一些自认为对积累科研知识基础有帮助的在线内容:

​ (1) pytorch学习资料:对于想深入了解pytorch框架的同学,可以尝试学习一下。

​ (2) 动手学深度学习深度学习Grokking Deep Learning:讲解深度学习的书。

​ (3) 莫烦PYTHON:以有趣的方式讲解一些python基础教程、数据处理方法、机器学习、深度学习内容。

​ (4) 斯坦福大学的免费公开课

​ 最后建议大家在学习一些python包比如matplotlib、plotly、scikit-learn等时,查阅官方文档进行学习是最快的,网上的各种解读有时不够详尽,可能会产生一些误解。

科研积累:广泛阅读,复现代码

​ 谈到论文阅读入门,要多思考、多提问题,对于新接触一个领域的我们来说,此时拥有极强的好奇心和发散的思维。满怀好奇,便会有进一步探索的渴望,带着这份求知的欲望会带来意想不到的学习效果。开阔的思维,让我们不受已有相关领域知识的束缚,可能会提出一些现有工作没有关注到的问题,进而成为我们工作的研究动机,这个阶段要及时将自己的问题和想法与导师、师兄师姐交流沟通,互相启发学习。例如,在图数据处理任务中,GAT的作者想到了要区分不同邻居的重要性,在GCN的基础上引入注意力机制进而提出GAT方法。

​ 收集相关领域的文章,通过广泛阅读总结当前领域最前沿关注的一些问题,例如图网络在早期通过加深网络层数来考虑更多的邻居信息,却引入了“过平滑”问题。相关文章的收集可以通过在基础准备中提到的paperswithcode、connectedpapers搜寻,《中国计算机学会推荐国际学术会议和期刊目录》列出的相关类别A类会议期刊中查找,关注公众号及时获取推送的最新研究成果,导师推荐的文献以及师兄师姐的帮助等。在广泛阅读过程中记录笔记,笔记整理好的标准是当你看到这个笔记的时候,能快速回忆起一篇文章的内容,笔记整理时关注:

​ (1) 概括论文做的事情,包括基本思路和解决的任务;(做了什么)

​ (2) 论文的研究动机;(为什么做)

​ (3) 论文的创新点;(怎么做的)

​ (4) 论文的具体思路;(做的细节)

​ (5) 有些文章会进行理论分析,具体公式原理或许看不懂,尝试理解一下作者从什么角度进行的理论分析;(理论支撑)

​ (6) 实验效果,关注评估指标,是性能的提升还是减少了时间计算资源开销。提出一种全新的评估指标可能会是文章的重要创新,甚至推动领域发展;(做的结果)

​ (7) 最后总结自己的思考。

​ 在广泛阅读的过程中,对经典文章方法进行复现,阅读论文开源代码是最能深入理解文章技术细节的途径,代码中的细节可能带来豁然开朗的感觉,学习一些大佬的写代码风格、处理数据的技巧、模型训练过程中的一些track,大家不要怕动手实践,要勇于尝试,做科研写代码是必不可少的,或许在刚开始阅读代码时较为吃力,当复现了一个领域内多个state-of-the-art的实验后,便会越来越熟练,因为深入一个领域后,会发现环境的配置、数据的处理,模型的实现结构大同小异。

问题探索:

​ 在阅读论文的过程中,产生疑问是正常的,提出疑问是产生idea第一步,对于文章理解上的疑问,可以通过阅读源代码解决,与老师同学讨论。在代码复现过程中,大胆尝试提出疑问,并对任何一个想法进行快速实现验证,比如换新数据集、让模型做更复杂任务、调整模型中某些模块进行分析等,通过各种可视化工具分析结果,重点关注偏离我们预期的一些结果,当实验结果偏离预期的时候,不要轻易放弃,这代表着我们的知识与实践出现了不一致,需要详尽的分析这个不一致出现的原因,没有人会一开始便达到state-of-the-art,不断分析结果迭代实验,一份工作就会渐渐浮出水面。历史上许多科学发现,都是在理想与现实出现偏差的时候被重视而产生的,惰性气体氩的发现就是来源于两种制备氮气的方法出现了千分之五的误差,被英国物理学家瑞利刨根问底的寻找原因进而发现。

解决问题:

​ 当捕捉到异常结果后,接下来便是解决问题,解决问题并不是一蹴而就的,需要知识的积累与沉淀,广泛的阅读是做好知识沉淀的一种途径。问题的解决或许会受到不同领域相关方法的启发,比如将图像领域的ResNet思想引入图网络中提出GCNII解决深层网络的过平滑问题,将U-net思想引入图网络中提出GCLN等;或许来自老师的点拨指导。保持一种开放的心态,灵活的借用各种方法和力量去尝试,解决问题,对任何一个可行的方法在复现原代码的基础上进行快速改动与验证,只有动手,看到结果,给出反馈,不断迭代改进才能真正解决问题,要不辞辛苦,做到极致。

论文写作:

​ 在前期工作中准备好实验和模型外,论文写作是展现工作重要的一环,我们首先要做的是说服自己,自认为有价值的工作,才有信心去说服读者,首先我们就要思考清楚工作的重要贡献是什么,列出两三个contribution,为整个写作过程定下思想基调,全文以此展开。论文写作还要明确一个问题:写作顺序和排版顺序,这两个顺序是不一致的,写作顺序更加贴合我们思考和研究的顺序,排版顺序要贴合读者的理解顺序,排版顺序以投稿刊物为准,要以读者为核心,把故事透彻的讲明白。下面给出我们的写作顺序:

(1) 首先建立论文骨架: 论文骨架可以是我们的研究提纲,也可以是实验结果展现的图片和表格。我们要以和导师确定投稿刊物的模板为参考,建立论文骨架,而后进行填充。

(2) 实验结果(results): 将实验结果先展现出来,以contribution为基调,以实验结果为支撑,建立全文的写作方向。实验结果撰写要对图表进行详细的解释说明,分析和对比。

​ a. 强调和突出重要发现,如果有和SOTA模型的对比实验更好;

​ b. 指出文中相关结果位置,多以图片形式展现,表类型结果可以将好的结果重点标注一下,方便读者找到重点;

​ c. 对结果进行分析评论,可以通过消融实验等验证提出的方法/模型的有效性,通过结果证明本文方法是合理正确的。

(3) 方法(methods): 研究方法可以是自己的实验记录和研究笔记整理成文,这是论文的主体。可以将方法部分以理论分析或其他要素为单位进行划分,结构清晰有助于读者更好地理解。比如可以从现有的相关工作的不足之处引入,分析对现有工作不足的理解,然后引出用来解决问题的想法,进一步开始介绍自己的模型。

(4) 讨论(Discussion): 讨论是对方法和实验结果中可能存在的问题(如参数敏感性检测)进行回答,对结果进行分析,写好这部分,让读者理解明白文章内容,或许会减少审稿人的提问。

(5) 结论(conclusion): 总结上述内容,提出对未来的展望。

(6) 引言(introduction): 引言包含methods、conclusion的概括:

​ a. Introduction部分要提供作者研究的背景知识、科学问题及该问题的重要性;

​ b. 给该问题一个小的总结(综述);

​ c. 提出该问题是否存在争议,提出一些对当前研究的延伸性思考或补充;

​ d. 简单介绍论文的研究结果,是否完成了或部分解释了提出的科学问题。 ​ 上述四个部分是层层递进的,这样论文整体显得结构分明,也利于读者把握文章主要贡献。

(7) 摘要(abstract): 摘要是对论文正文的总结和概括,是文章的核心,短小而精炼,突出以下四点:

​ a. 研究目的:明确研究范围,即研究是普遍的,还是特定的,以及明确作者的主张或者态度;

​ b. 研究工作:就是论文方法methods 章节部分的提炼;

​ c. 研究结果:客观地介绍作者的实验或者发现,即从研究中得到了什么答案;

​ d. 研究结论:给出一个总结作为摘要结尾,突出说明研究的意义以及整篇论文的重要性。

​ **(8) 致谢(acknowledge): **致谢部分要写资助的项目,也可以致谢其他人和组织。致谢和论文内容无关,因此放在写作顺序的最后一步。

​ 第一次写作科研论文,受到罗老师很多的帮助,在写作方面还需学习,组内前辈分享的论文写作工作具有很好的指导意义,大家可以借鉴学习。最后,祝愿大家科研学习顺利,收获满满。