4.4 验证论文给出的结果
5 选择正确的语言和库
5.1 现有系统
5.2 预测复现代码的未来用途
5.3 完全或部分解决算法的可用库
6 算法复现
6.1 正确得选择精度
6.2 归档编程过程
6.3 在代码中添加对论文的引用
6.4 避免使用数学符号命名变量
6.5 第一遍不做优化
6.6 计划创建一个API?
7 调试
7.1 将结果与其他复现进行比较
7.2 与读过该论文的人交谈
7.3 将变量形象化
7.4 用于测试的数据集
8 结论
0 引言
====
人类理性活动有三种方式:
(1)纯逻辑的推理和思辨方式。
(2)归纳法
(3)演绎法
中国是技艺型文化,西方是哲科型文化,对思维逻辑性很高。所以纯逻辑的推理和思辨方式对于科研很重要!科研论文代码复现的能力也很重要!
本文将给出一种从科学论文中复现算法的简单指导,我已经成功从书籍或者科学文献资料中复现了许多复杂算法,本文包括了我从搜索、阅读、编程和调试中所学到的经验。本文提供的指导显然也仅限于与计算机科学相关的领域的文献资料。然而,我更希望你们能够将本文提供的指导和实践方法应用于其他类型的论文或算法复现。
1 在你阅读科学论文之前
============
在你阅读科学论文并准备复现之前,你应该注意以下几点,并保证你能够根据这些点一一进行自我检查。
1.1 先找找开源资源,避免重复编程
除非是你想要通过算法复现更深入地学习一个领域的知识,你才有必要亲自去复现它们。如果你并不是想要复现整个论文的算法,而只是想应用它们,那你就应当在做任何复现工作之前,花上几天时间在网络上寻找开源资料。试想一下,你是愿意花两天时间找开源代码,还是希望浪费两个月时间复现一个已经开源的代码呢?
1.2 寻找实现你目标的更简便的途径
问问你自己你的目标是什么?为了达到你的目标,是不是有更简便的解决办法呢?你能不能用其他的技术?即使只能得到你想要的结果的80%,这也意味着你不需要再去亲自动手复现整个代码,这样的话,你也许会在接下来的两天内将现有的算法或者开源的算法运行起来。关于这方面如果你想要了解更多,可以查看我的文章《20/80生产力法则》。
1.3 注意软件专利
如果你在美国,你应该注意软件专利。有些论文申请了专利,如果你把它们的算法应用到商业用途,你可能会陷入侵权问题。
1.4 学习相关领域的更多论文
假如你在阅读一篇关于在神经科学背景下使用支持向量机(SVM)的论文,那么你应该读一段机器学习的简单介绍以及不同可以代替支持向量机的分类器,并且你应该阅读计算神经科学的概论性的文章来了解该领域目前正在进行什么样的研究。
1.5 保持学习动力
如果你从来没有复现过一篇论文的算法,或者你对该论文的领域非常陌生,那么论文的阅读就会非常困难。无论发生什么,不要让大量的复杂的数学方程使你气馁。此外,欲速则不达,尽管你的理解速度比你想象的要慢,只要你继续努力,你就会慢慢地、稳步地理解论文所提出的概念