如何写论文

最近大家开始写论文,现在这里写一个大概的写作步骤,随后每个人都可以随时补充。 写论文大体可以分为如下步骤,作为本文的目录吧: 1 方向 2 文献阅读 3 想法 4 想法验证 5 逻辑梳理 6 文档梳理 7 投稿 以下一步一步来讲: 1 方向 大家的方向大多是我给出来的,这个一般不需要过多考虑。需要明确的是这个方向是要做什么。比如做帕金森这个方向,其目的就是可靠的帕金森诊断。那么细分起来,就分为了如何提高精度和如何提高可靠性两个方面。目前我们组内提高精度采用的是以Hog为基本方法的一系列算法,可靠则是在看Max的论文,以及考虑后期采用属性拓扑的概念方法进行结构构造。 2 文献阅读 这个工作是大家最容易忽略的,很多同学都想跳过这一步直接就去做后面的内容。但事实是:出来混早晚要还。大家一定记住:一见钟情且能幸福一生这种事情是童话的桥段,在现实生活中出现的概率很低。所以,踏踏实实的读文献,是必须的。 说一下读文献的目的: 第一,要了解国内外研究现状。一定注意,这里说的是“现状”。有些同学在本科阶段形成了很不好的习惯,就是随便抄一抄文献综述。这在研究生阶段是不可以的。还以帕金森为例,了解现状的标准是自己能闭着眼睛说出这个领域目前谁是最牛的(看谁的文献被提到最多),他们最近的研究成果是什么(可关注作者的google scholar),这个领域当前最热门的研究方法是什么,这个领域的论文在什么期刊发表最多? 第二,要了解这个领域内的通用内容。比如这个领域内都用什么数据集,是否有基准对比方法,用什么评价指标,领域内大体是什么水平,怎么做实验,怎么讨论?这些内容对大家非常有用。当自己有了想法后要进行验证,有了这些内容会帮助大家快速评估自己的想法是否有用。同时,任何论文或成果都是需要比较的,这些通用内容就是标尺。 第三,要了解当前各种方法的优缺点。注意,这里一定是新方法。如果找的方法是很多年前的,那么一定要看看这个文章被谁引用过,他们在这个基础上是否有改进。所以,最好的方法是找新论文。关于各方法的优缺点,所有的论文都会说自己的有点(摘要、引言最后、讨论、结论),也有一部分会说自己的缺点(讨论、结论)。这个时候一定要做到兼听则明,要多看文献相互之间的评价。虽然不一定真实,但一定可以参考。 第四,这个领域内的专业名词应该都会了才对。不能再挨个查字典了。 只有以上几点都烂熟于心,才说明完成了基本的阅读量。注意,此处的阅读量不是指数量,是指质量。 说一下阅读容易犯的几个错误: 第一,只看百度、知乎和csdn这类科普文章。科普文章可以在一开始帮助理解,但如果一直看科普,说明一直也没有进入到研究环节。建议大家看几个这个科普之后,无论是否理解了,一定要找文献来读,通过文献与科普的交叉来提升交替上升理解水平。 第二,只看中文文章。很多同学惧怕英文不敢去碰英文,所以只看中文。绝大部分的中文论文是没有营养的,这个和爱国无关。写论文的目的是传播自己的成果(也就是吹牛),中文的受众和英文的受众哪个大?同样是做一次广告,当然要让全世界都能看懂才好啊。这里别和我抬杠说中国人不看英文,真正做研究的中国人都是看英文的。只有lazybones和loser才不去读。如果你非要读中文,就看看学校期刊目录中的1A期刊,其他的没啥参考价值。 第三,英文文章至上。并非所有的英文都是好文章。除了那几个业界大牛,大家还是读高档次期刊的论文吧。什么是高档次?中科院期刊分类一区和二区的才算,其他都不算。至于英文会议,除了国际公认的顶级会议,其他根本不用看。顶级会议目录可以查询CCF。大多数的会议是滥竽充数的。 第四,乱用翻译软件。觉得翻译软件把英文翻译为中文看会舒服些,却不知道那样做的结果是失去太多信息。即便是高级翻译,对语言每翻译一次也会损失很多信息,何况是机器翻译。所以,宁可头疼一个月,把英文文献读下来,今后就好了。 下面说一下方法: 首先,文献要粗读与精读结合。不可能每一篇文献都去精读,谁也没有那个精力。第一遍读论文,仔细读一读摘要,大概看一看引言,了解这篇论文要说什么,为什么这么说之后直接去读实验。实验也不需要太细的读。当你掌握了领域内的基本实验方法之后,直接看实验结果和讨论。如果觉得结果不错且讨论有点意思,再回去精读方法部分。否则可以先存放起来,今后再说。 其次,要建立知识网络。很多时候读论文是由一篇论文而起,然后顺着参考文献去读其他论文。这个时候就可以给自己用脑图软件画一个阅读的路径了,同时标注好每篇论文的优缺点与你自己的思考。这就是你今后论文引言的基本来源。 最后,综合读过的内容,总结一下现在存在的问题,就可以提出自己的想法了。 3 想法 根据文献阅读结果可以找我讨论,一起来分析用什么方法比较合适。一开始想想法的时候可以天马行空,但最后一定要言而有据。此处最忌讳的就是横着脖子说别的方法就是不好,那时街头老太太打架,不是我们做学术。 比如有人说:“A方法性能太差,所以我提出B方法来提升性能”。这是不可以的。A性能差不能成为你踩他的理由。正规的方法是:“文献A采用MFCC方法对帕金森语音信号进行特征提取取得一定效果。但MFCC为根据听觉特性突出频谱低频段【此处配个参考文献说MFCC突出低频频段的】,而文献【】认为帕金森病语音障碍主要表现在频谱高频段。因此,采用MFCC方法进行分析,可能造成高频信息损失,从而导致性能下降。基于此,本文提付出****方法,对频段做统一处理(或突出高频处理),从而*****,达到******。” 这样一写,是不是就有理有据了?注意,我句子中所有的原因部分都是从参考文献中来的,这样别人就不会挑我的毛病了。唯一需要注意的就是那个参考文献真的说了那句话,不要给别人编造。 大多数的时候,我会给大家一个建议想法。注意,这个想法不一定就是对的。如果我已经知道了它是对的,也就不用你研究了。所以,大家拿到想法后,第一任务就是理解我的意思。 很多同学在这个阶段其实没听懂我说的话,但不好意思提出来。怎么办?回去自己闷被窝苦思冥想。还想不明白就去打把游戏放松一下。这样一放松几个月过去了,时间都荒废了。最好的办法是:没听懂当时就提出来,我给你再讲一遍。讲的时候你要录音,以防丢失关键信息(因为刚刚入门,还不掌握重点,理解会有偏差)。如果还没听懂,说明你文献阅读还不够。 这个时候,要找师兄师姐请教。毕竟他们和我在一起时间长,理解更透彻一些。或者顺着我说的关键词再看几篇文献,看看能不能理解。 如果三天以上还不理解,一定要再找我。直到自己理解了为止。 有时候大家会提出一些想法,这是相当好的。但需要注意的是表述清楚。建议大家把自己的想法用图的方式画出来,把想法的来龙去脉用文字或图写清楚,这样我们好讨论。最怕的就是有些同学拿来一张白纸,随便画了几条线,嘴里全是:“这样之后就那样”这样的指代词语句,把我绕的绕梁三日下不来,还不好意思打消你积极性。所以,建议大家养成把想法用语言或图形表达出来的好习惯,这对于你今后工作汇报也很有用,是职场的基本技能。 4 想法验证 刚刚说了,我的想法不一定就是对的。这就需要大家去证明或证伪了。 验证从两个角度去做: 第一,从可行性角度。有时候我的想法不一定可行。比如,这个想法别人提出来过了,但我没看到。所以大家第一件事就是去查这个想法别人有没有。如果有类似的,他们是怎么做的,和我们的差别在哪里。如果没有,我的想法的基础是否有论文支撑。比如摇荡预测,我提出来用小波,后来一查小波有了。但我的小波是要对不同频段加权的,这个没有。只有对时间关注的模型。看,这就找到了和现有文献的交叉点。时域的关注度Lstm可以作为我们的基础文献,在这个之上,我们可以说我们发现了lstm对频率的动态范围不足问题,所以我们采用小波的频率分解,然后再加权频率。这样就顺理成章的把我们的想法写出来来了。如果别人有,也不怕,因为总会有差别,而且他的实验部分会给我们新的启发。 第二,正确性角度。有了理论可行,实验结果不一定真的好。这就需要证明了。证明方法一般就是实验。根绝我的想法编程,然后用从文献中学到的实验方法去做实验,和对比方法或基准方法作对比,来看看这个想法是否真的可行。如果可行,那么就要分析为什么就好了呢?原因在哪里?如果发现不行,那么我们就要考虑是哪里出了问题,需要从哪个点进行改进。绝大多数的时候,都可以改的比对比文献好。不用问为什么,因为他是死的,而且他是解剖好给我们看的。我们的方法不好,我们把他好的部分拿来与我们的结合,大概率会超过他。所以,不用怕结果有问题,那说明分析的不够。 这里特别指出的是属性拓扑中证明性问题,有时候发现真的错了。那样错了就是错了,没办法。查漏补缺,继续改。 想法验证的每一次实验都要做好实验记录,都要做好实验记录,都要做好实验记录!!!因为你也不知道下一次什么时候这个记录就会有用了。这是科研工作的基本要求,也是基本素养。这个问题我一直在强调,大家也都敷衍说在记录。打算开学后检查一次,没有的按欺君之罪处理———罚请全课题组聚餐一次。 5 逻辑梳理 其实,以上工作如果每一步都做好记录,这个时候一篇论文就基本成型了。 比如: 引言部分就是想法的可行性验证,结合你文献阅读形成的国内外现状,梳理一下就可以。 方法部分就是你的程序啊。所不同的是:程序用代码写,方法用公式写。其实还是一套东西。这里需要注意的是大家都用Python,并不是把Python的模块一摆就可以了,而是需要把里面的内容变为理论描述出来。同时要把各部分有机的融为一体。往往在这个时候,会有一些新想法。如果改动不大,可以尝试;如果改动大,记下来以后再说。饭要一口一口吃,不能一口吃个胖子。 实验结果就是你的实验记录,讨论其实就是实验分析。想想引言中踩了谁,怎么踩的,这里需要用实验数据分析一下你踩的有道理了。 结论就不说了,大多数是客气一下。 看看,如果每一步都按照要求做,是不是挺容易的?这唯一需要强调的就是:逻辑! 在这一步梳理的时候大家有时候容易着急,所以把很多事情当成了想当然。但你要知道,你不交代的事情读者是不知道的(基本常识除外)。所以,一定要把来龙去脉说清楚。最简单的评价标准是:你的每一个观点都有论据支撑,而最终所有的原始论据都出自明确标注的参考文献或来自公理。这样通过逐步推导形成你的结论,这才是论文中应该有的逻辑链条。万不可对读者撒娇,用"我觉得“这样的态度却写作,那样必死无疑。 另外一个逻辑问题是详略要得当。大家有时候会觉得我好不容易学会了傅里叶变换,我在论文中一定要使劲写。这样就大错特错了。实际上,你从别的地方学到了这个内容,恰恰说明你的论文中不应该有这个东西才对啊。为了完整性,你可以简单介绍几句,然后给个参考文献标注就好了。你的重点应该在于你自己的创新部分啊。比如,多尺度关注度模型,应该描述是如何实现的这种多尺度关注,这是一个整体,而不能简单拆解为多尺度+关注度。你需要阐述对于多尺度的关注度我该怎么设计(从多尺度的与普通信号的区别谈起),设计过程中由于多尺度的什么特性,使得我关注度设计中要采用什么方法与之匹配。这样匹配的依据是什么,应该有一些公式推导或定理证明,最终形成了一套多尺度的关注度机制。看到了吧,这就要求不能对现在方法直接照搬,需要从底层理解现有方法的原理(我说的不是科普文档中那几个可怜的公式,而是整套的推导),然后进行针对性的调整。定制的才是最值钱的。都用tensorflow,那是玩积木,没啥技术含量。 6 文档梳理 上面只是做了一个逻辑上的梳理,其实这个时候还不是论文,充其量是论文的骨架。 在这个节点上,务必和我讨论一次,以防论文跑偏。我会帮大家捋顺论文中的重点内容和亮点信息,提炼论文中的科学问题。也就是对大家的提纲进行调整。所以,大家给我看的提纲应该是你们心里有数的提纲,最好是带上了各种图表的。我可以作为审稿人的角度帮你把关。但如果你只拿了几个放之四海而皆准的标题过来,对不起,为师也猜不出来你在想什么。 大家在文档的梳理阶段容易犯的最大问题是:过渡。 并非把所有材料直接放上就好,在段与段之间、局与局之间是需要过渡的。好了,过渡的作用和方法不展开讲了,大家感兴趣请翻看小学语文课本。 另外,大家在整理文档时不用想着一次成功,那基本不可能。一般情况下,文档整理好之后要自我通读几次。比如,在写讨论时发现引言文献不合适,在写引言时发现讨论内容跑偏了,在写实验时发现方法中少写几个变量。这都是很常见的。3-5遍的反复修改是正常的。如果觉得能一次写好后一字不改,请移步其他团队,目前我的水平指导不了。 7 投稿 投稿的过程其实是在想法验证阶段就开始的。那时候就要考虑这篇论文写好后投到哪个期刊。 期刊的选择一般采用对比原则。比如:你踩的文献是1区的,你也可以投这个期刊或其他1区的期刊。不行的话再转投2区。如果你看的文献是4区的,对不起,你的论文能发表的3区以上的机会微乎其微,除非你做了重大的突破。另外,就是找相近的。比如IJAR里经常发表FCA的文章,那我们就往那里去投。这个时候我们引用的期刊是谁就没那么重要了。这也会是阅读论文的好处。 然后,就是常规性的体力劳动:根据期刊要求具体修改论文格式、内容等,不多说了。 最后,强调一点:大家不要用我的邮箱去任何网站注册。目前有两个期刊被注册过,导致我们无法再去投稿。是的,有些期刊就是这么不讲道理,不需要我同意的。所以,大家用自己的信息注册自己的账号。还有,就是不要总是尝试投稿系统。有些投稿系统点击下一步就自动提交了,没有确认提示的。所以,填写进去的每一个信息都应该是正确的。最后,如果有机会,在确认投出之前我再看一眼。以前发现了太多投稿过程中的低级错误。这些错误往往是致命的。 暂时先写这么多,没想到的地方任何人都可以补充。目的是大家一起完成一篇文章,帮助所有成员少走弯路,尽快进步。...
Read More

