2004年7月11日

MIT AI Lab: How to do research?

When I reviewed the documents in my computer, I found out the Word format file MIT AI Lab: How to do research. This is a classical article for any researcher. Last Oct. 29 I read it once. Just in this afternoon I reviewed it.
I tagged the important sentences of this file. They were useful for me. I listed them as follows:

与相关人员保持联系
阅读文献,始于今日
本领域最重要的十篇论文

阅读论文可分为三个阶段:
第一阶段是看论文中是否有感兴趣的东西。AI论文含有摘要,其中可能有内容的介绍,但是也有可能没有或者总结得不好,因此需要你跳读,这看一点那看一点,了解作者究竟做了些什么。内容目录(the table of contents)、结论部分(conclusion)和简介(introduction)是三个重点。如果这些方法都不行,就只好顺序快速浏览了。一旦搞清楚了论文的大概和创新点,就可以决定是否需要进行第二阶段了。在第二阶段,要找出论文真正具有内容的部分。很多15页的论文可以重写为一页左右的篇幅;因此需要你寻找那些真正激动人心的地方,这经常隐藏于某个地方。论文作者从其工作中所发现的感兴趣的地方,未必是你感兴趣的,反之亦然。最后,如果觉得该论文确实有价值,返回去通篇精读。

读论文时要牢记一个问题,“我应该如何利用该论文?”“真的像作者宣称的那样么?” “如果……会发生什么?”。理解论文得到了什么结论并不等同于理解了该论文。理解论文,就要了解论文的目的,作者所作的选择(很多都是隐含的),假设和形式化是否可行,论文指出了怎样的方向,论文所涉及领域都有哪些问题,作者的研究中持续出现的难点模式是什么,论文所表达的策略观点是什么,诸如此类。将阅读与程序设计联系在一起是很有帮助的。如果你对某个领域感兴趣,在阅读了一些论文后,试试实现论文中所描述的程序的“玩具”版本。这无疑会加深理解。可悲的是,很多AI实验室天生就是孤僻的,里面的成员主要阅读和引用自己学校实验室的工作。要知道,其他的机构具有不同的思考问题的方式,值得去阅读,严肃对待,并引用它们的工作,即使你认为自己明晓他们的错误所在。经常会有人递给你一本书或者一篇论文并告诉你应该读读,因为其中有很闪光的地方且/或可以应用到你的研究工作中。但等你阅读完了,你发现没什么特别闪光的地方,仅仅是勉强可用而已。于是,困惑就来了,“我哪不对啊?我漏掉什么了吗?”。实际上,这是因为你的朋友在阅读书或论文时,在头脑中早已形成的一些想法的催化下,看出了其中对你的研究课题有价值的地方。

Jo Cool有了一个好想法。她将尚不完整的实现与其他一些工作融合在一起,写了一份草稿论文。她想知道这个想法究竟怎么样,因此她将论文的拷贝发送给十位朋友并请他们进行评论。朋友们觉得这个想法很棒,同时也指出了其中的错误之处,然后这些朋友又把论文拷贝给他们各自的一些朋友,如此继续。几个月后,Jo对之进行了大量修订,并送交给AAAI。六个月后,该论文以五页的篇幅正式发表(这是AAAI会议录允许的篇幅)。最后Jo开始整理相关的程序,并写了一个更长的论文(基于在AAAI发表论文得到的反馈)。然后送交给AI期刊。AI期刊要花大约两年的时间,对论文评审,包括作者对论文修改所花费的时间,以及相应的出版延迟。因此,理想情况下,Jo的思想最终发表在期刊上需要大约三年时间。所以牛人很少能从本领域出版的期刊文章中学到什么东西,来得太迟了。


有很多讨论某个AI子领域(如连接主义或者视觉)的邮件列表,选择自己感兴趣的列表加入。


当你读到某份让你感到很兴奋的论文,复印五份送交给对之感兴趣的其他五个人。他们可能会反馈回来很好的建议。本实验室有很多针对不同子领域的非正式(持续发展的)论文讨论组,他们每星期或每两星期聚会一次,对大家阅读完的论文进行讨论。


