【写给新手!】一些可能有用的科研建议(计算机/人工智能方向)

嗨你好呀!我是 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 的成长和进步你能够非常明显地感受到!(而且其实,如果你来上一两次科研以后依然愿意痛并快乐地搞科研,那基本就能确定是真爱了()这很好!!!

最后,加油!!!祝看到这篇建议的每一个人科研顺利!

也祝我的论文能中稿!!!!

【置顶】插上热爱的翅膀,勇敢地去飞翔——我与计算机的故事

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路。

已于 2024.10.2 阶段性更新。

“左手拿着一本《深度学习》,右手抱着电脑,她飞快地穿梭在人群中,明朗的笑容和利落的短发成为她最显眼的标志。”

这是我的同学在作文中对我的描写,朴素而真实。(不过现在短发变成中等长度的啦~)

无论是家长、老师还是同学,提到我,一个必定绕不开的词就是“计算机”。我和计算机,似乎早已深深“绑定”在一起。

我和计算机的故事很长,但在这篇文章中,我想抛开那些复杂的技术细节,聊一聊我对计算机的感情、计算机带给我的成长以及我从计算机中看到的,更大的世界。

初次踏入计算机的世界是在五年级,我学了 Python,写了几个有趣的小游戏。(补:我的 csdn 上甚至还有我当时写的什么【150 行代码搞定贪吃蛇】(然后当时 11 岁的文章的访问量在后来这四年间再没有被超越(

(wait,如果算上 scratch 的话,第一次接触计算机应该是在四年级,我爸给我报了个 scratch 的班,scratch 貌似学了蛮久的(半年多?)后来就搞 Python 了。我还记得那个时候有个很火的小游戏叫 ”跳一跳“,然后我当时用 scratch 搞了快一个月搞出了一个极简版跳一跳((

六年级的时候,抱着“做一件很酷的事情”的心态,我搭建了我的第一个个人网站,这前前后后耗费了我将近三个星期,当网站主页终于呈现出一行“hello world”的时候,那种激动的心情是难以言表的。或许也是从这个时候开始,我逐渐发现我对计算机的兴趣似乎不止于“偶尔做一件很酷的事情”。

我的第一个个人项目是在初一,入学三周后,我发现“记作业”是个让同学们困扰的问题——每一项作业都需要记录在记录本上,如果不记录就很可能会忘掉,而且没有一个统一发布所有作业的平台。

这让我产生了搭建一个统一发布作业的平台的念头,并且我很快付诸实践,从零开始自学,最终这个项目在初一的第二个月成功上线。(当然,后来也有过很多更新完善,在本文的后面部分会提到)

从那以后,一直到初二结束,我每天回到家的第一件事就是在平台上发布作业,后来我去到了新的学校,原学校的作业网站也交给了其它同学继续运营。可以说,这个网站承载着我的回忆,也记录了我在计算机这条路上最初的脚步。

初一下学期,我自学了 C++,七百页的“大部头”我在两个月里啃完了三百多页,技术栈的扩充带来的是更强的深入探索的激情。

很多人曾问过我,“你为什么会喜欢计算机?”,我总在尝试回答,却一再发现我难以给出明确而具体的原因——我对计算机的热爱似乎没有来由,我只是发现,在我面对无论是具体的代码公式,还是更宽泛的计算机科学的时候,我总是激动而喜悦。计算机让我着迷,让我愿意为之投入所有可能的时间,这种原生的热爱不断地驱动着我的生活,也极大地丰富了我的生活。

当然,梦想总有和现实“不兼容”的时候。初二下学期,我意识到可以以一种全新的方式重构整个作业网站,相当于把现有的项目结构全部推翻,重来一遍(因为新方法会带来极大的好处)。同时我希望把这个项目做成一个“发行版”,这样其它班级和学校也可以通过这样的方式发布作业。奈何,“小中考”临近,各科的难度也陡然上升,面临越来越重的学业,有限的时间和精力在迫使我做出选择——我该如何重新分配我的时间?有些事情,是不是必须被放弃?

我用实际行动表明了我的态度——学业成绩和我的项目,我不会放弃任何一个。

初二下学期,我总会在学校以最快的速度完成所有作业,那所学校的作业很多,所以这并不是个容易的事情,但我总在尽力寻找所有可能的时间。回到家之后,我会拿出将近三个小时的时间去实现我的项目。最终,所有工作完成耗时一个月(最终的成果十分令我满意!),这期间我还进行了高强度的期中考试和中考复习。

不过,事情肯定不会如想象中的那样一帆风顺,在中考前的学期每天拿出三个小时做“和考试不相关的事情”给了我不小的心理压力,把时间表安排的没有一丝空白也给我带来了不少负面的影响。在这个过程中,对自我甚至对人生价值的怀疑也常有出现,但无论如何,我从未想过“放弃计算机”。我在不断地适应、调整,尽可能地寻找到学业、热爱和正向情绪三者之间的平衡点。这段时间对我来讲是一个至关重要的阶段,它带给我蜕变,不仅仅是因为它让我学会高效利用时间或合理调解情绪,更重要的是,它让我真正看清了自己内心的追求与热情,让我意识到人生绝不是只有考试,更让我重新认识了我与世界的关系。

我想,这段经历是独特的,它在很大程度上塑造了现在的我。热爱与执着,坚韧与坚定,探索与平衡,心怀梦想而又关注现实……这些特质将会支持着我在计算机这条路上越走越远。

摄于学校三层的某个自习室()最喜欢的地方!!(我愿意称之为我的第二个家(((

令人惊喜地,我有幸在初二结束后,经过层层选拔,进入到一所很好的学校,并在初三就开始高中课程的学习。

这是一所令人非常喜欢的学校,在这里我发现了新的学习方式,这让我的学习效率提高了不少,从而拥有了更多可以自主安排的时间。

初三的上学期,我的计算机搁置了一段时间。不过,或许是因为在初二升初三的时候考到这所学校的同学的理科都很好,并且其中有一些真大佬(啊当然不是我),受到他们的影响,我开始系统地接触高等数学(em 但也没有那么系统,肯定跟大学的那种系统比不了)。

初三的寒假,我开始自学机器学习和深度学习,这比任何我曾经学过的知识都要复杂,其主要原因是人工智能领域涉及到许多“高深”的数学知识,类似于微积分、线性代数、统计学和概率论等等,同时许多专业文献或书籍都是英文,对我的英语能力也提出了很高的要求。

嗯,不过显然我早就做好准备了。我一直认为,最难的东西是决心,只要我有决心,这些再难也是能学下来的。

寒假期间,我开设了一个个人专栏,专门讲机器学习,现在已经写了十万多字(补:十七万啦!!)。

初三下学期,我从从国内体制转到国际部上学,半路转轨带来的压力和冲击是难以言说的。语言能力的欠缺使得转轨后的第一个月我不得不“忍痛割爱”,几乎没有怎么看我的计算机,而是专心让投入英语的学习。(虽然但是,歪个楼,那一个月是真努力啊……或许我会在另一篇文章里讲一讲我的经历和感受。

然而,当我在五月份打开 arxiv,点开一篇论文,能够(虽然磕磕绊绊但是)完整地读下来的时候,我觉得,我又发现了一块新的天地。

在初三的 5、6 月,托福取得了阶段性成果的我开始 ”放飞自我“,每天和深度学习呆在一起,少则两三个小时,多则四五个小时。

还记得五月份 AP 考试周,我因为半路转学所以没有考试,每天就呆在三层的小自习室,永远只带几样东西——电脑、充电线、《动手学深度学习》、笔、草稿纸。这样的日子过了一周多。

当时还不知道去哪里找 gpu(或者说没有找到价格合理的()),于是有好几天晚上就一直把电脑开着训练模型,导致第二天电脑特别卡()。

两个月的时间,《动手学》看完了前九章,第十章是 attention,一个虐了我好久的东西()。

暑假,我决定开始接触科研。

我没有选择找机构,因为我知道,那不是我所向往的科研。

我找了一些人,发了不少信息。最终,十分幸运地,找到了一个愿意带我一起做科研的团队。

大半个暑假的时间就花在科研上了,这段经历非常独特且难忘,我会在另一篇文章中讲述它。

【待更新】

人工智能真的是一个令人着迷的领域,虽然有些算法的确很难理解或有着复杂的细节(@@@@transformer,到目前为止最爱的没有之一)))),但在我经过几个小时甚至几天的研究,终于理解它们的时候,我真的会惊叹于它们背后极其精妙的思想。有些精妙在复杂但完美的数学推导,有些精妙在惊人的直觉。

事情蛮多的,但我总会找到时间去钻研那些很难又很有趣的算法 & 数学 & 模型,去实现我的科研 idea,去写我的专栏,去继续探索这个广阔的领域……

去继续奔赴属于我的计算机世界。

去追逐我最爱的一切!!!

当然,作为一个“未来的计算机专业(或人工智能专业)的学生”,关于计算机专业的“流言蜚语”我也听过不少。尤其是在这两年,因为 AI大模型迅猛的发展,越来越多的人开始唱衰计算机专业,说“计算机的时代结束了”“未来只会有越来越多的开发者被淘汰”……诸如此类。

我想,这些言论或许看上去有一些道理,但若深究,它们都经不起推敲,也不太具有参考价值。

在这类文章中,我看到诸多作者都在以“工业革命使得许多手工业者失业”来类比“人工智能的发展会使得开发者失业”。

的确,工业革命对许多产业的格局造成了颠覆性的影响,许多手工业者因它丢了工作。但是在工业革命之后,生产效率的提高使得人们得以从枯燥重复的“体力活”中解放出来,去从事更有创造性的、更能够凸显人独特智力的工作。工业革命淘汰了一部分只会机械化、重复性工作的人,但给予了那些拥有创新能力和探索心的人更多的机会。

我认为,人工智能的发展也是同理,随着 AI 代码能力的提高,一些只会机械地写代码而没有创新能力的开发者的确会被淘汰,但那些愿意钻研的、拥有创造力和对科技趋势洞察力的开发者们不但不会被淘汰,反而会拥有更大的平台、更好的资源和更多的机会。

所以,人工智能的飞速发展对我们而言究竟是威胁还是机会,这并不取决于人工智能,而取决于我们。

这个世界根本上还是由人主导的,人的主观能动性是我们应对这个瞬息万变的世界的最有力的武器。

与其在漫天的评论和舆论中迷失自我,不如沉下心来,去培养自己身上那些无论何时都不会被取代的能力——元认知、创造力、好奇心、洞察力……以及最根本的,对某个领域长久地热爱和对生活的热情。

“且视他人之疑目如盏盏鬼火,大胆地去走你的夜路。”

插上热爱的翅膀,勇敢地去飞翔!

共勉。