在之前几个月做实验写论文的过程中,积累了一些关于怎样写出一篇好论文的想法,不总结一下,过段时间大概就忘了,遂总结成此文。

本文分 7 章,前 6 章写对于好论文的写作来说很重要的六个方面:审美、逻辑、包装、信息来源、工具和折腾,最后一章是后记。

需要说明的是,这篇文章的题目是『如何写一篇好论文』而不是『如何写好一篇论文』。这是因为本文所讲的六个方面更像元方法(meta methodology),即不是写论文的具体步骤,而是论文写作的指导思想(-_-|…)。这些元方法除可用在论文写作上,还可用于选方向、找 idea、想算法、做实验、做展示等方面,从而写出一篇好论文。不过,因为其他几个步骤过于庞杂,所以本文仅从论文写作方面切入来阐述这些元方法。

再需要说明的是,我是计算机专业的,所以以下内容都是根据自己在本专业学习的经验所写,不一定适用于其他专业 (但大概思想应该也是相通的吧)。

1. 审美

要做出好的东西并写出一篇好论文,必须要知道什么是『好』,这也就是审美,或者说品味。
审美不到位,就会造成自己觉得做得挺好,但在导师和审稿人看来还差得远的情况;审美如果有偏差,也就是和学术人应有的审美不相符,那么做得越多,在审稿人看来就越不符合要求。

一般的学术研究过程中,学生将初稿写出来之后,要交给导师审查,然后学生修改,如此反复多次,这个过程实际就是导师以自己的审美纠正学生审美的过程。同理,审稿人审稿也就是审稿人以自己的审美纠正投稿作者的审美的过程。由此,写过多次论文的学生才知道什么是好论文,以及怎么写出好论文。
但以上过程是由外界纠正的,每写一篇论文要半年左右,那么每纠正一个问题要半年左右,对于研究生来说,可用的时间不过一两年,由外界纠正来提高是不现实的。所以自发的审美培养就显得尤为重要。
所以端正审美,把自己的审美和审稿人的审美看齐,并提高自己审美的标准,对于要尽快出论文的研究生,就显得很必要了。

当然这里不是说审稿人的审美就一定正确,不同的审稿人有不同的喜好,有些不喜欢复杂的方法,不喜欢拼接模型的方法,有些可能认为只要能work就无可厚非。但总体来说,审稿人们基本的审美观应该都是差不多的。

对于学术审美来说,以下几个问题很关键:

  • 什么是好的问题?
  • 什么是好的算法/idea?
  • 什么是好的工具/workflow?
  • 什么是好的论文?
  • 什么是好的表述?

个人对于以上几个问题的回答如下:

  • 什么是好的问题?个人认为没有定论,不过我比较喜欢 big clean problem,一般这类问题也是领域内比较基础的问题,但我的能力一般解决不了。。。
  • 什么是好的算法/idea?个人比较喜欢有创新性的且具有 simple, general, natural and elegant 特点的算法或 idea。也就是说我不太喜欢复杂的方法,不喜欢 ad-hoc 的方法 (事实上 ad-hoc 的方法一般也都很复杂),不喜欢不够自然的方法,不喜欢 dirty 的方法(但对于现实数据来说,不dirty的方法好像也不现实?)。这里要说一下『自然』的含义,我的理解是,一个方法,如果你在了解了它的过程之后,不禁发出类似于“这个问题就该这么解决’’的感叹,那么它就是自然的,也就是这个方法的每一步——从 motivation 到具体步骤——在你看来都是水到渠成的,那么它就是自然的。当然,以上几个特点不太可能同时具备。另,写这篇文章时搜到了What Is Elegance in Science? - The New Yorker,感觉写得挺好。或许也可以看看《Elegance and empiricism》。
  • 什么是好的工具/workflow?个人比较喜欢简单专一的工具,即这个领域的问题它很专业,专业到全能,但这个领域之外的问题,它绝不涉及。最好短小精悍。另,个人用的一些工具见第 5 章。
  • 什么是好的论文?自然,好的论文首先要有干货,即确实提出了新东西,提出了好算法。另外,个人认为好的论文必须有逻辑,即讲清楚问题的来龙去脉,讲清楚自己方法的 motivation,讲清楚方法的主体框架,另外,实验要全面真实,即实验不能 ad-hoc。其中关于逻辑的部分见第 2 章。除此之外,好的论文必然从外表看也是好论文,即从排版到图表,都显得工整、标准、坚实。这部分见第 3 章。
  • 什么是好的表述/表现方式?个人认为好的表述/表现方式应当简单直接明了有逻辑,尽量方便高效。不要有复杂的句式,不要有奇怪少见的单词,不要有华丽的修饰,不要有春秋笔法,不要绕来绕去。把想说的问题表述清楚,每一句话都有逻辑来源,即不要有某一句话让人不知道为什么放在这,这样就可以了。这部分见第 2 章。

