这是一篇关于如何实现科研论文中算法的简要指南。作者曾实现过很多书本上和科研论文中的复杂算法,在这篇文章中作者总结他在研究,阅读,编码和调试时积累的大量经验。很显然,这篇文章主要集中在和计算机科学相关的研究领域中。 然而,你也可以在其他任何领域的论文中使用下面提及的准则。
在你开始阅读一篇论文和实现它之前,有几个你需要注意的地方。并请确保每次你要开始类似的项目之前,都仔细的注意过这几个方面。
除非你是为了纯粹的学习目的而去实现一篇文论中的算法, 否则你不必一定要实现它。实际上,你所需要的不是自己去实现它的过程,而是已经实现了这个算法的代码。所以在你开始编码之前,你应该花一些时间去找找网上是不是已经有实现了这个算法的开源软件。想想你是愿意花两天时间去找到已经完成的代码,还是浪费两个月的时间去实现一个别人已经实现的了算法呢?
你要先搞清楚你想要达到的目标是什么,以及是不是有简单的方法已经可以达到你的目标。 或许你可以尝试使用另外的技术,即使它只能达到你80%的目标,但它不需要你去实现一篇论文。然后你可以再花几天的时间去尝试是不是可以用开源软件运行起来。关于这个更多的详情,请参考我的另外一篇文章 The 20 / 80 Productivity Rule.
如果你再美国, 你需要注意软件的专利问题。有一些论文是注册了专利的,你可能因为在商业软件中使用了它的算法而惹上麻烦。
如果你正在研究一篇关于在计算神经学领域中使用支持向量机(SVM)的论文的话,那你应该再读一些关于机器学习以及其他可替代支持向量机(SVM)的分类算法的介绍。同时,你还可以读一些关于计算神经学领域的文章,看看学术界正在研究什么.
如果你还没有实现过一篇论文或你正在研究一个新领域内的论文,这样的阅读研究是很困难的。不管发生什么,不要让那些复杂的数学公式吓到你。而且,不要去担心进度的问题,即使你感觉理解这篇论文要比你预计的要慢很多, 坚持做下去你会发现你慢慢的就理解了这篇论文中所要表述的概念。
其它翻译版本 (1) 加载中随便选一篇论文,马上开始实现绝对不是一个好注意. 世界上有很多很多的论文,这也意味着有很多很多的垃圾论文。所以发表的论文可以分成三类。
这是一些非常有趣的,写的很好的,原创性的论文。大部分这类论文来自世界顶尖大学或者是已经研究某个领域很久的小学校的研究团队。后者很好区分,他们往往都在自己论文中引用自己之前的研究成果,已展示他们对这个问题的研究已经很长时间了, 而且他们最新的研究工作都是基于已经证实了的论文之上。 同时,这类型的论文基本都在该领域内最好的期刊杂志上发表。
一些研究群体仅仅只是跟随哪些有突破性创新的团体,他们的目的就是提高已经发表的论文(算法),并且发表他们提高后的结果。很多这样的论文缺少合适的统计分析和错误的结论,这样的提高其实是破坏了原有的算法。很多时候,他们这样做并没有带来任何东西,除了带来不必要与而外的复杂性。但也并不是所有的模仿是不好的,有些还是不错的,但却很稀少。
一些研究者并不知道他们做的事情是非常不好的。他们仅仅是为了维持他们在自己学术领域中的状态与特权。所以他们需要资金,并且他们需要出版任何他们需要的东西。比较诚实的研究者会告诉你,在结论中他们失败了,在结果中只有N%的时间(N是有比较差的值)。但一些心怀不轨的研究员会说谎话,他们会说他们的研究取得了巨大的成功。在阅读出版物一段时间以后,很容易就能发现那些垃圾型论文,并抛弃他们。
这个话题已经讨论过很多次,因此不打算继续写很多关于这个问题的探讨。一个好的出发点可以参见这篇文章:How to Read a Paper ,下面的一些观点是我在阅读科技论文时候发现的有用的观点。
原始论文就是你想实现的是什么,描述的是这个领域的开端。有时候也可以选择相似的论文,前提是你觉得这篇论文是能带来算法上本质的提升并且有良好的一致性却不成熟的创新的文章。
那么让我告诉你以该论文作为出发点。你需要在该论文相关领域做些研究。对此,方法就是寻找相关联的论文,即是那些在该论文引用部分里面所提到的论文。再去Google Scholar依据论文题目和作者搜索。你找到的论文是否比你现在看的论文所做的效果更好呢?如果是,那么就去研究找到的新论文。Google Scholar还有个优点就是能标注论文的引用。这个非常棒,因为你能从一篇论文的引用链接找到另外的论文,这样可以找到某个研究领域最新的成果。总体来说就是从当前论文的引用中寻找新的论文。通过这样来回搜索,就会找到适合你的高质量的论文。
重点:在这个搜索论文过程中,你不需要从头到尾仔细阅读理解论文。只需要大体浏览论文并用你的直觉去判断论文的价值。
打印成纸质阅读,打印时不要降低字体大小,如果你降低了字体大小可能节省了几页纸却使你在阅读时因为眼睛更易疲劳而浪费了更多的时间,字体大小一般建议在11pt-13pt
不要在半夜阅读,最好在大脑清醒时才阅读.也应该找一个安静、光线适中的地方。我通常都在台灯下阅读。
标记重要信息,并在重要信息旁写下阅读时脑袋中浮现的各种想法。
通常你阅读大多数文章和小说时,对于生词你的大脑会象计算机一样根据上下文自动得出意思。但是科技出版物完全不同,其中最多的错误就是单词意思的错误假设。比如说句子“The results of this segmentation approach still suffer from blurring artifacts”中“segmentation”和“artifacts”通常有着“分割”和“手工品”的意思,但是在计算机视觉领域有着特殊的意思。如果你阅读这篇论文时没有注意这个,你的大脑用了他们的通常意义去理解,你会漏掉很重要的信息。因此你必须(1)避免假设单词的意思,任何时候有疑问需查阅专业词典(2)抄写一张你不熟悉的专业生词概念表做参考。如果你遇到概念比如“faducial points”和“piece-wise affine transform”,首先你应该查出他们的准确的专业含义,然后加在你的生词表里。概念是语言式的大脑快捷键可以帮助你更快理解作者的意图。
如果论文作者仅仅用曲线展示他的算法和其他算法的差异,并且说“你看,比原有算法准确了20%”,这种论文就一垃圾论文. 你应该阅读的是那种在论文中说: “在N个实例的测试集中,我们的算法在两个样本测试中检验值提升了5%(这句真不好翻译)” 统计结论更多的证据应该来自数据而不是作者的个人想法 (除非作者撒谎夸大他的结论).
假设你需要一个能够从图片中人脸识别的算法.作者在论文结论中说他的模型用80个人不同照片(10x 80 = 800张图片)进行训练, 对训练集进行测试时人脸识别准确率达到98%,但是对测试集(测试的图片没有被用于训练集)进行人脸识别时准确率只有70%。这样的描述是什么意思呢?它以意味着该算法仍然存在问题(这句真不好翻译)——该算法当用于对训练集进行识别时是非常不错的(但种情况没有任何实际意义),但是用于对测试集进行识别时就会非常糟糕。你也可以通过这点,来判断一篇论文是否是你所需的
如果你想用网络摄像头做脸部识别,而作者的输入数据用的是出自高清相机的相片,那么算法结果可能会完全不同。必须保证你的输入数据近似与算法测试数据,否则会造成算法完全无用在你的case。
人都会犯错,不要认为作者是神。特别是算式真的很难理解,你应该问问你自己是否作者写错了。这可能仅仅是论文的抄写错误或一个数学计算错误。不管怎么说,最好的方法是自己做做计算去验证结果。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务