如何读一篇论文

本周对causal bootstrapping这篇论文再次梳理。客观的说,在此之前我对本文涉及到的知识点并不了解,有点类似于大家接触到新课题的状态。我能确定的是,这可能是一种新的知识发现或推理方法。 为此,我做了如下准备: 第一,复习bootstrapping. 虽然bootstrapping这个东西在以前看过,知道他是random forest的基础,而且其中融合了蒙特卡洛采样这样的思想,但没有深入思考过。这次,通过资料仔细思考了为什么bootstrapping会有用。 从本质上考虑,bootstrapping不就是缩小世界的模型吗?在原始抽样中,我们是从现实世界抽样得到数据样本,然后用数据样本去做训练,对不对?但原始世界到底是什么样?没人知道。抽样的结果是否满足采样定理?有些领域是知道的,但大多数领域还不知道。这也是为什么现在的机器学习总喜欢用大样本的原因。因为大样本意味着尽可能多的在原始世界中进行采样,这样有可能增大采集样本对原始世界的描述能力。但同时,有人对big data这个词给出了这样一个解释:在大量样本中抽取极少的信息。换句话说,big data意味着信息含量低。这说明什么?说明我们都到的样本很多都是重复的和没有用的。但究竟该怎么抽?目前还不知道。 不去考虑真实世界的问题,回到已经有的数据集上吧。假设这个就是一个完整的真实世界。如何去模拟这样一个认为的世界呢?还是抽样。在交叉验证中,我们是随机抽去了世界的80%(5倍交叉)、90%(10倍交叉)等等,形成模型,然后去测试。但bootstrapping认为,这么抽取是有问题的。万一你采样的样本都特别典型或不典型呢?当然,在交叉验证中可以用方差描述,但方差是评估的,不是避免的。bootstrapping实际上是给出了一种避免偏差的方法。 想想我们曾经在组会上讨论过的用蒙特卡洛方法计算一张A4纸上任意图形面积的方法就能明白bootstrapping的本质了。往纸上撒大米然后看看落到图形中的大米比例,从而推断图形面积大小,对不对?但问题是,万一你这次没撒均匀怎么办(前提是你也不知道自己是否撒均匀了,因为在数据模型中你不知道这个纸的分布和图形分布的关系)?那就多撒几次求平均呗。没错,这个就是bootstrapping的想法。在样本集中多采样几次(撒大米),然后用每次采样的结果都进行计算(看落入图形的比例),最后把每次的结果汇总起来分析(求平均)。当然,在bootstrapping中,最后一步不一定是求平均这种等权重处理,也可能是用不同的权重来操作。那么权重怎么来?这篇论文就是用causal方法来的。也是这篇论文的思想。 第二,学习因果推理 因果推理我们曾经做过一点,但那次实质是充要条件分析,还构不成因果。沿着这篇论文的思路,找到了图灵奖得主Pearl的一系列研究成果,其主要是基于贝叶斯网络的因果图推理。有幸,在放假前曹玉阳同学还找到了《the book of why》这本书的电子版,配合网上的一些资料,构成了我对因果推理的一点了解。 我是先粗读了一遍causal bootstrapping这篇论文之后才开始学习因果的,目的是找出我需要再因果推理中学习什么。经过分析,我发现do算子、混杂(confound)、介入(intervention)、前门准则、后门准则是这篇论文的高频词,和因果有关,同时我不懂。所以这些是我需要学习的。看看,我先对论文做了一次采样,然后需要的是根据这个采样去学习了。 好在大多数材料是英文的,这样在专业词汇上就做到了统一。而且能通过构词法去理解作者用这个词来定义这件事的原因,这就比读中文文章能够更为直接的和作者沟通。同时,也锻炼了自己的英文阅读。从一开始的每天3个小时读5页左右,到现在半个小时5-8页,进步的速度我还是满意的。而且随着词汇的熟悉,我查字典的次数越来越少了。 the book of why这本书的好处最大的好处是科普读物,对于任何一个问题作者会反复的举例子让你明白其到底是怎么回事,而且会从历史上讲这件事的来龙去脉。读了这样的书,对问题的理解要比读论文深刻多了,毕竟他比较生动。但同时,其知识含量有点低,当做课外书来读可能更合适。所以,我配合了一些网络教程来学习。包括20分钟左右将贝叶斯网络的(快速了解其原理)、分为14讲讲概率图模型的(了解推理的细节)、知乎或csdn上的文字介绍(梳理总结)。学习完了这些之后,我对因果推理有了大体的了解(通过各种绪论、引言),对我需要的具体内容有了细致了解(通过推导),我觉得我可以再看这篇论文了。 以上就是我为读这篇论文做的准备。其实并不难,就是看看自己现有的知识体系和论文的体系间交集是什么,差集是什么。然后去填补差集,争取做到交集最大且差集最小。形成这样的目标函数之后就去学习,当迭代几次之后觉得已经收敛(不一定到达全局最优),就可以开始再去论文了。 这一次是细读,大约用了三天时间。读的时候关注了以下几点: 第一,作者的写作方法。客观的讲,我觉这篇写作挺怪的,可能由于这不是一篇正式发表的论文的原因吧。但前面的引言和后面的相关方法上还是给了很多启示。同时,作者对其涉及到的公式要么给出了出处,要么在文中或附录给出了证明过程。这一点非常值得我们学习。也是我经常强调的:不要去说没有论据的论点。 第二,作者的主题思想,到底怎么理解作者所谓的因果。其实,我觉得作者只是deconfound,而不是真正的因果。比如,他的实验是这么做的,以文中的帕金森实验为例吧,这个是我和曹玉阳在讨论deconfound与non confound的一段批注: " 首先,找了三个数据集。这三个数据集是不同人采集的。采集条件不同,会造成对于同样一个特征,其计算结果会有偏差(比如采集时对噪声的控制,如果噪声大的话其信噪比就会低,那么和噪声相关的特征比如HNR等就会不同)。作者是把这种偏差作为了confound来使用的。 第二步,deconfound。目的就是排除由于采集不同带来的偏差。这个用字符识别的例子比较好。在字符识别中,如果给不同的字符不同的亮度,用这个网络训练出来的结果是不可信的。因为网络可能把亮度当做了特征,这样就造成了high risk. 第三,关于non-confound,我觉得相当于ground truth. 第一个实验中就是没有加入噪声的原始模型,第二是可以是没有亮度干扰(或随机亮度干扰)的图片,第三个则是对特定数据集而非混合数据集。 所以,deconfound是在confound基础上做去除的结果,而non是根本就没有。相当于去噪声信号和理想信号的差别。 为什么要deconfound? 就是为了消除关联关系对结果的影响。比如实验中的亮度与数字,书中提到的溺水人数与冰激凌销量,这些都是关联,而不是因果。采用关联分析在所有条件都不变的时候分类性能是好的。原因在于经典机器学习认为数据是独立同分布的,所以训练集和测试集分布一样。但真实情况下这种关系并不稳定。比如,把在秦皇岛统计的溺水人数与冰激凌销量放到新疆就会失效。原因就在于分布发生了变化。 而对于因果分析来说,理论上他会从“游泳方便程度->溺水人数->气温->冰激凌销量”这样的关系中得出冰淇淋销量与溺水人数不相关。至于和谁相关,就是前门法则、后门法则等讨论的内容了。 " 同时,曹玉阳问到了和batch norm的区别,我的答复: " 二者的目的都是为了更稳定,但出发点是不一样的,所以本质不同。 你的这个例子其实和文章中数字与亮度的问题是一样的。如果所有对猫的训练都是用黑猫,他可能识别一只彩色的猫吗?可能。但如果你的训练样本中是黑猫、黑狗和黄狗,这时你给它一只黄猫的图片,神经网络的内心是崩溃的。因为它会发现两个类都有可能,最终的输出就不一定是什么了。(此段为我自己理解,可能有误) " 但对于deconfound来说,他会发现你现在要识别的是猫和狗,这个和颜色无关,所以会把颜色这个特征先deconfound掉,然后再送给分类器去学习。那么此时分类器学到的结果就更可靠了。 所以,BN并没有达到因果的目的。 但这里要说明,从我读到的资料看deconfound要依赖casual diagram,而这个diagram往往是专家人工指定的。如何自动生成是个diagram?我还没看到。这也是我对这篇论文感兴趣的原因。 其实,对于稳定性我们也在做另一套思路,就是属性拓扑。 属性拓扑目前我们在用概念树来表示,概念树中的概念就会随着数据的变化而发生变化,从而趋近更为稳定的结构。这就是目前荣美和浩然在做的东西。概念虽然也是从相关性中提取,但其可能发现更为本质的东西。比如黑猫、黑狗和黄狗的例子,当它打算把黑色作为猫的特征时,会反思训练集中还有谁是黑色的。此时它发现还有黑狗,于是概念结构中会把黑色排除出猫的概念。 但概念结构的问题也很明显。还是上面这个例子,它会发现所有的黄颜色对象都是狗,且狗都是黄颜色。那么当来了一个黄猫时,它可能会误判为狗。此时它和神经网络的错误是一样的。 我在考虑,casual diagram和属性拓扑都是图结构,现在属性拓扑可以算概念,那么能不能把casual diagram的deconfound方法借鉴到属性拓扑,从而使得其获得因果概念结构呢? 我在读论文的过程中写了很多批注,这个批注版我会发到群共享中。总结起来,这个论文的收获:通过设计deconfounded方法改变数据分布,获得更为本质的数据相关性。但其问题在于对confounder的设定要满足提前已知的要求,所以其今后的可扩展性还有待分析。 ...
Read More