端正了审美之后,审美还有高度的问题。虽然对于审美有没有高低这个问题,不同的人有不同的看法,但在学术审美上,基本的审美还是有区分的,比如一般来说,有逻辑的论文就是比没有逻辑的论文好。在审美方向没问题时,审美高度不够,就造成没有品位的问题。即自己觉得做得不错了,但在别人看来还差得远还有很多不足。而且因为自己觉得做得不错了,也就不知道怎么提高。

审美高度的培养应该不太容易短期见效果,需要见到足够多好东西且自身能力足够才行。好比对于名画,要区分名画们各好在哪,各有什么缺憾,让美术生来说肯定比普通人要有见解。而除见得多之外,还要自身能力够强,好比让杰出画家来看,肯定比美术生更有真知灼见。

2. 逻辑

写论文,逻辑是最重要的,逻辑必须从有 motivation 开始到投稿结束贯穿始终,即想法要有逻辑,算法要有逻辑,实验设计要有逻辑,实验分析要有逻辑,论文行文要有逻辑,文字表述也要有逻辑。

那么逻辑是什么,怎么理解『逻辑』二字?对于学术和论文来说,这里的逻辑,只是强调前因后果,来龙去脉,有依凭,讲得通 (即『make sense』)。

具体来说,算法要有逻辑,就是当别人问你“你的算法为什么行得通’’或“你的算法是怎么工作的’’或“你的算法比已有方法强在哪,为什么’’时,你必须能讲得出所以然。要注意的是,你不能用步骤来解释原因,即你不能说因为我怎么怎么做,所以就怎么怎么样,而是必须再往深层挖掘。你对这些问题挖掘得越深,对自己的算法理解也就越深 (自己想出的算法自己真的并不一定能透彻地理解),写出的论文也越有逻辑。

接着说论文行文要有逻辑。常见到说论文要讲好故事,既然是讲故事,那么故事的起因、发展、结果都要讲清楚。起因就是你研究的是什么问题,这个问题是怎么来的,研究这个问题有什么用。发展就是这个问题别人研究到什么程度了,出现了什么问题,你提出了什么方法来解决这些问题,你的方法为什么能解决这些问题,又是怎么解决的,具体过程是什么。结果就是你做了什么实验来证明你的方法解决了问题,这些实验全面吗,可靠吗,你怎么论证你的实验结果。把这些事情交代清楚,故事框架才算完满,审稿人也不会读得一头雾水。

但仅仅交代了这些事情只是完成基本要求。故事要讲得好,首先要找好角度,找好切入点,即你从哪个角度来说明你的算法,你要侧重体现你算法的哪个方面,怎么定位你的算法。审稿人肯定没精力和心情去分析你的算法好在哪,哪个地方是你算法的核心,哪个地方是你算法的主要创新,这些问题都必须你告诉他。而且你也不能说自己的算法好在很多个地方,审稿人没心情关注这么多东西,所以你必须抽出最重要的一两点,从这个角度来说明你的算法,这就是你论文的切入点。可以假想你的算法就是一个三维建筑,从某个角度看这个建筑时,这个建筑最宏伟最漂亮,那么这个角度就是切入点。

找好角度以后,就是布局。即如果把整篇论文划分为多个部分,把你要说的所有内容划分为多个部分,把你的算法划分为多个部分,那么如何循序渐进地把整个故事讲完,怎么讲比较清晰,比较容易让人懂,每个部分讲什么内容,讲多少,讲到什么程度,在这个位置是宏观概括算法思想还是讲一点细节,在这里要不要放张图,这张图应该是什么内容,读者看完这张图应该能理解到什么,我要不要举个例子把整篇论文串起来,这个例子在哪里引入,这个例子在图例里要怎么表现。诸如此类的问题在写之前要想好,在写的过程中行文布局也还要不断调整。

布局好之后,就是具体遣词造句了,也就是表述。表述一要注意逻辑,二要简单。逻辑就是要有上下文,即你写的每一段,每一句,乃至每一个词都要有上下文,不能出现两段话之间没有逻辑关系,让人不知道你为什么突然要在这里说这个。思维或许可以跳跃,但是行文绝对不能跳跃,所有文字都要由因果、转折等关系串联起来。简单即句式要简单,学术论文不喜欢华丽的句式,也不喜欢过长的句子以及过多的从句。

一篇有逻辑的论文,读者读完后会觉得思维很清晰,觉得你说的有道理,知道你为什么这么做,也知道每一步发生了什么,也觉得整个过程符合直觉 (不符合直觉的地方也被你说服了),整个过程很自然,让他来做他也会这么做。

一篇有逻辑的论文应该可以很容易地提纲挈领,找到整篇论文的逻辑脉络,进而画一幅思维导图出来。甚至可以说有逻辑的文本就应该可以组织成由树形结构和线形结构构成的连通图,思维导图自然是这类连通图的一种特殊形式。其中树形结构可以理解为包含关系,线形结构可以理解为因果关系,连通图即是说没有任何一个论点是凭空提出的。实践上,或许可以找一篇自己觉得逻辑比较好的顶会论文,读完之后尝试把它的逻辑脉络用思维导图画出来,以此体会论文逻辑应该怎么写(我还没有实践过…)。事实上,最好这幅图能覆盖到每一句话,也即每一句话都能用逻辑串联到这幅思维导图里。

3. 包装

一个会议收到上千篇论文,编辑怎么知道他要把哪些送去 review 而把其他的拒掉,而如果遇到几篇差不多水平的论文,他又怎么确定要留下哪一篇。这时候,一篇论文的包装往往就很重要了。编辑希望自己的期刊逼格高一点,所以他会尽量选择包装好的论文 (这一段是在第一次写学术论文无从下手怎么办? - 李晨的回答 - 知乎上看到的,虽然答主是学材料的,但这个观点还是可以借鉴的)。

这似乎是个偏见,但偏见又是必然存在的,要发论文也就只能暂时屈从于这个偏见 (《Deep Paper Gestalt》似乎说明人工审稿确实更青睐颜值高及以特定方式排版的论文? )。而从另一个角度来说,排版和外形都不过关的论文,其作者能力应该也没有多强,那么一般也做不出特别好的东西。

那么怎么包装自己的论文呢?首先,排版要过关,图表要过关,绝不能让人一看你的论文就觉得是三流论文,这部分主要靠工具和审美。选对工具,审美又好,则排版自然不错,图表也美观,甚至配色也比别人好看。

对于审美的问题,看几十篇顶会论文也就知道顶会审美是什么样的了。
看的时候主要是看顶会大佬的论文都是怎么排版的,各段大概多长,图表放置在哪,是什么风格,图表大概复杂到什么程度。看十几二十篇之后,大概就能有个印象。另,对于图表还可以注意图的大小,对齐情况,字体大小,占的版面大小,线条粗细、配色风格等。

对于工具的问题,多试几个不同的工具,找一个上手不难,用得顺手,操作方便,功能强大,出来的效果又比较不错的。在这个过程中,不免要多搜索多折腾,但磨刀不误砍柴工,折腾一下比费很大劲画出一张很糟糕的图还是值得的。

除了外表颜值外,内容的包装也很重要。内容的包装体现在两方面,一是论文是否有真东西,没有真东西而只顾逼格就是灌水了,但这部分是写论文之前的事情,不是本文讨论的主题。二是论文文本的包装,即论文讲故事的方式和表述如何。以小说来说,即情节如何,文笔如何。这部分我觉得那篇知乎回答已经说得很好了。论文文本里,最重要的就是 abstract,introduction 和第一张图(似乎还有 conclusion),大多数人读论文时都先关注这三部分,最多再多看一眼实验部分。原回答里对于如何写好这部分也做了论述,而且该问题下的其他回答也有不少关于这部分的内容。

除讲故事的方式外,论文的深度也需要包装,同样的研究问题,同样的算法,甚至同样的实验结果,给大佬和菜鸟写,写出的深度是不一样的。大佬所知较广,且有较完善系统的知识体系,就能对问题、算法、实验结果进行更好的形式化和扩展,写出的论文自然看起来系统、深刻、高大上。菜鸟所知较少,抽象和归纳能力也不足,写出的论文看起来就比较琐碎,也很难与已有成果相联系,最后可能尽管工作不错,但看起来motivation不足,insight也不够,工作也不够系统。要解决这个问题也只有多看其他经典的文章,更多地接触相关的领域,同时多从不同角度审视自己的研究问题、算法和实验结果,以期能得到更深刻的理解,才能写出深刻的论文。

学习对内容的包装可以继续在顶会大佬论文里找灵感。当然也不是每一个顶会大佬都写得一手好论文,所以最好选自己熟悉的且觉得写得好的论文来作参考。看他的论文每一段写了什么内容,他是怎么讲故事的,每一段讲到什么程度,在 introduction 里讲算法也肯定不会讲细节,那么他讲到了什么程度,他把算法抽象到了什么程度,他的图都是什么内容,图所表现的内容在整个故事里处于什么地位。除此之外,还要宏观地体会一下这篇论文好在哪,它研究的是什么问题,这个问题难度和重要程度如何,他为什么研究这个问题,为什么提出这个方法,这篇论文有哪些闪光点,评审为什么会接收这篇论文,这篇论文对其研究领域的贡献能有多大。

接下来,在自己写论文的时候就要想象自己就是大佬,经常想想如果大佬来写这篇论文,他会怎么写,他会从什么角度介绍这个算法,他会如何布局谋篇,他会如何设置图表,他会给论文起什么题目等等。哪怕有时的想法似乎过于自大,觉得自己的论文还配不上也没关系。当然空想有些难度,此时找几篇顶会论文放旁边照着模仿也可以。

总之最后我们希望达到的目标是,当你的论文不包含任何作者信息时(如 Blind Review),审稿人读完这篇论文时,苦思冥想了一圈该方向大佬,就是想不出这篇论文最有可能是哪个大佬写的。

4. 信息来源

对信息的审美影响智商,也影响精神层次的高度信息的品味 - 河森堡的微博 - 微博。两个接触并使用不同来源的信息的人,在对待问题时的态度和想法是不一样的,解决问题时的能力也是不同的。获取一些优质的信息来源对做好事情来说是很重要的。

书籍的信息一般更系统,但有可能比较过时。论文的信息更新,但不够系统。英文的信息比中文的信息一般更新,更可靠。一个英文好且能 fq 的人,比另一个英文差且不能 fq 的人,就能接触到更多更新更可靠的信息。编程时遇到同样一个错误,会拿错误信息去百度的比不会的强,会搜英文错误信息的比只会搜中文错误信息的强,会谷歌的比只能百度的强,能找对关键词的比不能的强,会判断信息可靠性的比不会的强。在遇到问题时在谷歌搜索,往往第一个条目 (通常是 Stack Overflow)就能得到解决方法,而在百度下只能得到一堆个人博文,一个个点进去内容都差不多,还都是过时的方法。有时要搜某个会议或软件的官网,谷歌第一条就是,而百度往往在第 N 条。另,英文的博客/论文通常比中文的更有深度更有干货。

除搜索之外,还可以在各种社区获取优质信息。如除关注大佬的主页之外,还可以关注大佬的 Twitter、GitHub、微博等,大佬之间往往也是有互动的,所以关注了一个就能逐渐扯出一堆大佬,逐渐就关注了一圈大佬,掌握了业界风向。

另,维基百科很有用。很多概念在维基百科上有很专业的描述。

5. 工具

工欲善其事,必先利其器。有趁手的工具能成百倍地提高工作效率。以下是一些工具的介绍。

  • MathJax/LaTeX 。投国外会议或期刊应该大都要用 LaTeX,早点学习一下也可以熟悉一下环境。而且确实写论文时,LaTeX 敲起来方便,排版出来又很漂亮。当然 LaTeX 的学习曲线比较陡,那么可以先不学习 LaTeX ,只学习其中关于数学公式的部分。学习 LaTeX 数学公式排版时,可以使用 Markdown,在 Markdown 中的公式一般是用 MathJax 渲染的,用搜索引擎搜索『MathJax 教程』可以看到怎样用文本命令敲出各种复杂的公式。
    另,如果遇到某个符号不知道对应的命令时,可以在一个网站上用鼠标画出这个符号,然后它会识别你画的符号并给出对应的命令,搜『Detexify』可以找到这个网站。

  • Markdown。一种简单的排版语言,不用半小时就能学会。在写小文档时,用 Word 或 LaTeX 都有点杀鸡用牛刀的感觉,此时用 Markdown 就很顺手了。一般的 Markdown 编辑器都支持 MathJax 公式渲染,所以用 Markdown 可以写出漂亮的公式,Markdown 也可以控制多级标题,粗体斜体,列举,代码块,图片插入等,麻雀虽小五脏俱全。编辑器可以使用 Typora。

  • LaTeX 。Word 排版时总有牵一发而动全身的问题,即改动一处,整个文档都变了,还得重新调整格式。除此之外,Word 对公式的支持很烂,编辑公式很费劲,而且编辑出来也比较丑。在 Word 中插入图片比较麻烦,要控制浮动选项等问题。在 Word 中处理交叉引用(比如本文的见第 N 章)及文献引用也比较麻烦。Word 还有版本的问题,不同版本的 Word 打开同一个文件的效果很可能是不一样的。
    以上这些问题在 LaTeX 里都不是问题。LaTeX 基本不会出现 Word 的版本问题,把源文件放在任何平台下 (Linux,Windows,Mac),编译出来都是相同显示效果的 PDF 文件。只要在写 LaTeX 时定义好哪一段是标题,哪一段是正文,哪一段是粗体,图片放哪里,编译出来的 PDF 就会符合你的要求,所以不会出现牵一发动全身的问题。另,我总感觉 LaTeX 写的论文和 Word 写的论文有不一样的气质,前者让人感觉很坚实可靠,后者感觉摇摇欲坠。
    LaTeX 的学习曲线比较陡,可以找一些教程初步学习下,如《LaTeX 入门 \ 刘海洋》。对于 LaTeX 编辑器,我目前用的是 TexMaker,类似的还有 TexStudio等。

  • Linux。在 Linux 下执行一些命令或者程序时速度更快,或者更稳定。
    而且因为很多算法的作者就是在 Linux 下实现并调试的,所以用 Linux 运行调试算法也可以避免一些奇怪的 bug。
    Linux 下的命令行工具十分强大,而诸如 find、grep、sed、awk、cut、vim、head、wc 之类的文本工具也是小巧方便且功能丰富。每当遇到要查看或者简单地修改一个几百兆乃至上 G 的文件时,使用这些工具就事半功倍。因为即便 notepad++ 或 Sublime Text 在打开这么大的文件时也很慢很耗内存,太大的会直接卡死或闪退,而若要在文件中搜索字符串,就更是要等到天荒地老。用 grep 搜索文件内容,用 sed 完成文本替换,用 vim 编辑,用 head 查看,用 wc 统计,都无比顺手。除此之外,这些工具还可以各种套用。另,在 Windows 下安装 Git 后使用 Git Bash 也可以使用一部分这些文本工具。

  • Beamer/Marp。这两者是 PowerPoint 的替代。Beamer 是 LaTeX 的宏包,可以用来写 Slides,写出的 Slides 比较学术范,而且因为是 PDF 文件,配合交叉引用,跳转非常方便。Marp 是一个使用 markdown 编写 Slides的软件,使用起来比较简单,不过可以自定义的地方比较少,而且如果要微调的话需要一些 HTML 和 CSS 技巧。这两者相比 PowerPoint 的优点在于编写公式非常方便。而且因为自定义的地方比较少,字体一般都比较大,会强迫你总结要点少说废话多用列表,做出的 Slides 就比较简练有逻辑。但总体来说,这两个工具还是没有 PowerPoint 强大易上手。

  • yEd,Dia,ProcessOn,draw.io,XMind 等。这些是画图工具,相比使用 Word 或 PowerPoint 画示意图,这些工具使用起来更方便,做出的图也更美观。生成的图一般也都可以保存为矢量图 (SVG、PDF等)。
    但如果要在图中添加公式,这些工具一般都不支持。可以选择使用 LaTeX 或 markdown 敲公式生成 PDF,然后用 inkscape 将公式粘贴到图中。也可以尝试学习使用 TikZ 用 LaTeX 画图,不过这个学习曲线比较陡,我还没有学会。

  • Zotero。一个文献管理软件,可以用这个软件管理看过的所有论文,也可以在这个软件里记论文笔记。用这个软件管理文献就不用每次找论文时在文件夹里翻来翻去了。这个软件还可以从 Google Scholar 等网站直接导入论文,也可以导入其他网页。
    另,我在写论文时经常遇到不知道一句话怎么用英文表述更合适的问题,所以就想要看看别人的论文是怎么写的,用 Foxit PDF 阅读器可以搜索 PDF 中的文本,但速度慢不方便。Zotero 有 PDF 内容搜索的功能,但似乎只能定位到是哪个文件,而我发现在 Zotero 的存储文件夹里有存储 PDF 内容的纯文本文件,所以就用 shell 命令将所有这些纯文本文件复制到一个文件夹下,然后用 Sublime Text 打开这个文件夹,在文件夹下搜索文本。这样当我想要查找某个表述时,只要在 Sublime Text 里搜索关键词,就可以看到别人的论文是怎么写的了。

  • fq/kxsw。就像在第 4 章里说的,信息来源很重要。而不会 fq 的话,就失去了一大半优质的信息来源。

