准博士生教你如何阅读论文

AI方向如何阅读论文

  • 绪论
  • 会议整理
  • 一篇论文的主要结构
    • Abstract
    • Introduction
    • Related Work
    • Approach(framework名称亦可)
    • Experiments
      • Implementation details
      • Results
      • Ablation Study
      • Discussion
    • Conclusion
  • 如何阅读多篇论文
  • 怎样读/写related work
  • 怎样读approach
  • 结语

绪论

作为一位工作两年多再来读博的博一学生,论文读了不少,但一直没有好好总结过读论文的方法,在这里带着大家一起谈谈如何阅读一篇论文。读博后,主要关注CVPR、E(I)CCV、AAAI等顶会文章。读者朋友们如果有更好的论文阅读经验,欢迎一起讨论。(可添加本人的微信公众号:HEllO算法笔记)

会议整理

发现一个网站: conference list,整理的还是全的,对照会议时间表,方便大家对自己的论文档期有所安排。这里主要关注截稿时间,会议时间一般在截止投稿时间以后半年左右可以自行查看,毕竟ddl对于我们才是最重要的~
注1:只有奇数年才有ICCV,偶数年才有ECCV,虽然ECCV是CCF B不过明显偏低了。两者真实水平比较接近,都很高,且会议时间节点大致接近。
注2:上面conference list的网站中似乎没有收录BMVC。BMVC虽是CCF C类会议,但是水平可以说是B+,而且投稿的时间节点比较好,并且据说非英国文章的收录率更高些,也可以去英国玩一趟~
注3:AAAI是CCF A,但是相对来讲水一些,投稿难度稍低一些,所以研一的学生如果可以,从入学开始就冲着第二年的AAAI赶一波还是挺不错的节奏。
期刊则主要是TPAMI,有时也会有IJCV、TIP等,投稿时间不限,一般都是会议论文发表之后改一改再转投期刊,很少有直接去莽期刊的。国内教职看期刊似乎更多一些,相比会议来讲,有些小会可能更有价值。
读论文其实是一个模式识别的过程,不断地学习不断地总结,读多了,就会把论文拆解成套路,也就能逐渐归纳总结出一篇好论文、投中了的论文应该是怎样的结构,这样就会提高我们的论文被接受率。
所以在接下来的讲解中,我也会同时以写论文的角度来审视论文本身,读和写在思路上应该是有共通之处的

一篇论文的主要结构

这些顶会的论文基本结构都是大致相似的,总结如下:

Abstract

这个部分我认为是按这个小结构去写的:
所要解决的问题大类(比如Monocular 3D Object Detection)多么重要,有哪些应用场景(比如为自动驾驶提供了解决方案);
main challenge是什么地方(可能有很多,但会挑这篇论文的主要贡献点讲)
主流做法大致是如何的,但是存在一些limit
本文所提出的方法是怎样做的(重点展开部分,一句话讲不清就会加连词细讲)
方法的novelty和结果,比如数据集上排行第一,或泛化性能怎样怎样好
注意,在Abstract中是不能有任何引用的,也不会提及任何related work。
同时,还有缩写的问题。一般来讲,Abstract与正文的缩写是不相通的。在英文中使用缩写都是在第一次出现时加括号,然后后面就可以直接使用缩写了,比如第一次提到Convolution Neural Network时在后面加(CNN),后面就可以直接使用CNN替代了。但如果你在Abstract中使用了缩写,在正文中需要重新声明。
我的理解是Abstract可能是会单拿出来看的,和正文属于分离的,所以需要重新声明。因此我们在写的时候,除非你是在Abstract中使用两次及以上这个术语,否则就不必定义缩写了。

Introduction