只要自己写下了些东西,将草稿的拷贝分发给那些可能感兴趣的人。(这也有一个潜在的问题:虽然AI领域的剽窃很少,但也确实有。你可以在第一页写上“请不要影印或者引用”的字样以做部分防范。)大部分人并不会阅读自己收到的大部分论文,因此如果只有少数人返回评论给你,也不用太在意。你可以如此反复几次——这是期刊论文所必需的。注意,除了自己的导师,一般很少将两次以上的草稿送给同一个人。


维护一份自己感兴趣参考文献的日志。

“参考文献”图。所谓的参考文献图,是指引用组成的网:论文A引用B和C,B引用C和D,C引用D,等等。

与他们讨论自己认为确实优秀的论文

从某个时间开始,你将会开始参加学术会议。如果你确实参加了,你会发现一个事实,几乎所有的会议论文都令人生厌或者愚蠢透顶。(这其中的理由很有意思,但与本文无关,不做讨论)。那还去参加会议干吗?主要是为了结识实验室之外的人。外面的人会传播有关你的工作的新闻,邀请你作报告,告知你某地的学术风气和研究者的特点,把你介绍给其他人,帮助你找到一份暑期工作,诸如此类。如何与别人结识呢?如果觉得某人的论文有价值,跑上去,说:“我非常欣赏您的论文”,并提问一个问题。获得到别的实验室进行暑期工作的机会。这样你会结识另外一群人,或许还会学到另外一种看待事物的方式。

找出该领域最棒的期刊是什么,向该领域的高人请教。然后找出最近几年值得阅读的文章,并跟踪相关参考文献。

找出该领域最著名的学者,阅读他们所著的书籍。跟该领域的研究生泡在一起。参看外校研究该领域的系的课程表。拜访那里的研究院办公室,挑选有用的的文献。


做习题集。尽可能早地选修尽可能多的数学课,其他领域的课程以后选也很容易。


每一个人都需要知道认知心理学的某些知识

在MIT,Susan Carey开了一门很好的有关发展心理学的初级研究生课程。

如果你想研究自然语言处理,语言学是很重要的。不仅如此,它还包含了很多有关人类认知的约束。在MIT,语言学主要由Chomsky学院负责。你可以去看看是不是符合自己的兴趣。George Lakoff最近出版的书《Women, Fire, and Dangerous Things》可作为另外一种研究程序的例子。


做科研笔记

定期翻阅你自己的笔记本。有些人会做月度总结,方便将来的引用。笔记中记录中的东西经常可以作为一篇论文的骨干。这会使生活变得轻松些。相反,你会发现写粗略的论文——标题,摘要,分标题,以及正文的片段——是一种记录自己当前工作的有效方式,即使你并不准备把它变成一篇真正的论文。(过一段时间你或许会改变想法)。
你或许会发现Vera Johnson-Steiner的书《Notebooks of the Mind》很有用,该书并不是描写如何做笔记的文献,它描述了随着思想片断的积累,创新思想是如何出现的。


阅读有关如何写作的书籍。Strunk和White的《Elements of style》对基本的应该如何不应该如何做了介绍。

先写一个草稿,然后返回修订。写草稿有助于理顺思路,如果写不出来正文,那就写个大纲。逐步对之细化,直到已经很容易写出子部分的内容。如果连草稿也写不出来,隐藏掉正在写作的所有窗口,然后随便输入自己脑袋里想到的东西,即使看起来好像是垃圾。当你已经写出了很多文本后,重新打开窗口,将刚才写的东西编辑进去。另外一个错误是以为可以将所有的内容依次写出。通常你应该将论文的核心内容写出来,最后才是介绍部分。

坚持记日记也是练习写作的方法(也会使你试验更多的文体,不仅仅是技术论文)。这两种方法还有其它的实质作用


如果这还不够,还可从其他从事这一研究的人那里借用一些词语用法。


论文的写作要有利于读者查找到你所做的工作。无论是段落的组织还是通篇的组织,都要将最核心的部分放在前面。要精心写作摘要。确保摘要已经反映出你的好思路是什么。确保自己明白自己的创新点是什么,然后用几句话表达出来。

