作者:naiyan wang (weibo:@winsty homepage:http://winsty.net/)
小编: 本文是港科大博士@winsty 受小编之邀在博士毕业之际分享的一个个人总结。他的研究兴趣是计算机视觉和数据挖掘,博士期间发表多篇高质量的论文。文中的问题和解答都出自winsty之手,作者非常真诚地分享了自己四年来的经验和心得,是小编看过最干货的求学经验分享文章,非常值得推荐给大家。
说明:本文版权归作者所有,如需转载请联系作者 @winsty (Email: winsty@gmail.com)
经常会有同学来问我关于PhD学习的问题,接着这个机会把这些零碎的问题都整理起来,也算是对四年PhD学习的一个交待。
问题一:什么是PhD?
相信很多同学在最开始入学时候的一个疑问就是,为什么我学的是XX专业,但是我最后的学位叫做哲学博士(Doctor of Philosophy)?这个误解大多是源于对Philosophy的误解。我很推崇在coursera课程Introduction to Philosophy的第一节课中的定义:Philosophy is the activity of working out the right way of thinking about things. 如果能正确理解这句话,那么PhD的意义就十分明了:习得专业知识只是PhD学习中的一部分,更重要的是面对一个未知的问题时,不慌不乱,梳理出问题的逻辑,并有一套科学的方法去分析。这也就是为什么经常会说赢家通吃的原因。这一点在下一个问题中具体展开讲。在此,我也特别推荐两门coursera的课程,我觉得可以作为每个PhD 101课程:Introduction to Philosophyhttps://www.coursera.org/learn/philosophy 和 Philosophy and the Sciencehttps://www.coursera.org/course/philsci
问题二:读PhD期间应该习得最重要的能力是什么?
这里不谈具体的技术,因为每个学科,甚至就算是CS下面的子领域,对于具体技术的需要也相距甚远。但是一些共通的能力包括:
- 定义问题的能力:说得高大上一些,PhD的使命是开拓人类知识的荒野,所以只去解决一些已有问题并不是PhD全部的意义 说得接地气一些,毕业之后的工作中,并不是每个问题都有明确的定义,可能我们拿到的只是一个定性描述的需求。那么我们需要:1)定义这个问题的输入输出; 2)定义预期结果和milestone 3)把定性描述的内容通过严谨定量的形式表述出来。
- 分析负面结果的能力:我十分厌恶的一点就是,在本科的各种实验课中,实验报告中只允许有成功和预期的结果,而不允许出现失败的结果,并辅以足够的分析。在这种模式下,大部分学生都丧失了分析负面结果的能力,往往遇到不如预期的结果就毫无头绪,完全不知从何下手。而往往负面结果才是我们在research中最经常遇到的情况。通过合理假设、推理、实验最终定位问题所在:究竟是我们对问题的setting假设就出错了,还是数据质量不如意,还是我们在实现中出现了错误?这才是一个PhD应该做的。在CS的框架下,我们往往说的debug能力和动手能力正是这方面的一个很好例证。
- Presentation和English writing的能力:很多时候我们需要把research通过一个更容易让人信服的形式展现给别人。这其中包括如何讲一个引人入胜的story,如何展现清晰的思考逻辑,如何分配详略和重点,如何运用语言等等。前两点尤其重要。但也是很多中国学生最容易忽视的一点。在CMU时,听说我导师做postdoc的时候,他的导师曾经建议他选修学校的drama课程,由此可见顶级的researcher对于这方面能力的要求。确实,读过他的一些paper,尤其是introduction章节,给了我一种耳目一新的感觉。虽然我在PhD入学的第一年就被导师教育要重视这个方面的练习,不过直到毕业也没达到一个比较满意的程度。:( 这是一个需要长期培养的能力。
问题三:我到底要不要读PhD,读PhD一般的历程是怎样的,什么时候可以PhD毕业?
第一个问题回答起来其实非常简单,借用本科导师张志华老师当年给我们说的一句话:“如果你还犹豫要不要读PhD,那么你就不适合。” 决定读PhD应该是非常自然的一个决定,应该是源于自己对未知的兴趣,而绝不是迫于家庭期望或逃避找工作进入社会的现实。后者会在PhD四年或五年内过得十分痛苦。人生有限,为什么要在最美好的二十岁花费四五年的时间在自己不喜欢的事情上呢?如果你对这个问题的答案是不犹豫,那么恭喜你,你已经达到了王国维所说的人生三重境界的第一重:“昨夜西风凋碧树。独上高楼,望尽天涯路。”
PhD入学后,除了少数极优秀的同学可以很快找到自己的步伐之外,大多数同学都会经历一个迷茫和低谷期:我应该具体尝试什么样的topic?为什么看别人的paper都觉得如此厉害?为什么我很努力地工作,但是看上去依旧毫无进展?同时生活上的各种压力也会如期而至,比如在国外的同学会存在文化的差异,各种感情变故等等。这个期间可以短至几个月,甚至也会长到两三年。这基本上也是每个PhD都会经历的过程。这个时候希望能回想一下当初来读PhD的初衷,坚持下来,这本身就是一场历练。不忘初心,方得始终。经过这些洗礼,那么你应该已经达到了第二重境界:“衣带渐宽终不悔,为伊消得人憔悴。”
如果你一直在正确的道路上坚持,之前的努力一定不会白费。你会突然发现某一天,你可以很快点破一个新问题的insight,可以不卑不亢地点评一个paper的优缺点,可以轻松看出原来遥不可及的paper中的各种trick。恭喜你,此时发paper对于你肯定不会是一个问题,你可以PhD毕业了。此乃第三重境界:“众里寻他千百度,暮然回首,那人正在灯火阑珊处。”
问题四:不同等级学校之间的差别在哪里?
首先说在PhD期间,导师的影响远远大于学校的影响。所以如果非得要在导师和学校两者之间做出选择的话,我会选择导师。我分别在ZJU,HKUST和CMU三所学校求学。想必这三所学校在CS方面的平均科研实力大家都很清楚。我个人感受不同等级学校之间的差异在以下三点有所体现:
- 老师的自我要求和视野:这点不必多说,在ZJU大部分老师还在苦苦追求SCI的时候,HKUST的老师们大多还在想怎么让自己的paper在顶级会议/期刊上接收,CMU每个老师想的是怎样做有影响力的研究,怎样做十年二十年后还会让人记得的研究。
- 学生的主观能动性:就像在第一个问题中提到的,在越好的学校,想主动做研究的学生就越多。工作刻苦程度自然不必多提,另外想想你周围同学都在发NIPS/ICML的时候,你怎么好意思去把目标定在一些不入流的SCI期刊。
- 资源:仅举一例,在CMU的时候,基本每周都会有来自世界各地的顶级researcher来给talk,而且学生大多会有一对一的交流时间,可以得到他们对正在进行项目的针对性指导。这样的机会在其他学校可能几个月甚至一年才会有一次。除此之外,在人脉方面的差距更不用多提。
问题五:什么样的导师是一个好的导师?
首先学术能力,人脉关系这些硬条件不必多谈。主要来说下对学生的指导和学生之间的关系。每个人的学习习惯不同,适合的导师风格自然也不同。有些人适合事无巨细的指导,有些人适合导师给予充分自由,只在关键时刻指点。其实这个问题的一个简单回答是:好的导师在学生毕业后,学生还愿意继续与之合作。有很多PhD毕业之后,就再完全不愿意和导师再打交道,把毕业视为一种解脱。这不得不说对于学生和导师两人都是一种悲哀。仅举一例,最近几年我们组的PhD学生有一大半都是导师原来的学生推荐过来的。这也从侧面印证了之前学生对导师的肯定。更不用说像CUHK汤晓鸥教授这样可以把大多数得意弟子毕业后重新招回团队中的。简而言之,一个好的导师应该为学生发展着想,而不是把学生当作苦力: 这一点说起来容易,但是真正能做到的屈指可数。这其中包括:
- 把培养能力作为第一位,不着急追求短期目标:这里的能力不仅仅包括学术能力,也包括前面提到的presentation,writing能力等等。见识过太多导师对学生说毕业标准是XX篇paper或者今年内一定要投出去XX篇paper,而肯让学生花时间踏实下来认真读读经典paper和书籍的基本没见过。我十分庆幸本科时能遇到一个这样为学生考虑的老板。
- 给予学生选择的权利:一位好的导师不应该时时把自己的想法强加于学生,而是应该划定一个大的范围,尊重学生的个人选择。这点尤其体现在对于research topic的选择上。绝大部分PhD的悲剧都是源于不得不做一个自己完全没有兴趣的topic。
这里特别感谢我本科的导师张志华教授和PhD导师Dit-Yan Yeung教授。前者在本科阶段引起了我对ML和CV的兴趣,并给我打下了坚实的数学基础。后者在四年的PhD学习期间培养了我严谨的科研习惯,更重要地是给予了我充分的自由,使我可以选择我感兴趣有热情的topic来研究。能遇到这样两位优秀的导师是我职业生涯中最为幸运的事情。这里传送一个前段时间对张老师的一个采访和张老师自己写的对于教学的看法:http://cos.name/2015/09/interview-of-zhangzhihua/http://bcmi.sjtu.edu.cn/~zhzhang/teaching.pdf
问题六:如何选择合适的topic?
记得我四年前第一次见到PhD导师的时候,他跟我反复强调的一点就是找到一个好的topic,你的PhD就成功了一半。你可以花一年甚至更长的时间找一个可以作为PhD thesis的题目。当时还不是很能理解,直到现在再回头去想这段话,才能明白其中的深刻意义。我觉得找到一个合适的topic要至少从以下两个方面考虑:
- 兴趣:当你在一个领域内见识得足够多之后,那个始终让你感到兴奋的问题就是合适的方向!很多同学觉得做research没意思,其实原因在于能接触到的有意思问题实在有限。拓展视野,接触更大世界的方法基本有三个:1) 到更好的学术机构,接触更高水平的researcher:我在CMU的半年,三观被颠覆了很多次。经常会发出感慨,这个事情居然还可以这样做,我之前连想都没敢想过。2)参与高水平的学术会议:在会议上,除了可以快速浏览到一个领域的top researcher的工作外,更重要的是可以和这些人面对面交流。很多自己平时难以理解的问题经过高水平的讨论后都会变得清晰。3)跟踪最新的学术论文:如果以上两点都没有机会,在学校里也可以努力完成这个目标。一个最好的资源平台就是arxiv。如何快速阅读大量paper在下面的问题里详细再讲。
- 个人的优势和劣势:除了兴趣之外,选择topic也要考虑一些个人背景和能力的限制。每个人最好能清楚认识自己在智商和能力上的优势和劣势。以我自己为例,我的优势并不在大量数学证明推理上(并不是说数学不重要,相反十分重要),虽然如果有需要我也可以去做,但是在这方面比我更擅长,更有创造力的大有人在。我的优势在于理解透一篇paper之后,可以快速讲出insight,并清晰地和之前的工作进行类比,在直觉上定性地快速挖掘问题的本质。另外之前参加编程比赛的经历也让我在实现idea方面能够更快更准。这使我更容易在偏应用的一些领域做出好工作。相反,一个数学系背景的同学可能优势在于对公式的敏感,而coding需要花费他很多精力。这样一些偏理论方面的研究就再合适不过。
选择topic是整个PhD学习期间最重要的事情,没有之一。然而这恰恰又是最personal的一件事情,没有一个标准的流程。在做出最终决定之前,不妨多咨询一些经验人士的意见。
问题七:如何快速阅读大量paper?
这应该是刚刚入门的同学最头疼的一个问题。首先要说的一点是,并不是每篇paper都需要读,也不是每篇paper都需要精读。Not every paper is created equal. 我一般会看两类paper:1)和自己在做的topic很相关; 2) paper的作者很出名,有质量保障。大部分paper我都会在10到15分钟之内扫过idea,然后决定需不需要精读。具体在读paper的时候,要掌握一个点线面的关系(这里借用一些ML里manifold的说法可能会更传神哈):
- 点:我们可以把每一篇paper看作一个点,读完每篇paper,我们应该可以衡量出每个点质量和价值。
- 线:我们需要把每个点embed到整个领域发展的一条线或者manifold中,我们需要知道每个paper在整个领域中处于什么一个位置?这个paper是milestone级别的工作还是一个incremental的工作?是前人什么样的工作启发了这样一篇paper?这个paper解决了这个领域中的什么问题?还有什么open的问题有待解决?
- 面:每个PhD可能只可以在一到两条线上有比较深的理解,但是这不意味着就不需要求了解别的线。相反,我是十分反对做research只盯眼前topic这样的做法,其实很多线是会交叉的。举两个我自己的例子:
- 我当初第一篇做tracking的paper就是发现当时所有的sparse tracker在在线更新模板的时候都采取了非常heurisitic的方法,没有一个robust并且principled的办法。而恰恰我一年前paper中的想法经过一些改动可以非常好地解决这个问题。
- 我PhD期间最满意的一篇paper也是这样。在那一个学期的组会上,组内着重讨论的一个topic是crowdsourcing,看上去这与我手头在做的tracking没有任何联系。我在实验中发现不同tracker的结果差异非常大,那么一个直接的想法就是能否可以借鉴crowdsourcing的想法改进结果呢?不过现成的算法都不太适合tracking这个问题的性质,所以我把crowdsourcing扩展到了temporal structured data上。最终的paper无论在模型的优美程度,实现的通用性还是最终的性能上都比较让我满意。
当然在不是自己在做的线上,我们没有必要sample太密的点,我们只需要:1. 精读一些经典之作 2. 略读一些paper的idea,知道这个paper做了什么事情,而具体怎么做的并不需要立即搞清楚。换句话说,在脑海中index了一下每一个领域的boundary。以后在有需要的时候,我们可以很快找到相关的paper再去精读。
问题八:什么是好的research?
首先说,这是一个见仁见智的问题,和每个人背景尤其相关。例如一个常见的鄙视环就是做理论的会鄙视做应用的,觉得毫无新意。做应用的反而觉得做理论的大多证明了一些毫无意义的定理,都不work。首先,懂得尊重别人的research,对自己不懂的东西不乱发表意见是一种美德。其次任何一个research可以至少从方法的创新性和性能这两方面划分,所以我们会有四种划分(为了方便表述,下面的好和差都是相对而言):
- 创新性低,性能差:这样的research应该是每个人避免的,除了浪费自己和他人的宝贵时间,没有任何意义。 可惜就算在顶级会议里这样的工作还是不少。
- 创新性低,性能好:这也可以算作一个solid的work,尤其是可以讲清楚为什么一些小的改动会提升性能,这些不起眼的trick往往包含着对问题本身的insight。工业界尤其欢迎这样的工作。
- 创新性高,性能差:俗称的“挖坑”的工作。这样的工作包括提出一个全新的问题或者对一个已有问题的全新解法。这样的工作虽然可能在文章中只提出了非常简单的baseline,或性能并不能比过最好的已有方法,但是可以启发大量后续的research。这是典型的学术界中的好工作。例如CVPR中的oral paper大多属于这个类型。
- 创新性高,性能好:这样的research自然是最好,不过大多数时候是可遇不可求的,往往需要“时势造英雄”。
就算是同一个人,在不同阶段对于什么是好的research的定义也会变化。例如我自己,在接触research的初期会比较喜欢fancy的模型,然后逐渐强调一个工作的性能,对一切性能达不到state-of-the-art的统统不感兴趣,再到现在能够相对客观地评价一个paper的优缺点,能从前面提到的第二类第三类的paper里分别汲取营养。我想这个过程也应该是PhD成长的必经经历吧。
问题九:PhD期间在公司实习和外出访问有没有意义?
这其实取决于具体的实习类型和实习的公司,以及更重要的是毕业后的定位。在北美,基本每个PhD都会有至少一次的公司实习经历。实习是一个很好的机会,它可以让我们切换视角来重新审视自己的工作,并且认识很多同领域的小伙伴。我自己算是有三段这样的经历,都给我带来了很大的收获:
- 第一次是在大四的时候在MSRA。算在我research的启蒙阶段
- 第二次是PhD三年级的时候,在Baidu IDL参加Imagenet LSVRC比赛。
- 第三次是紧接着在IDL的实习,在CMU访问半年。
最后两次的感受尤其深刻,在这之前虽然也会号称做一些CV,但是现在回想看看,其实非常边缘。这半年多的经历,可以让我分别从工业界和学术界两个角度明白真正做CV的人思考问题的方式和他们真正关注的核心问题。
总之,在导师允许的情况下,尽量多出去走走,换个环境走出自己的confortable zone,你会发现一个不一样的世界。
问题十:PhD期间除了写paper之外还有没有一些别的有益的学术活动?
下面列举两个我参加过,而且感觉收获很大的事情:
- 参加各种比赛: 比赛是一个以性能为导向的事情,所以参加比赛的目的并不在于创新方法,而在于:1)通过接触更真实的数据,增强对问题的认识和理解:这一点在各种data mining比赛中感受尤其深刻。对数据和业务本身的认识理解远远重要于模型本身,传送一个我在知乎上的回答:http://www.zhihu.com/question/24533374/answer/34631808 2)对已有paper去伪存真:这一点在我参加imagenet LSVRC 2014的比赛时感受尤其深刻。在参加这个比赛之前,我虽然读过很多CNN相关的paper,但是并没有真正动手跑过大规模实验。在这个比赛过程中,我尝试实现了很多之前的paper,结果正如所料,绝大多数并不work。但是极少数work的idea让我对CNN这个结构本身得到了很多insight,直接指导了我后续的工作。继续传送一下一年多以前关于这个比赛的一个知乎回答:http://www.zhihu.com/question/24904450/answer/29418425
- 参加各种开源项目:相对而言,research code大多是小规模demo性质的。参与贡献到一个真实世界中的codebase和独自写research code是完全不同的两种体验。十分有幸参与到了DMLC项目中,向各位大神学习了很多不可能在学校中习得的技术,这也是我PhD期间一段十分宝贵的经历。继续给DMLC和mxnet做个广告:https://github.com/dmlc/mxnet
以上便是我对四年PhD学习的一些思考,更多像是对自己二十岁前半段的一个小结。读PhD从来不是一件容易的事情,但也绝不会是一件时时痛苦的煎熬。不忘初心,方得始终,祝愿大家都玩得愉快
声明:本文是作者特邀文章,版权归作者所有,如需转载联系作者 @winsty (Email: winsty@gmail.com)
阅读记录:read twice