这一部分可以看做是对Abstract前半部分的进一步展开,毕竟Intro的作用就是顾名思义,做引入的。所以这就有点像是刘备打着皇叔的名号、君士坦丁承认基督教一样,我们需要为自己的论文找到一些背书,尽管这个背书可能是站不住脚的。
所以这就能扯得很远,比如SfMLearner那一篇,讲无监督的单目深度和ego-motion的,就可以从人类的视觉入手,声称人类可以对深度进行很好的单目感知,以及自我运动的感知,那么我的算法是不是就也具有成立的可能?再比如一些讲自监督、无监督方法的文章,就可以引用婴儿也没有ground truth,但他们同样也可以逐渐完成xx任务,那么其论文的工作是不是就有支撑点了呢?
又或者扯一些生物学里什么神经理论、心理学之类的一些理论,反正论文的reviewer也不是搞这些的,只要听着觉得还挺合理,就会对这篇论文开始产生一定的好感。
这一部分根据具体领域不同可能会写的有些差异,但也可以大致总结出来一个小结构:
从大背景上讲述所研究问题的意义,主流的解决方式都有哪些。这里会引用一些相关的工作,并对工作进行流派上的整理和归类,但大致说一下思想就好,后面的related work部分还会细讲。
本论文所属于的流派中,所遇到的问题是什么?(往往也对应着论文的motivation)根据前文的工作,有哪些关键性的结论?(比如提取特征很重要,然后附上几个引文,这一部分往往也是论文的基石和启发)
基于以上问题,或是某个具体的出发点,本问题提出……(常用话术:We propose a novel (task name) framework, xxx, which…)然后具体展开介绍一下每一个子结构。
本文的主要贡献点在于什么,一般可以三条左右为宜。有的论文也会把在数据集榜单上刷到SOTA(State Of The Art,当前最佳)也算作一个贡献点,大概是凑个数。(常用话术:Our main contributions are three-fold. (1) …(2) …)
到了这里算是一个分水岭,大部分人就会读一个Abstract+Introduction,然后就会声称读完了这篇论文。诚然,大家读到这里一般就可以判断出来,这篇论文对于自己的研究到底有没有价值,然后就会决定是否要继续往下读。

Related Work

这部分的内容通常是以加粗小标题来写的。比如自己的研究涉及了A、B、C三个方面,那么就会以A、B、C作为加粗标题置于每段段首,然后逐段讲解A、B、C这三个领域的工作进展。
这里的一段,并不一定就只有一个paragraph,同样地,如果这一个方面又可以进一步分为多个子方面,也可以再向下进行分层,这里的格式不太同意,有用数字加右括号的,有用斜体的,但总之大致结构都是相同的。
这一部分的内容乍一看凌乱稀碎,实际上很有研究价值,具体的读法我们在后面进一步讨论。

Approach(framework名称亦可)

这一部分就是具体展开介绍自己所提出的论文方法了,对于一些关键的模块也要抽离出来仔细讲解。
一般来讲会先给一个整体的网络结构(这一部分一般都是在论文的第三页,网络结构图一般也会被放置在第三页最上方),然后按照数据流的顺序逐部分拆解讲解,这些内容有时会被称作“subnetwork”;然后会从实验角度出发讨论损失函数的选择与设计,包括对超参数的讨论等,比如某某参数大了的话会倾向于学习效果A,小了的话倾向于学习效果B。

Experiments

前面已经讲完了炼丹的大致思路,那么此部分主要讲解的就是炼丹的具体步骤和效果了。这一部分大概也会分为三节,可以基本分为:

Implementation details

首先是数据集的使用,训练集与测试集的划分:如果前边SOTA工作都用的某种划分方式,那么为了公平起见一般也会沿用前人的划分方式,这样论文会更有公信力。然后是training procedure的设定,比如用的什么显卡,什么框架,现在pytorch都也要引用了;再然后优化器和具体的参数,比如你用Adam的话,初始学习率,learning rate policy之类的一般也都要声明;最后就是batch size,还有一些其他超参数的选择(这里指具体的数值了)。如有其他的细节可以再做补充,比如数据增强、目标检测中的NMS设定等。

Results

这里的results又分quantitative的和qualitative的。
quantitative的好说,自然就是打点,能干过SOTA的你就可以说自己是SOTA,很简单粗暴。一般来讲就是结合表单进行分析,拉开了第二名多大差距,可以是绝对的数值,也可以是相对的比例。
qualitative的则是指定性分析,往往会结合一些图片,大家要形成一种认识就是,新的SOTA并不一定是全面吊打老SOTA的,而很可能在某一部分吊打,另一部分拉胯,但最后总的数值更高些。所以在qualitative result中会挑那些吊打的几张图放到论文中,虽然颇有断章取义的感觉,但reviewer和读者确实没有话说。

Ablation Study

新手在读论文时可能会对这个概念非常陌生,它的中文名叫消融实验。注意,消融实验并不等于控制变量法,而是“减去变量法”。
这个概念其实并不陌生,举个例子大家就明白了。高中生物里面想要探究一个基因控制什么样的形状,一般怎么做?嗯,敲除这段基因。如果敲除这段基因后,生物体表现出蛋白质A分泌不足,OK那么我就知道这个基因控制蛋白质A的分泌了,这就是非常典型的消融实验。
所以消融实验一般是会先找一个baseline,有时也会称其为vanilla(这算是个梗吗,就是外国人觉得「香草」这个味道跟原味没太大差别,所以就代指「朴素」了),然后逐渐对其添加模块,以彰显出某一模块的作用。比如一个方法是由vanilla+A+B+C组成的,那么ablation study可以是用vanilla,vanilla+A,vanilla+A+B,vanilla+A+B+C组成的,以表现出A、B、C三个模块分别对于任务贡献了多少。也可以是vanilla+B+C,只要输入输出是允许的。
有时,控制变量法也会被算作Ablation Study,不知道是可以这样用还是说大家已经对这个概念泛化了。不光用于网络结构,损失函数往往也较常用于ablation study,以展现对某一内容施加惩罚的思想确实有效。

Discussion

这个部分是比较弹性的,不一定有。如何证明数据指标上更高不是过拟合、不是刷点刷出来的?这一部分就主要关注这些。常见的操作有,对中间层的feature map做抽离,做一些可视化,比如损失函数中说这部分是为了让训练出的A有着xx的效果,那么就需要对A进行一下可视化,看看到底有没有这样的效果。也可以做一些泛化性能上的比较测试等,总之这一部分算是锦上添花的一部分,所以说比较弹性——毕竟「锦」就已经足够让论文投中了。

Conclusion

这部分内容基本就是对Abstract的rewrite了,做一个收束全文的作用。主要内容就是提出了什么什么方法,有什么contribution,最终在哪个哪个榜单排行SOTA。个人感觉是最鸡肋的一部分。

如何阅读多篇论文

在了解了论文的主要结构后,这一部分更加侧重于讲解一些读论文时的宏观方式与论文管理方面的工作。
宏观来讲,读论文可以分为两种方式:BFS和DFS。我比较偏后者,这个东西全看个人习惯,现在我可能更偏向两者结合。
BFS就是说遇到不会的概念就先跳过,先速览全文;然后第二次稍微放慢速度些,主要着手弄懂一些基本假设;第三次可以弄懂更多的细节,这样逐渐往复,直至把全部细节弄懂,或者这篇论文不必要再读了。
DFS就是递归式地深层进入一篇论文,遇到任何不会的概念就立马去查,去读相关的CSDN、知乎甚至原论文,弄懂之后再回到原论文继续读,直至读完论文。
这里我比较建议:先BFS速读一遍论文,Abstract和Intro要细,Related work可以快速过甚至不看,Approach稍快,关注一些特殊模块,experiment图一乐。总体来讲第一遍要关注图和表,这样可以对文章形成初步的认识,并且判断是否值得你全文细读,有时可能只需要关键部分细读,就不必看全文。

怎样读/写related work