6. 折腾

以上提到的很多东西必须自己尝试才能学会,这个过程就需要各种折腾。敢折腾会折腾能学到不少东西,折腾的过程中必然有各种糟心的麻烦,但只有折腾过后才能找到适合自己的。比如安装系统是折腾,但只有学会装系统之后,才能不怕死地装各种软件,跑各种程序,玩各种命令。学 Linux 学 LaTeX 是折腾,但折腾过后可以学会不少有用的工具。装各种软件是折腾,但只有尝试过各种软件之后,才能找到适合自己的工具,打造自己的 workflow。

7. 后记

搜『论文写作』、『paper writing』、『academic writing』能找到不少有关论文写作的相关知识。另,机器翻译学术论⽂文写作⽅方法和技巧——刘洋

另,整体看这篇文章可能稍显罗嗦…

另,很多内容可能都比较主观。

8. 算法

目前感觉机器学习的很多算法都是『直觉+近似』的模式。即由某个现象得到一种直觉,然后以算法近似表达出这种直觉即可,往往不需追求精确也能达到好的效果,甚至很多时候因为不精确,反而泛化能力不错。如 word2vec,由『词义相近的词往往上下文也差不多』这种现象而得到『以上下文来表达中心词』这种直觉,然后怎么确定上下文呢,近似点,搞个 window,window 内的都一样对待就得了。。。这个例子举得似乎不太好。。

9. 。。。

  • 问题要 solid、important
  • 方法要 simple、neat、elegant、general、scalable、efficient、robust、innovative
  • 论文要 easy to follow,最好有一些图增强可读性,最好有一些让人眼前一亮的图(引入问题 或 呈现算法效果或实验结果),要讲明白 motivation,最好有 complexity analysis,另外最好有 insight
  • 实验要 convincing/promising,实验设计最好巧妙些(最好控制变量,最好不太复杂又能说明问题?),最好有 detailed analysis,数据集最好 real-world 且最好大一些

well written、good presentation

End

论文中了,所以这篇文章应该不算“妖言惑众”了。。

2019.1 – 2019.3
2019.8.13