How to Read a Paper ?
本文最后更新于:2023年7月18日 下午
Researchers spend a great deal of time reading research papers. However, this skill is rarely taugh, leading to much wasted effort[1].
本文旨在通过学习前人的经验,形成自己的一套阅读文献的方法。
在开始阅读文献之前,首先要确定大致的研究方向,并对相关领域有一定的了解:
- 该领域存在的价值是什么?
- 该领域有哪些基本概念、专有名词、Key Words?
- 该领域必要的 Preliminaries 有哪些?
- 该领域能 work 的基本原理是什么?
- 该领域最著名的工作、成果有哪些?
以上内容大部分可以在中文博客中找到前人总结好的文章,我们要做的任务就是广泛搜集、大量阅读、形成自己的 First Impression。此外,还可以在 ArXiv、GitHub、Daliy Papers、Towards Data Science、Paper Digest、Connected Papers 等网站上找到有用的资源。
以上最好能输出第一篇自己的 Overview 博客,接下来才是真正接触文献。
读什么?
初学者
作为一个刚踏入新领域的初学者,读文献的优先级应该是[2]:
- 近一两年该领域有影响力的 Survey 或 Review(视领域的发展速度而异):综述一般会将各个流派以及最先进的方法整理出来,读完后会对该领域有更深的认识,同时可以完善此前的博客。
- 近五年内该领域的经典著作(高引用,具有启发性的):就算读不懂也会有很多博客讲解,并且会有 backbone 的各种源码实现,最好结合起来看,阅读的同时输出若干篇精读笔记。
- 经典著作引用的更经典著作(引用量达到一定量级):时间可能会过于久远,领域也可能不完全契合,但这些文章绝对值得一看。
- 近两年的顶会 SOTA(有开源代码优先):帮助你更快地掌握该领域最新的热点。同上,阅读的同时输出若干篇泛读笔记,泛读过程中对有启发的文章加以精读。
- 其他相近领域可能有启发的经典著作、综述。
学术圈唯 SOTA 论的风气严重,几乎每篇论文都会声称自己达到某某任务的 SOTA,筛选时更要区分 Trick 和真正的 Contribution,不要在 Trick 上花太多的时间。
确定了优先级后,做好以下的事情:
- 根据此前的积累,辨识并搜集有用的文献;
- 使用
Zotero
管理文献,使用Notion
管理阅读; - 多和导师、师兄师姐沟通,不要开局就踩坑。
研究者
如果你对当前领域已经有了较深的认识,甚至取得过一定的成果和产出,下面还有三种扩宽知识面的方法[6]:
读大牛:如果他们在领域经典著作中高频出现,我们可以在 Google Scholar 主页找到更多的资料:
- 他的从博士阶段至今的研究课题;
- 他的高被引经典著作、形成的写作方式;
- 他的研究方向变动,特别是在领域有重大突破的时间节点;
- 他的最新论文动态(可能指示着领域未来的热点)。
扫会议:最新的会议 Accepted List,扫一遍耗时略久,但可以保持对领域的清晰认识:
- 通过关键词云,判断其他人的研究动向;
- 从其他人的 method 中摘取灵感。
追踪论文:在 Google Scholar 选择一篇你关注的文献(经典、强相关),添加引用提醒:
- 进入文章的引用列表(cited by),点击 Create Alert,新论文引用该论文时,就会有邮件通知;
- 进入作者主页,点击 Create Alert,当作者维护自己的主页时(有新文章),就会有邮件通知;
- 有时候,论文还没发表,就已经能够通过引用关系找到该论文。
怎么读?
一篇论文的构成
首先要了解论文各部分的重要性[3]:
- Abstract:论文最重要的部分,概括问题的提出到解决,一般由导师直接把关;
- Introduction:重要性仅次于摘要,内容更加易懂,带有最关键的 Figure,指出本文的 Motivation 和 Novelty;
- Related Work、Background:对领域内工作的分类和总结,面对一个生涩的主题时读者则需要阅读,但通常没什么干货;
- Method、Approach:论文的模型算法细节,对于理解本论文非常重要;
- Experiment、Evaluation:会提出重要的 metric,results 中有会对比其他工作的 Table;
- Discussion、Outlook、Conclusion:全文总结和展望,很可能会指出文章的缺陷;
- Reference:论文引用的文献列表;
- Appendix:部分无法放到正文中的内容,如证明和算法。
综上,无论精读还是泛读,看一篇文章的正确顺序应该是[7]:
- Abstract & Conclusion
- Introduction
- Figure & Tables
- Evaluation metric
- Others(如果要精读)
准备工作
- 一篇初步完成的 Overview 博客
- 使用
Zotero
搜集整理好的文献 - 使用
Notion
创建一个 Paper To Read 的优先级 List - 使用
Notion
创建一篇 Paper 的精读 or 泛读模板
泛读 Pass 1
目的:在有限的时间里筛选出或许有用的论文,并简要记录在表格中
顺序:
- Title:论文是不是跟自己目前的工作相关?
- Abstract & Conclusion:论文试图解决什么问题?为什么这篇文章能中?
- Introduction:论文的动机是什么?故事讲的如何?
- Figure & Tables:解决方案之关键是什么?
要点:
- 预计用时 10-15 分钟;
- 得出结论:这篇文章要不要继续读下去?优先级如何?
泛读 Pass 2
目的:知道文章每一块在干什么,总结出一段泛读笔记
顺序:
- Abstract & Conclusion:论文试图解决什么问题?为什么这篇文章能中?
- Introduction:论文的动机是什么?故事讲的如何?有什么贡献?
- Related Work、Background:有哪些相关研究?如何归类?
- Method:解决方案是什么?图和方法怎么对应起来?值得学习的绘图技巧?
- Experiment:实验是如何设计的?用于定量评估的指标和数据集是什么?
- Table:作者提出的方法跟别人的方法是怎么对比的?差距在哪?
- Reference:论文中多次引用、提出改进的重要文献,有哪些值得一看?
要点:
- 预计一天看个几篇;
- 不用太注意公式特别的证明,或者一些很细节的处理;
- 如果还没有特别没有搞得懂在干什么,可以读作者引用的重要文献;
- 可以并行阅读,互相启发,加深理解;
- 得出结论:这篇文章值得精读吗?
精读
目的:知道文章每一句话在干什么,总结出一篇精读笔记,简要回答以下八个问题[4]:
- 论文试图解决什么问题?为什么这篇文章能中?
- 论文的动机是什么?故事讲的如何?有什么贡献?
- 论文中提到的解决方案之关键是什么?如果是自己来完成会怎么做?
- 论文中的实验是如何设计的?实验的难点在哪里?
- 论文中的实验结果和分析有没有很好地支持需要验证的科学假设?能否改进?
- 用于定量评估的指标和数据集是什么?代码有没有开源?能否复现?
- 论文提到的思路、模型、实现、工具、数据集,有哪些可以为我所用?
- 下一步呢?论文中提到的不足和拓展,有什么工作可以继续深入或跟进?
如果这篇论文足够重要,足以在组会中讨论、分享它,最好按照上面十个问题进行梳理,特别是前两个问题(介绍)和后两个问题(体会)。
要点:
- 一天能看完一篇吗?
- 很多原因会造成理解不够深入甚至理解错误,需要多次阅读(如果有必要,多次讨论)来避免这类问题;
- 如果在阅读过程中出现了大量盲点,反思是不是 Preliminaries 的掌握不够;
- 学会挑刺,不能顺着作者的逻辑,要换个角度尝试去反驳它,就像审稿人一样。要能够找出这篇论文的优缺点、有哪些改进的空间,这样才能在相对成熟的研究中发现新问题。
后续工作
如果此前已经有了足够的 Preliminaries,且有过一定的文献阅读经验,到这一步时大概已经过了两三个月了。
此时你已经阅读了大量文献和源码,和导师、同门进行了几次讨论,这时候还留在筐子里 ideas 很有可能是可行的,现在就需要把你的 idea 实现了。这个阶段也不必孤军奋战,可以找同组的小伙伴一起合作。
又过了一两个月,当你的 idea 基本证实有效之后,就可以开始动手写论文了。主要使用的工具为线上多人合作的 Overleaf。