如果全文是值得细读的,那再具体进入文章,这里着重说一下related work这一部分。
很多人觉得这部分比较鸡肋,反正也不是“鸡肉”(框架主体部分),但又是论文形势要求,所以比较鸡肋,实则不然。我认为,一份好的related work,就能够让读者知道这篇文章的大致思路是从何而来,能否站得住脚。
一个领域那么大,就算是小同行,也要几十篇相关论文,这还没算ResNet,pytorch这种万金油文章,一篇论文是不可能有七八十篇引用文献的(有很多五六十篇的我都觉得有点离谱)。所以在related work这部分,需要对前序工作进行梳理,尝试找到多条脉络。
前序工作更像是一棵大树,大概传统方法可以算作根基,深度学习时代的第一篇可以被算作分叉口,然后逐渐分叉处许多篇精彩的工作。而一篇论文的related work,则更像是对着读者指,中间的哪哪片叶子、哪哪个结点对我的工作有着启发性的作用,而不是全部指出所有叶子,或是全部指出你看过的所有叶子。
读论文亦是如此,那些叶子结点可以看做是SOTA文章,父节点可以看做是历年的SOTA,或是其他的经典文献,很多人就盯着今年的CVPR读,那肯定是不行的。而我们知道,搞科研、进入一个新领域的第一步就是读综述,综述是可以帮你把这一切的脉络梳理得很好的,正是因为它cover了足够多的文章,建立的树才相对比较全面。
造成这种科研生态的原因,大概也是源于当今的科研模式,就好像酒馆战棋上分一样,我们做不了神仙,也不想“速八”(末位出局),那么什么样的文章才最稳呢?A+B又有充足实验量的文章。所以很多情况下,一个组follow另一个组的工作,然后又来一个什么组follow,就太正常不过了,甚至去github源码上都能看到“we borrow the code from xxx and xxx”等类似的字样,我并不是说这样不好,只是说线性发展是当下的一个常态。

怎样读approach

我觉得大家都曾有过这种感觉,就是这框架用的东西我也都懂了,也都知道了,他说自己哪里哪里厉害,我看着确实也觉得厉害,就这样读完了论文,过了两天啥也不记得了。。。。
这时就体现出了论文总结的重要性。不必要每篇读完都写个博客(如果你有这个闲工夫,那自然也是不错的),但可以至少提炼总结出一些关键点,这对我们后面写论文时的related work部分也是有用的,能够快速捡起来论文主要是在讲什么的。
有人习惯于用Mendeley之类的文献管理工具管理论文,我下过,可能是因为没有太探索和学习的原因,我感觉不如excel用着顺手。我习惯于开一个excel,对我读过的所有论文进行整理,分栏大致如下(例举自己地excel论文整理),每读一篇都会填写:

标题、文献类型、年份、作者、期刊等信息
1.阅读时间(可选)
2.论文题目
3.第一作者(注意equal distribution)
4.Institute
5.论文年份及会议
6.主题分类
7.关键技术
8.尝试总结
9.motivation
10.理解程度
Institute指论文/期刊的作者隶属于什么机构,这样一来可以看下是哪些机构在涉猎这个领域,主要是工业界还是学术界,二来也对领域发展的脉络有一定的了解。
主题分类指任务的大分类,可以分得很粗糙,比如单目视觉,也可以分得很细,比如单目深度,单目3D目标检测。这对于论文读的比较杂的同学比较有帮助,具体分类程度自我随意就好。
关键技术指一些比较通用的backbone或者模块化的东西,比如ResNet,ASPP,mobilenet的depthwise convolution,损失函数比如infoNCE等,除了一些神仙大作什么trick也不用就把点刷的很高,大部分工作还是会有很多trick的,或者是从trick中找到启发。
尝试总结部分是自己对论文进行闭眼复述。闭眼之后再反复浏览论文和完善你复述的内容。日后,我们可以通过自己写的总结部分快速捡起来一篇论文。
motivation部分,对于初学者可能比较陌生,但是一个非常关键的概念,仅仅理解到动机这个层面是远远不够的。我理解的motivation是指:从结果出发,看看别人的问题是什么。
一篇好的工作,不是魔改哪个模块,调调参刷到SOTA就行了,而应该是问题导向的,我想这一点在工业界应该是尤为强调的。比如当今SOTA在遮挡物体上解决的很不好(这可能是个很大的问题),那么我们能否找到一个方法去解决呢?最好的当然是能挖出来approach的某一部分出了问题,然后进行改善,大多数情况需要重新设计一个框架。像遮挡,深度问题中的镜面等等这都是老生常谈的问题了,很多时候大家比的是能否改善的更好,或是找到一些更细节的问题,但总之都一定是结果导向的,这样的文章是绝对的好文章。下面举几个例子:
典型的错误理解是:为了让自动驾驶的成本降低,不依赖于高昂的雷达设备,我们的动机是开展单目视觉工作的研究。这个只能叫Intro,只能叫研究意义。
可能不算错误的理解:我们的动机是为了让filter学习到怎样怎样的特征,因而设计了这样的结构。感觉这样的文章就比较A+B+实验量,不能说这样的文章错,或者没有意义,可能也是好文章,是大多数人的常规水平文章,也只能把motivation总结到这种程度了。毕竟不是所有文章都要解决问题,那每年也不会有几千篇顶会文章了。
优秀的理解:对于一些远距离的小尺寸目标,SOTA捕捉的不太好,所以我们的动机是让结构具有不同尺度的检测能力,设计了这样的结构。这样的文章就比较合理通畅,在与前序SOTA的对比环节中也有许多可以吊打的图放出来,你的motivation就应该是吊打的地方。
理解程度可以设置成选项,00.2,0.20.4,然后一直到0.8~1,对于一些粗看的文章就是.2到.4,细看且基本理解的就是.6到.8,连代码也跑了读了的,我就会设置在.8到1。
最近我认为可能还可以再加一个部分,就是什么内容支撑了这个文章的意义,这一部分不一定要写在总结里,但看的时候一定要思考一下,到底这一篇是不是在过拟合,它所提出的结构哪里证明达到了预期的效果。这就很需要一些可视化的工作。

结语

总之,要开一个excel来整理自己的文献,并且在阅读论文时着重关注一些方面,以及如果你写论文时也能把这些方面讲得很清楚,那大概是一篇优秀的论文没跑了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/294730.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统安全

作为一种开放源代码的操作系统,linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。 账号安全控制 用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号 才能进入计算机.在Linux系统中,提…

Unity之摄像机

一、摄像机类型 1.1 透视摄像机 透视摄像机有近大远小的效果,与我们在现实中看到的效果相同。所以当两个同样大小的物体到摄像机的距离不同时我们看到的大小也会不同。Unity的3D项目中默认使用的就是透视摄像机。 1.2 正交摄像机 正交摄像机没有近大远小的效果&am…

Linux 修改主机名称并通过主机名称访问服务器

一、命令提示符简介 当我们打开终端的时候,我们要输入命令的左边就是命令提示符,如下图,接下来介绍下他们分别代表什么含义 1、root 和 xhf 表示的是当前登录的用户名称。 2、node2 表示的当前的主机名称。 3、~ 表示的是当前的目录 4、# 表示…

BIND DNS 自定义zabbix监控

一、DNS统计计数器 Bind9可以使用rndc stats 命令将相关DNS统计信息存储到工作目录下,默认位置在: statistics-file "/var/named/data/named_stats.txt"; 每当名称服务器执行rndc stats命令,都会统计在统计信息文件最后附加一…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考:https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书: 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可,没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书: 未安装证书是这样的: 上述我们可…

BUUCTF--gyctf_2020_borrowstack1

这是一题栈迁移的题目,先看看保护: 黑盒测试: 用户可输入两次内容,接着看看IDA中具体程序流程: 我们看到溢出内容只有0x10的空间给我们布局,这显然是不足以我们布置rop的。因此肯定就是栈迁移了。迁到什么地…

React 入门 - 01

本章内容 目录 1. 简介1.1 初始 React1.2 React 相关技术点1.3 React.js vs Vue.js 2. React 开发环境准备2.1 关于脚手架工具2.2 create-react-app 构建一个 React 项目工程 1. 简介 1.1 初始 React React JS 是 Facebook 在 2013年5月开源的一款前端框架,其带来…

Camtasia2024录屏软件简单实用的4K录制视频软件

Camtasia是一款功能强大的屏幕录制软件,适用于Windows和Mac操作系统。它具有简单的操作界面和丰富的编辑功能,coco玛奇朵可以让你轻松录制和编辑屏幕视频。Camtasia还支持添加文字、图像、动画等元素,同时提供了丰富的特效和滤镜功能&#xf…

Python中的类以及对象 与 self关键字的介绍

Python中的类 类的定义 在Python中,类是一种用户定义的复杂数据类型 类提供了一种组织代码和数据的方式,用来创建现实世界对象的蓝图 一个类,是由成员变量(属性)和函数(类的方法)组成的 |------成员属性 类------||------类的方法定义格式 class Teacher: #-----类名de…

打工人的2.0时代,只需要一副AR眼镜!

在数字化时代,工业行业中的生产效率如何得到提升?工业AR眼镜或许是一个不错的选择。不过工业AR眼镜真的可以协助员工处理工作中所遇到的各种问题吗?我们以制造业、医疗行业、船舶业的不同从业者为例: 假如你是一名制造业从业者&am…

这些流行的K8S工具,你都用上了吗

关注【云原生百宝箱】公众号,获取更多云原生消息 本文介绍了一些流行的 Kubernetes 工具和常见的集群组件。例如 Helm 作为 Kubernetes 应用的包管理器,以及本地开发所需的 Kubernetes 发行版。另外提及了一些常见的集群组件,如集群自动缩放器…

C/C++输入函数总结

1、cin 2、cin.get 3、cin.getline 4、getline 5、gets 6、getchar 1、cin 可以接受单个字符和字符串,但遇空格,"TAB","回车"结束!!! 若不跳过空白字符,使用 noskipws 流控制。 使用方法如…

nacos 2.* 部署在linux服务器无法注册问题

通过sdk注册代码 报错 Exception in thread "main" ErrCode:-401, ErrMsg:Client not connected, current status:STARTING at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) at com.alibaba.nacos.common.remote.client…

Python 使用 selenium 进行自动化测试或者协助日常工作

Python 使用 selenium 进行自动化测试 或者协助日常工作,内容如下所示: 1、基础准备 需要准备 Python 环境需要安装 selenium 模块 pip install selenium 需要下载谷歌浏览器驱动程序 ,下载地址为 下载对应版本驱动程序 查询谷歌浏览器版本…

STM32疑难杂症

1.keil的奇怪问题 创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了 stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使用keil5进行编程时勾选了这个选项(下图),则编译的…

Linux———cat命令详解

目录 cat 命令是 Linux 中用于查看文件的内容或将多个文件合并输出。 基本语法: 常用选项: 示例用法: 查看文件的内容: ​编辑 将多个文件的内容合并输出: ​编辑 显示每一行的行号: ​编辑 显示非…

TemporalKit的纯手动安装

最近在用本地SD安装temporalkit插件 本地安装插件最常见的问题就是,GitCommandError:… 原因就是,没有科学上网,而且即使搭了ladder,在SD的“从网址上安装”或是“插件安装”都不行,都不行!!&am…

函数式编程及应用

目录 什么是Lambdalambda表达式的类型及实现方式类型语法 常用函数式接口Customer 函数式编程在Stream中的应用总结参考资料 什么是Lambda Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码。 Lambda 表达式描述了一…

Spring国际化的应用及原理详解

1. 简介 Spring国际化(Spring Internationalization,简称i18n)是Spring框架提供的一种机制,用于支持多语言的应用程序。它使得开发者能够轻松地在应用程序中实现不同语言的支持,从而满足全球化的需求。通过Spring国际…