嗨你好呀!我是 Geeker_LStar,一名热爱人工智能、计算机科学和数学的学生。
这个暑假我完成了人生中的第一次科研,积攒了一点点经验(翻译:踩了很多坑),在这里分享一下!!! 希望能帮到一些同学!!
通常而言,一篇论文从开始到成型需要经历以下几个阶段:
确定研究方向(选题)——阅读别人的相关论文——构思自己的idea——写代码实现自己的idea——做实验——分析实验数据——写论文。本文将从这几个阶段出发,结合我自己的科研经历,写一些(面向新手的)科研建议。
当然,这里我只讨论实打实的靠自己 & 团队里每一个人的科研,花钱找机构或花钱挂名那种不算。
确定研究方向(选题)阶段:
嗯,毋庸置疑的,选题是一篇论文的核心,科研大佬们一般都对选题具有独到的眼光。however 我只是一个小白,关于怎么选题其实我也很难说。但就我自己来说,我的第一段科研经历(快要结束了,论文还有大概两周截稿)的选题不是我确定的,是团队里的大佬确定的;而我的第二段(即将开始)的科研是我自己确定的选题,其实出发点是我想做一个计算机视觉方面的工具/应用,但是有了第一段科研经历后我突然发现这其实是一个不错研究方向(可以自己提出一个 idea(深度学习相关)去实现我想的这个工具)。并且我想做的这个方向目前还没有像另一些工具一样竞争到了一个白热化的阶段,但是也有了一些不错的研究成果。不太大众但也没有那么小众,总体来说还算 novel,就蛮不错的!
阅读论文阶段:
这个阶段对大多数新手来讲会有些痛苦()比如我()
我的英语水平其实不算很差(但也不算很好),但是刚开始读论文的时候也感觉读完一遍都不知道要重点看什么。。。每一句都总结却感觉像每一句都没总结()
我当时是五天看了十几篇论文,几乎每天从早看到晚,配上我不算很好的英语水平,真的感觉再看就要吐了(((
However!! 在看了一些论文以后,我发现读论文其实是有不少要点的,如下!
(当然,这只是我的习惯,不一定正确,也不一定适合每个人)
找 & 筛选论文:
首先,关于论文去哪里找的问题,我只能说万能 arxiv 真的 yyds!(虽然对于论文在审稿前就公开在 arxiv 宣传占坑的行为有些争议,但是 arxiv 真的是很适合看计算机/AI论文的地方)
在 arxiv 上面,通常你搜索一个关键词会跳出来很多论文,但是并不是每篇论文都有参考的价值,你可以看看写这些论文的团队,一般名校团队或大厂团队是比较有参考价值的;也可以看论文的引用量,高引论文(大部分)肯定值得细看;也可以看看这些论文都投到了哪些会议,顶会(CCF-A/B)的论文一般都还可以(肯定也有灌水的,但是会少一些)。
Andandand,一定要看这篇论文是否开源了代码和数据集,如果没有,最好别用(纯理论方向除外)。不是有个段子嘛,“(有些论文)论文代码没影,readme天花乱坠;公开榜单全部扑街,私有数据遥遥领先”,所以最好不要看没有开源代码 & 数据集的论文。
阅读论文:
Okay,如果你已经确定了要看的论文,看的方法也是比较重要的。
一篇论文的结构大概是这样的:abstract——introduction——related work——method——experiment——conclusion——reference。
首先 abstract 和 intro 肯定是要好好看的,有些时候看懂这两个你就能知道论文大概要干什么了。related work 我一般不会在第一遍就看,一般直接跳过这一块,不过有些论文在 related work 最后会总结一下这篇论文的贡献,可以看一看,不过这些在 intro 里面应该也都会有更详细的解释。method 很显然要精读,不过如果你的数学水平不是很高的话(像我这种的),可以在第一遍跳过数学公式,只看方法思路,而不要去追究数学细节。experiment 的话,要不要仔细看主要看你在你要写的这篇论文中负责什么(假设你们是一个论文团队),如果你就主要负责做实验,那这里需要好好看,具体要看哪些我后面在做实验那一部分还会细说;但如果你不太需要负责实验,这一部分只需要大概看看实验结果就行了,不用管细节(当然,如果你是一个人负责整篇论文,那实验这个部分还是要精读的,后面会讲到具体要关注什么)。至于 conclusion,它通常都不会很长,读一下就可以,有一些会和 introduction 有重复。reference 的话,有余力并且对论文中提到的某个细节很感兴趣,可以看看,不看也没什么大问题。
总结就是,abstract、introduction 和 method 中除了数学推导外的东西都是需要细看的,如果可以,最好做做笔记,以防自己忘掉。这些就能够让你了解这篇论文到底在干什么,至于其它部分怎么看+要看到什么程度,依据你的英语水平+数学水平+在团队中负责的部分来决定。
关于笔记怎么做,我个人建议不要每句话都翻译,咱不是在做托福阅读,可以列一个大纲,简短地概括一下研究背景、解决了什么问题、研究思路和主要创新点。如果是特别重要或著名的论文可以有更加细致的阅读和概括。
另外,最好不要用机器翻译,翻译出来的结果真的难以阅读。还是原生的英文看着更舒服一些。
想 idea & 写代码阶段:
这个嘛……还是等我有更多科研经验了再来细说吧!!很多时候并没有一个定式的。
实验阶段 & 数据分析阶段:
豪德,终于到这玩意了()我可真是被实验折磨的不轻(((
计算机/人工智能方向的实验分为两个部分——复现别人的实验(对比实验)& 做自己方法的实验。
如果你负责做实验,那么你需要对每一篇对比 paper 的 experiment 部分了如指掌()具体来说,下面这些都是非常需要注意的点,如果你在一开始没有精细地注意它们,那么你可能会在实验做到一半的时候推翻重做((((别问我怎么知道的(((问就是,各种大坑,我都掉了一遍((
数据集:
不管是什么选题,只要不是纯理论,应该都会有一些比较有名或应用的比较多的数据集。做实验的第一步就是先了解这些数据集。
不同论文使用的数据集大概率是不同的,但最终所有的对比方法和自己的方法都需要在相同的数据集上进行测试,so 在确定最终使用的数据集之前,最好先充分了解所有对比论文中使用的所有数据集——包括它们的下载链接、原始数据、数量/大小等。在选取用于最终实验的数据集时,要充分考虑是不是所有的对比方法都支持对那种数据集的处理,如果不支持,有可能需要自己写代码。(aaa 最好还是找到支持的,因为自己给别的论文写数据预处理真的有点难搞而且万一写的不对。。。
数据处理方法:
这也是个大工程,我记得有句话说什么,数据处理占掉了一个AI 开发者 70% 的时间((()好吧确实夸张,但是也不无道理,数据处理确实是个很重要的工程。
对于每个对比实验的数据处理方法,能读代码的可以读一下,这样如果后面要改评价指标部分的代码也会稍微好改一点,但是注意不要动除了评价指标之外的代码。
对于处理后的数据,可以看一下数据的每一个 part 都是什么意思,是怎么用到训练代码(论文方法)中的,读懂了可能更有助于理解别人的方法的思路。
评价指标:
这个嘛,一定要在开始训练之前确定统一的评价指标。一般对于大部分任务,学术界都已经有了较为统一的评价指标,要保证所有的对比方法使用的是同一套评价指标(别所有实验都做完了发现评价指标不统一,我就是这样,最后只能改到统一了然后重做)。
对齐设置:
嗯……学术诚信还是很重要的,so 对于所有的对比实验,都用别人论文里面给出的最佳参数去训练就好了,这样才公平。同时也要注意所有方法要使用相同的原始数据集。之前看到一个知乎回答,什么“不太懂对齐实验设置,看心情延长训练时间”,这种最好还是不要出现比较好(((
实验环境:
如果你非常的壕或者团队/实验室有卡,那直接用卡就 ok 啦。但是如果没有,autodl 是一个很好的选择,并不贵,学生认证之后会更便宜(((
嗯,如果复现不出来原始论文的结果,不必担心,这很正常。如果差一点点,可能是随机数的原因,如果差很多并且你完全按照原作者的实验配置和代码去做的,这大概率是原作者的学术诚信问题,而不是你的问题,放真实的数据就可以了。
做完实验之后就是数据分析,emmm 这里就不说那些常用的“数值优化 or 调参”trick 了,我还是坚持实事求是用真实数据的,调参改随机种子之类的个人感觉没什么必要。只要工作足够 solid,为什么数据还需要 “人为优化”呢?
写论文阶段:
Weeeell,由于我的英文写作水平还没有那么高,所以现在还没有负责过论文写作,也没有什么经验。所以在这里只简短地提一下。
写论文要用 overleaf 别用 doxc,画图可以用 R 或 Python(别用 ppt 球球了)。
论文一定要注意排版、字号、图表格式,等等,这些都是很细节的东西,但是如果这些都没有处理好,很容易影响审稿人对你论文的第一印象。还有就是要注意会议的论文页数限制,超过页数是可能会被直接 desk reject 的!!
写在最后:
心态,心态,心态!!!
搞科研真的考验+搞心态。心态崩了是很正常的,崩了再调整回去就 okay 了。
如果你不赶 ddl,那还好,如果你有论文 ddl 同时还有很多别的事情要做,恭喜你,你会在 95% 甚至更多的时间中感受到科研带来的非常大的 pressure,并在剩下 5% 的时间中(通常是取得了阶段性进展或解决了一个持续了很久的问题之后)感到非常大的快乐。(搞计算机是这样的,改 bug 有多痛苦改完 bug 就有多快乐!!!)
特别地,如果你还是个学生(初高中/本科)而非专业的科研人员/硕博/企业员工,请别对你的第一段科研抱有太多美好的幻想或滤镜(如果这段科研有着紧张的 ddl 的话),因为真实情况通常会和美好的幻想相去甚远——你可能会在每天早晨起床的时候感觉一点也不想面对新的一天(因为昨天的你留下了很多没有解决的 bug 并且你并不知道要怎么解决它们),你也可能会因为各种状况/失误之类的连续两周熬夜到将近十二点然后感觉自己要寄了(),你也可能要同时面对科研和很多件别的事情然后感觉真的处理不完甚至崩溃到想哭……并且你还得自己默默消化完所有这些情绪然后继续做你该做的事情。这些都是我这个暑假的经历,一点也不夸张。
不过,我觉得,值得!!!! 科研经验就是这么一点点攒起来的,后面就会越来越顺利!并且第一段经历是很特别的,这种从 0 到 1 的成长和进步你能够非常明显地感受到!(而且其实,如果你来上一两次科研以后依然愿意痛并快乐地搞科研,那基本就能确定是真爱了()这很好!!!
最后,加油!!!祝看到这篇建议的每一个人科研顺利!
也祝我的论文能中稿!!!!