写完一篇论文后,删掉第一段或者头几句话。你会发现那是与内容无关的一般性话语,更好的介绍语句在第一段最后或者第二段的开头。

要写出有用的评论,需要读两遍论文。第一遍了解其思想,第二遍开始作评论。 如果某人在论文中屡次犯同一错误,不要每次都标记出来。而是要弄清楚模式是什么,他为什么这样做,对此还可以做什么,然后在第一页清晰地指出或者私下交流。


不要在论文写毁灭性的批评如“垃圾”。这对于作者毫无帮助。花时间提出建设性的建议。要设身处地地为作者着想。评论有很多种。有对表达的评论,有对内容的评论。对表达的评论也可以很不同,可以是校对打字稿,标点,拼写错误,字词丢失等。应该学一些标准的编辑符号。还可以是校正语法,修辞,以及混乱不清楚的段落。通常人们会持续地犯同一语法错误,因此需要花时间明确地指出。接下来是对组织结构的评论:不同程度(子句,句子,段落,小节乃至一章)的次序混乱,冗余,无关的内容,以及丢失论点。很难描述对内容进行评论的特征。你可能建议作者扩展自己的想法,考虑某个问题,错误,潜在的问题,表达赞美等。“因为Y,你应该读X”是一种总是有用的评论。


注意,作为一种礼貌,在要求别人评论之前,应首先用拼写检查器对自己的论文进行检查

确保论文可读性比较好。


论文在投往期刊之前,应该交流一段时间,并根据反馈的评论进行适当的修订。要抵制那种急匆匆地把结果投往期刊的做法。在AI领域,没有竞赛,而且不管怎么说,出版周期的延迟要大大超过对草稿进行评论的时间。读一读你想投稿的期刊或者会议的过刊,确保自己论文的风格和内容是适合的。很多出版物都有一页左右的“作者投稿须知”,仔细看看。


论文被决绝了——千万不要沮丧灰心。

无论是哪种的评审,作为评审者都要有礼貌。

如果你的导师有定期的研究讨论会,自愿去作演讲。

对于比较正式的报告——特别是你的答辩——应该在几个朋友面前练习一遍,请他们批评指正。


本质上所有的AI程序设计都使用Common Lisp。

设计或者应用程序设计中用到的大不相同。开始学的时候,可以先看看Abelson和Sussma的《Structure and Interpretation of Computer Programs》,并做一些练习。这本书与AI程序设计本质上并不相干,但是包含了一些相同的技术。然后读Winston和Horn写的Lisp书第三版,书里有很多优雅的AI程序。最后,进行实际的程序设计,而不是阅读,才是最好的学习程序的方法。


要给代码加注释。使用正确的数据抽象。将图和你的代码隔离开,由于你使用的语言基本上是Common Lisp,因此可移植性很好。诸如此类。经过头几年的学习后,应该写一些自己的标准AI模块,


像论文一样,程序也有可能过于追求完美了。不停重写代码以求完美,最大化的抽象所有的东西,编写宏和库,与操作系统内核打交道,这都使得很多人偏离了自己的论文,偏离了自己的领域。(从另外一方面,或许这正是你需要将来谋生的手段)。


查阅实验室的研究总结。其中有一页左右的篇幅描述了每个教师以及很多研究生目前在做什么。如果你对某些教师的研究工作感兴趣,查阅其最近的论文。在第一学期,与尽可能多的教师交谈。去感受他们喜欢做什么,他们的研究和指导风格是什么。

记住,一旦选好了题目,你必须与导师就论文完成的标准达成清晰的一致。如果你和他对论文具有不同的期望,最后你肯定死得很惨。必须定义好“完成测试”的标准,像一系列的能够证明你的理论和程序的例子。

做论文的过程中,有很多浪费时间的方式。要避免下列活动(除非确实跟论文相关):语言表达的设计;用户接口或者图形接口上过分讲究;发明新的形式化方法;过分优化代码;创建工具;官僚作风。任何与你的论文不是很相关的工作要尽量减少。一种众所周知的现象“论文逃避”,就是你突然发现改正某个操作系统的BUG是非常吸引人也很重要的工作。此时你总是自觉不自觉的偏离了论文的工作。要记住自己应该做些什么

没有评论: