点击上方“Java基基”,选择“设为星标”
做积极的人,而不是积极废人!
源码精品专栏
原创 | Java 2020 超神之路,很肝~
中文详细注释的开源项目
RPC 框架 Dubbo 源码解析
网络应用框架 Netty 源码解析
消息中间件 RocketMQ 源码解析
数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
作业调度中间件 Elastic-Job 源码解析
分布式事务中间件 TCC-Transaction 源码解析
Eureka 和 Hystrix 源码解析
Java 并发源码
来源:zhuanlan.zhihu.com/p/338193330
0. 写在前面
1. 万事开头难 (第一学期)
2. 方向比努力重要
3. 谈谈Presentation
4. 记四次开会
5. 记三次实习
6. 没那么简单的事
7. 毕业后何去何从
8. 杂七杂八
最近逛知乎,无意间逛到一篇哥大师兄的读博总结,我花了 1 个小时看完了,内容非常干货,满满的 1.6w 字,特此分享给大家一起共读。
「开始写这边总结的时候是三月,纽约成了疫情震中,看着新闻报道里的中央公园,中国城,第五大道,往事浮现,于是开始写这篇回顾。陆陆续续一直没写完,转眼年底了,加州疫情更糟。前几天看新闻说Cathedral教堂发生枪击案,震惊。这教堂就在我当时住的学校公寓旁边,每天出门都可以看到。遂又忆起每天上学的时光,于是决定把这篇总结写完,希望疫情早日控制住,一切安好。」
刚上大学时,听过不少学长学姐分享会;申请博士时,读了不少留学申请总结。都收获很大,让当时啥也不懂的我,了解了每场游戏(如何度过一个充实的本科;如何拿到心仪的PhD offer)的principles:有啥规则,有啥技巧,等等。
开始读博时候,我也去找类似的读博经历分享,令我收益良多的,如熊辉老师, 田渊栋大牛和李沐大牛的总结,林达华老师的blog;但可惜只有这寥寥几篇,读博又是一个复杂的事儿,当时的我并不能清晰地看见前面的路,遇到一些事亦因缺乏经验借鉴,走了弯路。于是当时便想着,等我毕业了,也得记下我学到的经历,希望能帮助到刚开始读博,像我当年一样迷茫的科研新人。也借此记录和感恩一路走来,所有帮助过我的人,best of luck。
因为时间有限,文章写的粗糙,还请多多担待;因为篇幅限制,有的问题难以讲得完善全面,还请结合自身情况,辩证地借鉴相关经验;或跟您意见不合,全当看小说,寻个乐子罢了。
2014年夏天,在北京国际机场,我安慰我妈说,“没事,明年暑假我就回来啦”,万万没想到,一直忙忙碌碌,一去就是5年……可能是初次留学的兴奋,十几个小时的飞行,感觉很快就过了,到了JFK机场,坐上纽约特色的黄色的士。去学校路上,先是皇后区的平房,后来到了曼哈顿,深砖红色的高楼,跟想象中的国际大都市并不大一样,倒很有历史厚重感,日后想想也是,纽约也不能到处都如时代广场那般呀。
接着,办入住,搞卫生,小憩了一会儿,傍晚出去门口的超市买点吃的;第一次从112街,走到Broadway上,看着熙熙攘攘的外国人面孔,很傻的竟然笑了出来…那会儿自然是极开心的,就是一个毛头小子,充满了对未来生活期待的样子(哎,回不去的青春啊);当然了,怎么也没想到,接下来的一年,会如此艰难……
图片开学后一系列事情,一下子让我清清楚楚地,看到自己跟师兄们比,各个方面有着很大的差距。且不说核心业务能力了,首当其冲自然是语言环境的变化。
一天路上,一小哥对着我说:How are you?我想,这不是新概念英语上的经典对话吗,难道我真要回传说中的I’m fine, thank you, and you?从那儿之后,我知道了,how are you就相当于,吃了么您呐,并不是真的问什么,而是打招呼,跟say hi差不多,一般回good good就可以了,甚至不回,直接也回对方how are you都行。
然后到了第一天来lab,正好Y来面博后,老板让他给个talk,Y希腊口音的英语,再加上讲的内容涉及一些专业术语,几十分钟我几乎完全没听懂他说什么;会后跟他一对一meet,更是尴尬的很…后来18年来FB实习,巧了Y是我mentor之一,第一天带我吃的午饭,我们交流完全无障碍了,他也不记得当年还见过我……我有个朋友总结,刚来时候,跟外国人的交流,是三分靠听,七分靠猜……现如今,即使是印度口音,只要不是说的特别差的,或者我特别不熟悉的东西,都能通畅交流了。感觉这没啥技巧,首先要敢说,然后多跟不同的人聊天练习 ,慢慢就好了,倒不必太过担心,徒增压力。但是如果英语不好的话,难以跟外国专家合作,融入核心科研圈子,对长远的发展耽误很大,尽量在1-2年内做好这个提升。
因为我是本科毕业直博,刚读博那会儿,思维里还是默认,导师是教育培养学生的角色,指导学生做出成绩;明白但没有深刻认识到,博士生与导师还有雇佣关系。第一个学期,我主要是跟着师兄们做,跟导师大概一个月meet一次,每周有weekly report。开学时,老板把我分给一个师兄带,参与他的项目A,是个很好的学习机会,但是发不了paper。
11月,CVPR投稿的季节,另一个师兄找到我帮忙做项目B,这个项目准备投CVPR,做出来的话可以co-author。于是我那段时间都扑在做B上,终于实现了其中一个核心的模块。CVPR投稿完的那周,正好导师约meet,我想B的事情做完了,下面精力就都是做原本的A了,meet对我来说,主要目的是确定下接下来的plan呗。正好搞CVPR之前,项目A的师兄让我reproduce一篇nips文章的方法,用到项目A的data上,于是,我准备的slides主要介绍那篇nips和怎么用到项目A上。结果meeting结束,导师很不高兴,觉得我这几周没有progress。记得那天导师办公室没开灯,冬天下午五点的纽约,天已经黑了,周围一片黑压压的,更显压抑。
我当时挺惊讶的,因为原还以为在导师印象中,是我参与了B的CVPR投稿,很impress呢。我后来仔细反思了下,虽然这几周我对B也算是呕心沥血,weekly report里也有提,但是,一来我只是coauthor,对于B工作整体而言算不上main contributor;二来导师很忙,不能assume对方完全了解并且记得你做过的一点一滴。同时,我也明白了这个meeting的目的既是讨论research ideas,但也是review progress,我首先得让导师明白,我这段时间有在好好干活。现在的我,不会只提项目A之后我想怎么做,会同时准备一页slide总结下我对B的贡献。
我们系第一个学期末就要博士资格考试。这个考试,各个学校称呼不同,大概就是博士生通过这个考试,才证明有能力,qualify继续读博士。我们系给大家两次机会,第一学期末第一次考,没通过的第三学期末再考一次,要是还没考过,就只能卷铺盖走人了。而且这考试还真不是走过场,每次大概挂三分之一的人,所以真真切切见到周围有人因为qualify没过走人的。
我本科学的CS,博士因为fellowship是EE发的,所以在EE系。这可愁坏我了,因为考的是EE的基础topics,电路,DSP,网络啥的我大都一窍不通。于是第一个学期的课,我选了门DSP,准备好好从头学。这是硬课,再加上平常主要精力还得放在lab的项目上,第一学期压力巨大。记得有一天,晚上睡觉做了噩梦,梦到不知什么怪物,惊醒,醒来想到各种tasks各种due,顿时只想继续回到梦中,相比而言,还是怪物比较可爱……这时候,只好把自己的感受搁置一边,累、苦,想这些又有什么用呢,只能更加平添烦恼。该做什么就去做,告诉自己干就完了,结束后反而发现,过程其实也就那样,有时候我们只是过度看重了自己的感受,夸大了困难的程度,其实自己的感受没那么重要,只要身体本身还撑得住。
qualify考试在1月初。12中旬,忙完了期末考试,去Chinatown吃了顿好的,回家看了部电影,然后跟导师请好假,专心复习qualify。大概有三周的复习时间,除了DSP,其他的topics完全从零开始学。后来觉得,这考试的目的,不是考的知识本身,而考的是学习能力。复习的过程是很惨了,时值圣诞节假期,朋友圈各式各样在佛罗里达坐游轮的,迪士尼看烟花的,回国火锅小烧烤的;而那年的纽约还尤其的冷,家里的暖气开到最大,还是冷的不行,我只能早出晚归的去图书馆;路面冻得白花花的,公车开过扬起白沙,从家里112街到图书馆114街只有5分钟,但却那么漫长;每天几条裤子叠着穿,有天开始一度冷到零下负十几度,我刚出门一会儿就赶紧回来,在牛仔裤外面又套了件运动裤……所幸最后考试通过了,小秘告诉我竟然考了第三,震惊,真是功夫不负有心人讷……
图片第一学期,选DSP,纯为了考qualify exam修的,跟我日后的研究,基本不搭噶。我第一学期还修了机器学习,机器学习我之前没有系统学过,学完还是受益良多。但为了达到学分要求,我博士期间,被迫修了14门课,第四年还在上课……我的感觉是,CV是实践科学,上课没那么重要,很多时候甚至是浪费时间。我觉得值得选课去学的,可能就是机器学习,算法,就够了。搞CV方向的,与其上门CV,还不如自学网上教程,亲身参与几个项目,学的更快,对书上的知识有更深刻的理解。我觉得上课最大的作用,就是去了解这门学科,有哪些基本的概念和算法(所谓把unknown unknown变成known unknown),哪天你要用到他们了,需要把known unknown变成known known的时候,知道在Google里输入啥关键词去搜。
当然如果有时间,上些基础型的硬课,自然没啥;但对于博士生,时间本就紧张,就得做做平衡了,选些seminar的课比较好,一般主要就是读论文,做project。我后面陆陆续续带了很多低年级的学生,很多人学期伊始,觉得要多学些知识,选的都是硬课,学期过半,发现作业做不完,科研没时间,两头耽误,都是后悔不已…
第一学期在课业,科研,qualify考试,适应国外环境,种种碾压之下,总算过去了……虽然痛苦,但只是工作量大,努力使劲就好了……第二个学期开始,2015年于我,关键词是迷茫,努力努力但怎么也使不上劲的那种……
第二学期开始,重心主要集中在research上了,跟导师的meeting也从一月一次变成了每周一次,有幸得导师亲自调教各种真正做科研的能力了。导师给我定了个新的项目,深度学习下的incremental learning。这其实是个很难的问题,现在5年后来看,都没有被很好的解决;亦没有一个标准的benchmark,也就是说,其实大家还没有定义好这个问题;记得导师那会儿说,if you can formulate this problem,这个问题就已经解决70% 了。
结果忙忙碌碌几个月,研究了很多文献,做了很多实验,还是没有太大的进展,就是感觉很迷茫了,不知道下一步该干嘛。幸运的是,到5月份,导师让我跟师兄一起参加一个叫THUMOS的比赛,这其实又是个新的项目了;开始我还觉得,已经忙不过来了,哪有时间再多一个项目,后来庆幸参与了这次比赛,开始了我做video这个方向的科研生涯。
那会儿video领域,大家主要做classification,而且是几秒的短视频;THUMOS是长视频,而且不光有action classification task,还要一个task是action detection,检测你所感兴趣片段的开始/结束时间。参加比赛时,我跟着师兄主要搞classification,边做边学,上手了处理视频的模型和框架,收获很大。比赛完后,我发现classification大家搞的火热,而detection,同样很重要的一个课题,却没有人研究过基于深度学习的方法,于是就有了我的第一篇CVPR文章,收到了很多follow-up。我自己也算是找到了自己的研究方向,不再迷茫。
我觉得这段经历,对新手很有参考价值,很多时候光努力不够,方向更重要。新手如何选博士几年的topic,有两个问题值得思考:
能不能快速上手? 有几个简单的评判标准:
state-of-the-art的paper有没有开源的代码?目的是你能迅速复现baseline,熟悉整体pipeline(如怎样预处理,后处理),加深对实现和细节的理解
有没有对这个topic有hands-on经验的师兄,或者community里面approachable的前辈?目的是,当你遇到实现上的细节问题,可以及时咨询和得到反馈
这个topic有没有比赛,或者标准的benchmark?目的是,有大家已经定义好的数据,实验setup,评价标准;这样,你有可以直接比较的baseline,outperform baseline的时候也容易被人认可
能不能有大的impact? 这里我指的是博士期间的大方向,由一系列单项的工作或者paper构成。单篇paper通常有三种类型:(1)First work:开创了一个topic,比如RCNN于object detection(2)Last work:基本解决了一个topic,比如Faster-RCNN,YoLo于object detection(3)Improve类型,介于First和Last之间的。
Last很难,Improve常见但影响力不够深远,对于新手而言,博士的早期工作,在有能力做出来和有impact之间的trade-off比较好的,估计是First了,不一定非要是第一篇,只要是某个topic里面开创性工作的那一批之一,都是不错的。这个早期工作之后,你会对这个问题哪里要改进,有很清楚的认识,因为improvement room大,也会有很多ideas。同样,早期的时候怎么选这样一个topic呢:相关的比赛是这一两年新开的吗,相关的benchmark是这一两年出来的吗,上面的结果提升空间大吗(现在是20%还是已经80%了)?
前面说的PhD选题是大方向上的,具体到每一篇paper,选择的principle和重点则不太一样。来Facebook后从马爷爷那知道了一个著名的Heilmeier问题系列,是指导老师们申项目的,我觉得稍微改改,便很适用于我们考虑,某一篇paper的选题,合不合适:
What are you trying to do? Articulate your objectives using absolutely no jargon.
How is it done today, and what are the limits of current practice?
Who cares? [Support other’s research? Shape research landscape? Power applications in industry?]
What's new in your approach and why do you think it will be successful?
If you're successful, what difference will it make ? [e.g. Contributions in theory/modeling? Improve accuracy by 5% on dataset A, B, C…?]
What are the risks and the payoffs ? [Further, how would you mitigate the risks? If your proposed method does not work, what could be alternative design? These can end up as discussions such as ablation studies in your paper.]
How much will it cost? [e.g. How many GPUs do your experiments require? How long is each training process? How about data storage?]
How long will it take? [How many hours are you going to work on this per week? When is the submission DDL? Can you make it?]
What are the midterm and final "exams" to check for success?
Presentation分为做报告,还有就是写paper
14年,刚来哥大那会儿,每周五是我们组会,导师让我在组会上present RCNN,这是我第一次给导师作报告,而且是在全组面前报告,自然想要好好表现。我对object detection之前完全没了解过,于是paper读了一遍又一遍,文中用到的前人技术不懂,便找到前人的文章去学怎么回事。感觉自己学到好多,自我感动,觉得花了这么大工夫,一定到时候会让导师刮目相看。
结果就是啪啪打脸:导师极其严谨,当我解释了A,解释了B,问我已经有A了为啥还要B;我大脑一片空白,尝试着解释了半天,导师表示听不懂,这是可想而知的,因为其实我自己也并没有搞清楚为啥;当时自己读paper的思维模式其实只是,memorize怎么做怎么做,但没有去搞清楚要这么做背后的原理;另外当时slides准备的也不够好。总之结果是,这次报告搞砸了。还好事后,师兄们继续跟我讨论,让我对技术原理有了更深刻的认识;有的师兄更用亲身经历安慰我,说当年他刚来的时候,第一次汇报工作连slides都没做,干讲,导师自然也是没能听懂。
之后几年,从导师身上学到了很多presentation的技巧:
如果可能的话,事先了解你的听众背景 ,是跟你做同一个topic的,还是同一个大领域但不同topic的,还是完全其他专业背景的。需要根据听众背景,定制和调整:比如,需不需要多介绍些背景?需不需要更深入技术细节?等等
一页slide尽可能focus在一个点上 ,不要信息量过大,否则听众很容易lost
尽可能多用图片表达,不要大段大段的列文字,A picture is worth a thousand words
上面这两点,其实principle都是尽量让要讲的内容简单明了,因为很多时候我们在听talk,这样被动接受的时候,接受新知识的能力是比主动接受时候(比如看paper)低的。
当听众问问题的时候,If you don’t know the answer, just say don’t know.
如果是跟mentor日常讨论的slides,因为会讨论到很细节的东西,有些图PPT画起来,很花时间,而且通常这样细节的图还挺多,所以可以就ipad上面手画一画,截个图放到PPT里就好了;如果是正式一点的presentation,写slides跟写paper的principle有点像,不要太focus在细节上,更重要的是讲清楚motivation,为什么这样设计,细枝末节的不关键的内容,放在backup slides里面。
19年CVPR,Doctoral Consortium有幸mentor是斯坦福的一位大牛教授,她也提到了presentation的重要性,说她们lab有个开玩笑的说法,一份slides交给她去改,no pixel left……为了分享如何能让报告听起来有兴趣,她画了下面这张图,让听众情感(亦是兴趣高低,注意力程度)随着时间的变化,有三个高潮 :首先,介绍你的问题,通常这时候大家都会引发兴趣;但听着听着大家注意力就不集中了,这时候就到了图中第一个低谷,这时候需要指出来这个问题有哪些challenge,大家的兴趣就又被激发了;等大家兴趣来了,精力集中的时候,介绍你的一部分工作work 1;等介绍完第一个工作,大家又疲劳了,这时候指出来,即使有这个work 1,问题还不能被解决,因为有remaining challenge;接着大家又被调动了兴致,可以开始介绍work 2。
图片在2.2里面讲了对某一篇paper,如何选题和做规划。那真的到了写paper的时候,我自己有几点如何让文章写的更好的体会:
先给一个Talk 。写paper最难的是构思storyline,而最好的完成这一步的方法就是先对你的工作做一个slides,给周围的人present一遍。这个过程中,你会梳理好自己的思路,画好文中的figure,准备好实验结果的table,周围的人还可以给你提意见,帮助你完善,等这个talk给完了,后面写paper就会顺畅自然了。其实我现在,如果准备投一个paper,当做了一段时间后,就会按照最终presentation的思路,准备slides,用在每周给老板们report时。开头先快速review一下做的task和提出的方法,remind一下context,然后重点focus在那周做的新东西上,所以每周汇报的slides可能80%都是跟上一周一样的,然后新的方法和实验结果的那几页slides是新的,有比较多的细节。
用Google doc做语法检查 。刚写好的paper有typo和语法错误是很难避免的,但常常会被reviewer揪着不放。大家写paper如今大都在overleaf上,但overleaf的查错还是不够好,建议可以写完paper后,贴到Google doc里面。几年前开始,估计是由于deep learning对Google NLP的改进很大,感觉Google自动改的质量已经非常高了。
Rationale很重要 。不光是要讲清楚你怎么做的,更要justify你问什么这么做;不光要讲你的结果比baseline好,更要解释为什么好;读者看到的不应是一个“使用手册”。有时候我们写paper,花了很多篇幅写了很多实现细节,但是更重要的是,解释“为什么”,这个背后的逻辑和insights。
大部分paper都是提出一个新的方法,这类方法型paper 似乎都可以套下面这个框架:
Introduction:可以分为以下几个部分:
Problem definition
Previous methods and their limits
简单描述你是提出了什么技术来overcome上面的limits
一个图,非常high-level的解释前人工作的limits和你的工作怎么解决了这些limits,最好让人30秒内完全看懂
最后一段如今大都是,In summary, this paper makes three contributions:
First work to解决什么limits
提出了什么novel的技术
outperform了state-of-the-art多少
Related Work:一般三五个subp,分别review下相关的topics,同样不光讲previous work做了啥,更要讲自己的方法跟前人工作有啥不同
Method
这是文章的主体,按照你觉得最容易让别人看懂的方式来讲可以第一个subp是overview,formulate一下你的problem给出notation,配一个整体framework的图,图里面的字体不能太大或者太小 * 看不清,要有些细节,让人光看图就能明白你的方法是怎么回事,但不要过于复杂,让人在不超过2分钟的时间看完这张图
然后几个subp具体介绍你的方法或者模型;如果testing跟training不太一样,最后一个subp介绍inference时候的不同,通常是一些post-processing操作
Experiment
Datasets
Implementation details such as pre-processing process, training recipe
Evaluation metrics
Comparisons with state-of-the-art
Detailed analysis
Alternative design choice exploration
Ablation studies
Visualization examples
Conclusion (and Future Work)
Abstract:是全文的精简版,建议在paper写完第一稿差不多成型了,有定下来的成熟的storyline了,再去写abstract;大概就是用一两句话分别概括paper里面每个p,然后串起来
另外paper提交时候,可以交supplementary materials,虽然reviewer并不被要求强制看这个,但其实给我们机会,去include更多文章技术细节、实验结果的好地方;在后面rebuttal阶段,通常篇幅有限制,但如果你已经在supp里面未雨绸缪 ,可以省很多空间,refer reviewer去看你supp里面的内容就好了。
说到rebuttal,我还是比较幸运的,从导师那学到很多。导师已经是功成名就,业界泰斗那种,起初我以为他这个级别会对我们是放养;但我在哥大投自己第一篇一作paper的时候,导师可以说是手把手带我入门了。还记得16年CVPR review出来后,导师找我讨论rebuttal,我那会儿对写rebuttal并没有什么经验,也不知道可以用R1代表review 1等等。那天meeting开始已经晚上7点了,估计导师还没吃饭,我两就挨着坐在他办公室里,对着他的电脑,讨论reviewer提的一个一个问题。因为很多时候其实reviewer表达问题并不准确,他教我分析每个问题背后reviewer真正关注的点是什么。边讨论,导师边直接敲下我们讨论的notes,meeting完后,我看这notes基本上就可以算是个rebuttal的初稿了,比我meet前准备的draft强多了……
博士期间我参加了四年的CVPR,这是我们行业的盛事了。学术会议通常,主会3-4天,有oral环节,大家可以听台上人轮流做报告,有poster环节,一个大场馆列满一排排的poster stand,每篇poster有作者在旁边讲解和答疑,oral和poster环节交替进行。大场馆在poster周围有各个公司的展台,一方面展示技术,一方面更多是在招人。主会前后一两天,有tutorial和workshop,通常会有大佬来介绍最新的工作,因为现在paper大家很多早就挂在Arxiv上看过了,很多人觉得workshop比主会更有听的价值。
若用一个词形容16年参加CVPR的体验,那就是兴奋了。首先Vegas就足够让人兴奋了,一座沙漠中建起来的梦幻城市,各式各样的酒店,威尼斯人,凯撒皇宫,艾弗尔铁塔,每换一个酒店就像到了一个新的国家。三年后毕业旅行,我带爸妈来,故地重游依旧是很惊艳。
图片然后这也是第一次见到许多业界大佬们的真身。当时在湾区实习,候机的时候就发现周围都是同行。第一天晚上跟着师兄逛赌城大道,一个很高的老外来跟我们打招呼握手,我后来才意识到是现在在Tesla的Andrej,之前本科的时候还邮件问过他DBN的问题,没想到竟然是他…后面陆陆续续看到各种在Paper上面名字很熟悉的真人,很兴奋了…
这次开会,我才知道了,开会的目的不光是听报告学知识,也是social认识人的机会,我们需要融入到这个community里去。从优秀的人身上我们可以学到很多;每人各有所长,有机会合作的话,可以双赢;每个人都有盲区,需以他人为镜。而这些的前提就是,你要成为这个优秀圈子的一员,跟他们有交流。当时杜老板刚毕业加入Facebook,因为我的工作基于他的之前的C3D,在路上看到他,鼓起勇气跟他打了个招呼,杜老板很nice的跟我聊了一会儿,也是从那之后跟他们组有了些合作,我去年毕业后也加入了这个组。
不过那年,我对social的认识也就仅限于此了,我甚至不知道公司还有party。不过好处是认识的人不多,没有太多的招呼要打,可以集中精力开会学习,这一年算是我开会最认真的一年了,基本上把所有poster都过了一遍。另外,我也是第一次讲poster,这个环节一般两小时,站着不停说话其实蛮累的,建议可以备点零食,水在旁边。
感谢组织,第二年又免费去了个度假胜地……不过这一年,因为已经入行了,开会过程很忙碌。这年有幸中了篇oral,导师很重视,前后slides改了很多遍,rehearsal了好几回。为了听众体验比较好,可以看着听众有眼神交流,同时看起来professional,导师要我脱稿。从西雅图飞夏威夷的飞机上,就一直在背稿子,然后一直反复rehearsal……报告前还是很紧张忐忑的,台下坐着得有一千人,讲12分钟,3分钟QA,不过上台后似乎因为集中精力在报告本身,反而淡定了……话说这种事情,感觉都是第一次很紧张,经历过了,以后就好了;记得第一年只是做poster 展示,我事前也很紧张,但经历过后,这第二年做poster展示时就非常淡定了。
报告给完后,因为最后一天有个workshop要给个talk,slides还没做,只能继续宅在酒店准备……悲催的整个开会期间,很多时间都呆在酒店,都没啥时间出去转转,只能默默给大家朋友圈点赞,也没有机会向第一年一样认认真真看poster了……所以很佩服大佬们,他们又要到处给talk,要跟各种人meet,是怎么安排开会时间的……
前面说到公司party,在会议期间晚上,一般大公司都会组织自家的party供大家social。虽然很多时候是大型尬聊现场,但公司很多员工会来,为来年招intern或者正式员工做宣传;很多学生会来,可以了解不同的组做些什么,有没有headcount,intern有没有returning full-time offer;当然,还有就是有free food包晚饭,而且Party的场地很多时候是有特色的景点,印象中去年,微软是在一艘大轮船上(感谢张老师carry),Facebook是在水族馆。
很多时候这些party为了控制人流量,会要求invitation。会议前公司们会给你发邮件invite,可能是HR看到你要来present paper,可能是某个公司researcher想要跟你面对面聊聊,也可以你直接联系公司的朋友,提前把你加到list上。有时候没有invite,有认识的公司朋友,也可能直接带进去,或者人不多了,就直接不限制了。另外,第一年开会的新人,可能看到别人去Party自己没有invite会失落,但其实duck不必哈,找上落单的小伙伴,去周围景点好好玩玩,这可能是今后所有开的会里,可以自由支配晚上的时间,想去玩啥就玩啥,不用去尬聊的唯一一次了,好好珍惜!
这一年我博士第四年结束,开会的主要任务就是找工作了。前面说到,poster场馆有很多公司的展台,前两年我也就去拿拿文化衫就走了,这一年则不然,因为展台有HR给你介绍公司的招聘流程,当场收简历,也有站台的员工,可以直接了解他们组的情况。当然,这样可能还是比较general的招聘,即使有员工,很可能跟你也不是做同一个小方向的,一般来说大公司里面偏production的组在这里认识的机会比较多;如果想找偏research的组,还是通过你paper认识你的同行,师兄弟朋友们的介绍,效率相对高些,可以约他们在展台或者Party上见面聊。对于找postdoc的同学,很多老师会约在开会期间见面,甚至面试,所以可以提前reach out约好。
洛杉矶也是我很喜欢的一个城市,因为我一直有个影视梦,所以很喜欢好莱坞,这大概就是我为什么坚定做video方向的初衷了。长滩其实离LA市区挺远的,算是一个度假小城市了,甚至有自己的机场。长滩市最著名的景点就是literally的长滩了,有很多游艇一列一列地停着,蛮壮观的。
图片19年这会儿我已经毕业了,刚加入Facebook,不用逛公司了解找工作的情况,倒是又可以认认真真开会了。另外,对于毕业生,会有个Doctoral Consortium,强烈建议申请,他们会组织毕业生和业界大佬一对一吃饭,是个很难得的学习机会,毕竟除了自己导师,很少有其他老师能花一个小时跟你单独聊各种research和career上的问题了吧。
来纽约连轴干了两年,暑假要去师兄在加州的start-up帮忙,总算要换一种生活方式了,开心!那会儿对传说中的硅谷还没有概念,还不知道San Jose(圣何塞)J发H的音。因为纽约就是跟所有国际大都市一样,高楼大厦生活便利,其实没有体验过典型的,所谓美帝乡村生活;湾区则是,住宅区里一栋栋的自家house挨着,四层就算是高楼了,每一片儿有个plaza,聚集各种饭店超市;到湾区第一天,被感叹说像是第一天来美国的……
这次实习很短,两个月,因为是start-up,工资不高;租的地方没有床,睡了两个月地铺,住家附近有条小河,蚊虫很多,对虫子极度反感的我在地铺上整了个蚊帐;天天上班打车是打不起的,只好买了辆自行车骑车上班,单程半小时还好,天气炎热也还好,最恐怖的是在一个上高速分叉口,得过个马路,没有红绿灯,只能招手示意,过来的车常有大货车,而且车流量大,经常得拦下一列车,每次都胆战心惊……
不过整体工作生活还是充满新鲜感的。工作上是纯production,了解了很多prod的system design;虽然早九晚七,但不用像在学校搞research晚上和周末还要加班,所以觉得很轻松;师兄们人也很好,带着我们去过了优胜美地,三番市区玩。总体感觉就是让我紧绷的科研神经放松了一段时间,也了解了另一种很不一样的美帝生活,习惯了吃早茶,印度菜,越南粉。
这个暑假是过去几年里,过的最开心也收获很大、非常充实的一个暑假了。这一年在微软,是research intern;大公司确实流程比较正规,开始的时候有orientation带你入门,公司各种facility也是不错。
我的mentor已经是很senior了,是组里的manager,但还是非常hands-on,自己还写code做实验,所以对技术的见解非常深入;人也很nice,甚至还有时帮我一起debug算法,学习到很多。当时我在一个华人比较多的组,其他的full-time也很nice,我们工作上有问题都耐心跟我们讨论,生活上带我们尝试各个楼不同的午餐。我们在的是99号楼,都说99很难吃,导致我至今还没尝过99的午餐……组里每周会有intern轮着做presentation,介绍自己的进展,大家都很自觉,所以,虽然说大家都很nice,但因为想要在这三个月里做出东西来,自己给自己的压力还是比较大的。这种压力我觉得是好的,积极的压力。
这次实习后,我就习惯了用Windows系统,VS编程,onedrive,自己macbook上装着Windows(这个习惯来FB后被打破了,现在又换回来苹果原生系统)……微软没发笔记本,而是台式机,所以周末来公司的intern还不少,再加上西雅图公交系统发达,去公司很方便,我晚上和周末基本都会在公司;也因此认识了一群小伙伴,因为微软晚上餐厅不开,所以常常坐小伙伴的车,去外面一起吃晚饭,然后再回来干活。夏天的西雅图天气很好很舒服,二十来度吧,晚上九点多天还是亮的,是全年最好的季节,其他时候则都是雨季了。
这一年回到湾区,在Facebook,体验是最fancy,最累的一个暑假了。
原以为之前我已经了解湾区了,但16年其实是在Sunnyvale,Santa Clara这块,靠东边,偏热;18年FB在Menlo Park,公司公寓在红木城,这块靠西边,温度跟西雅图夏天差不多,很舒服,跟16年常活动的区域还是有点远的。说fancy是因为,17年在微软,我觉得有免费的咖啡和椰子汁就很不错了;来了FB,好么,喝的吃的种样繁多,微软就显得小巫见大巫了;FB楼里各种有个性标识的墙,intern program组织的活动也多,认识了很多玩得来的小伙伴。在这也学了很多“黑话”,什么movefast啦,什么what does success look like啦……
图片但同时也是最累的一个暑假了,一来因为open space办公室,大家都坐在一块儿,业界大佬就在身边,自然也会想向他们学习,做的优秀;二来FB有mid-term和final review,一般你的mentor们会给你写feedback,打分,然后有个叫calibration的环节,上面的老板们会把所有intern放在一起比较,调整分数,要看你跟你的peers比怎么样。所以好几次,忙到晚上3-4点,早上8点就得起来赶班车……
刚入学时,我单纯的觉得,好好做research就好了;但事实上,能够专心做research的时间其实是没有想象的那么多的,是要挤出来的,甚至去开会回来,报销填表准备材料这种杂事,小事,都得折腾掉好几个小时……
但更tricky的是平衡project和paper之间的关系。如果你比较幸运,有国家的Fellowship/Scholarship,或者系里的Fellowship/Scholarship(有的是以TA的形式),不用做所谓的RA,再或者sponsor你的project是纯以发paper为KPI的,而且并不care你做的是什么topic,那你可能没有这方面的苦恼。
但是,通常老师们申请grant,很多grant,尤其是金额大的project,通常甲方心里都有一个确定的想解决的问题,向老师征求proposal,即问题的解决方案,proposal里面会规划好每个半年甚至每个季度做什么task。当然,这里说的project不包括那种纯粹是给外面公司做工程的project,倒还都是research project。经常项目开始的时候,因为proposal是以前定好的,如今环境、state-of-the-art都不一样了,跟当下情况不符;或者甲方想解决的问题比较practical,是个没有formulate好的research problem,或者不是community关心的偏基础的research task。
举个例子,你想做的topic是object detection,community关心的dataset是VOC,COCO,但你的甲方关心的可能是某个领域的object detection,比如detect某种野生动物,比如detect不同微生物。经常遇到的是,你提出的方法在VOC,COCO上面很work,但在微生物的dataset上面效果不佳,这样虽然可以发paper,但是project却没有进展。有些项目,在开始的时候会fund好几个team,然后让大家比赛,比如在项目内部有个detect微生物的benchmark,让你们PK,第一年结束,淘汰掉最差的那个team,第二年继续PK,再末端淘汰。你要是project没有进展,导致你导师的项目被砍了,就问你怕不怕……因此,很多同学就走了另一个极端,花很多精力做项目,hack这些project的上的number,很多时候涨点最快的方法是,collect更好的training data,用更复杂的网络,渐渐变成了解决工程问题,开发了个很牛的系统,但是没有novelty发paper。
这种情况下,人的本性,会觉得麻烦,就偏颇一方。但这其实是偷懒,千万不可。要align双方的兴趣,要注意平衡,trade-off,一方面要project有进展,对sponsor负责,另一方面更要对自己负责,发paper做有impact的工作 比如,尽量focus在模型本身,找到有novelty,在project benchmark和学术界standard benchmark上效果都好的方法。以及,通常一个project开始的时候有很多engineering的活儿,可以暂时放一放纯paper research,等system搭起来了,后面就是不断improve核心算法,这个时候精力更多放在paper这边。
拿我自己举例子,15年底,我开始take charge of一个新的项目,于是16年上半年,基本都在为这个项目搭初步的system,从前端网站到后台数据库,从设备采购到system infra,从object detection到multi-modal;等系统差不多搭起来了,我在项目工程上就可以花很少的时间,也有progress去每月report,于是16年下半年,基本在做paper,当然topic做的技术是将来能improve项目system一个核心模块的;到了17年上半年,系统要开发新的模块,又是花了三个月在项目工程上;再之后直到博士毕业,都是尽量找到common interest,一个新的模型,对project的system效果有帮助,亦有大的paper research价值。
刚读博时候,受周围人影响,很多人都说release一个新的dataset没有什么技术含量,轻轻松松发paper还能赚一票引用,是个low-hanging fruit。但当我参与到一个新的dataset的创建过程后,才发现这是一个非常tedious的工作,有很多的脏活累活,很多细节的地方需要考虑。之前v1版本data,可能因为一个细节没考虑好,需要重新collect或者annotate,费时又费钱,经常要迭代好几个版本。所以create new dataset一点也不简单,可能比提出一种新方法的paper,花的时间还要长。
同样,以前以为提出一个新的task(所谓挖坑)是个low-hanging fruit,但真正做过之后才知道,也没那么容易的。17年底,导师让我做live detection,也就是,只根据过去和当下,监测当下发生了什么事件。我发现之前的工作都没有很好地evaluate这个问题,formulation上有问题,实际做的是per-frame labeling或者early classification,于是决定提出一个新的task,专门evaluate detection本身。投完paper信誓满满,结果被CVPR拒了。reviewer们一方面指出了一个我之前忽略的点,另一方面指出对于有的application,per-frame就可以够用,不能直接说per-frame用来detection有问题,而仅仅是对于有的应用场景,per-frame用来detection有问题。为此,要大改paper的定位。过程是痛苦的,但正因这个痛苦让工作更加完善,我们才能成长升华,最后这个工作重投ECCV被大家认可了。
对于new dataset或者new task的工作,怎么样才能做的尽量完善,减少迭代次数呢?我的一个经验是,这种项目,尽可能involve多的experienced experts参与讨论,及时跟大家沟通,collect不同人的想法。 每个人看问题角度不同,放在一起就会比较完善,群众的智慧是大智慧。
说了没那么简单的事,再说说没那么难的事。
万事开头难,难在迈出第一步。当开始做survey入门时,发现这么多文献要看,会觉得难;当想好idea准备去实现,发现要准备data,要实现的东西一步又一步,会觉得难;当开始写paper,构思完每个p,发现这么多内容要写,会觉得难……
但实际上,当我们一点一点去完成的时候,会发现完成的速度远比我们想象的快,文献一个星期可以看完经典从而入门,paper一个星期可以有个初稿,idea实现起来一个星期可以coding完,甚至跑出实验结果……其实没那么难,就是耐下性子,脚踏实地,干就完了。
一般大家就是三种选择吧:去公司,去创业,去学校。这个问题经常会被归为,想去学术界还是工业界,但我觉得职业本身的区别,可能没有那么重要,重要的是想清楚 :
最想要什么?最喜欢做什么?最擅长什么?未来几年,哪个选择能最大地支持自己的需求?
面对不同的选择,第一步要做的,就是想清楚,未来几年在这个新的岗位上,你的最大的需求是什么?比如说(1)急着用钱,要钱多稳定的工作;(2)家庭压力大,未来几年需要个人时间多的工作;(3)做自己喜欢做的事情,并在自己喜欢的事业上有进展。显然(1)的话是去大公司写码;(2)和(3)的话公司和学校都可以,(2)的话去一些老牌的养老型的大公司,或者压力小一些的学校,(3)的话去发展快速ing的公司,或者top的学校;但如果是(1)和(2),恐怕都不能选创业(特别牛的大佬除外)。
人生奋斗一辈子,最重要的还是要开心,只有做自己喜欢的事情才会开心;也只有如此,才能一直一直做下去,做出有影响力的工作。 让自己开心的事情因人而异:有的人喜欢编程,写一辈子代码是最开心的,在大公司经常看到年纪很大,还在写代码做individual contributor的,人家就喜欢这个;有的人喜欢开车,去自动驾驶行业最为开心;像我的话,喜欢看视频,拍视频,剪辑视频,所以做和视频理解与生成有关的工作最让我开心。
通常一份工作,都是由各种各样的component组成的,并不只是非黑即白的。比如说自动驾驶公司,跟编程有关,跟车有关,跟视频有关,跟上面三种人都关,只要有common interest,能最大地满足你的需求就行;试想,对于第一种人(最喜欢的事情是编程)来说,让他在自动驾驶公司写代码可以,但是当VP做管理或者搞商业啥的,他可能并不开心。而我的话,一路走来,从哥大读博研究视频算法,到Facebook搭建视频工业平台,再到业余生活中,拍片子制作视频…在视频生态链的每个环节,我都很开心。
总之,不同的人,看重的东西不一样,擅长的东西不一样,选择本身并无好坏之分。所有的选择,总有好的一面,也有坏的一面;只要适合自己,都是最好的选择,开心就好。可能唯一要注意的就是,不同时间段,各种影响你做决定的因素的权重是在变化的,年纪大了我们可能会更看重家庭和稳定;有的事情年轻的时候不做,以后可能就没有机会去尝试了;鱼和熊掌不可兼得,需要取舍。
考虑毕业后这几年选什么样的工作时候,一方面想远一点,你的long-term事业,或者说可以一直做一直快乐的事情是什么?另一方面,毕业后这几年short-term来说,是不是曲线救国,短期做的不一定是你喜欢的事情,但是长远来说对你long-term目标是不是帮助更大?
目前来说,毕业直接找到教职的难度还是比较大的,很多人会先做个PostDoc,可以一方面积累新的paper,一方面积累新的connection。同时博后期间,可以有更多时间,准备更充分地找教职。
最快赚大钱的方式就是创业了,当然new grad选择这个的比较少,要考虑你有没有时间,精力,资金上的压力和限制?有没有一个好的business model?作为技术出身的我们,有没有好的商业合伙人,mentor?
另外一条路,最多人选的,就是在公司做production,升职加薪,最终财富自由的。经常有人问要不要读博?我觉得,如果是想走公司这条路的,其实读两年的master可能就够了,save下来的三年,在公司里面选个发展前景好的组(整个org growth快,从而headcount多的组),可能升职加薪的速度更快。当然读了博士,手握几篇paper,是工作能力的证明,找工作更容易,是个敲门砖,否则简历关可能就被刷了;博士大家庭的师兄师姐,做相同topic的peers,都是将来有用的资源;这个问题也很复杂,我这里就不展开聊了。
但是,想走公司一路快速升职这条路的,尽量不要抱着又搞想research,又想做出大的product impact,早期公司里都没有用deep learning的时候是可以大展手脚的,但公司已经解决了deep learning从0到1的局面后,再抱着这种思路,可行,但可能升职速度不是最快的,尤其在是未来这十年。大佬们总结这是“拿着锤子找钉子”,更应从product的痛点出发,找到最有价值的钉子,而不是最适合你锤子的钉子。
当然research对于大公司,一直也是不可或缺的一部分,不光是branding,吸引人才储备人才;更有一些long-term, high impact的难点技术攻关,可能需要3-5年长度的持续研发投入,毕竟product关注的是短期半年内的效益,很多high impact的东西,在半年内看不到价值,但3-5年后则有巨大的商业价值;另一种普遍的模式,就是research scientist自己,因为喜欢,有搞研究的热情,通常会选择跟学校合作,带intern做纯paper的工作,然后自己负责将paper转化落地到产品里;亦或,公司出数据和算力,学校出人才,合作双赢。
说到升职,再给大家科普一下,比如在Facebook,硕士毕业是3,博士毕业是4,往上升5,6,到6后可以转manager。朋友打趣说,工业界升职路线就是,技术(engineer)——产品(manager)——销售(business)-——投资(chao gu,划掉,capital)。这个路线将来也是要做选择的,某一天可能你觉得赚的已经够了,没兴趣再赚了,就提前退休养老了。在湾区plaza,你看着一个中年人,穿着简朴,平平凡凡,但经常可能就是超级富翁……
但如果不退休的话,不管是在学校还是公司,四五十岁估计都是比较senior了,需要负责的事儿多,压力大,经常晚上周末要加班;像我导师这种功成名就的,还是时常收到他晚上1点,或者早上7点发的邮件。当然,有的人退休了又觉得无聊,这就回到开头说的,想清楚,想要什么,喜欢什么,擅长什么了。
毕业那会儿,导师说他刚毕业来哥大时,师爷跟他说,you need to change topic every 5 years。感觉很有道理。如果在博士开始那会儿,开始做一个topic,做了5年,基本这个topic就会饱和了,很难再有大的impact。这个时间点,差不多刚毕业参加工作:如果还是research岗,我们就需要像刚开始读博士一样,重新选一个新的有impact的topic开始做;如果是转production,转business,那本身就是很不一样的topic了。树挪死,人挪活,大概就是这个道理。
这也是个复杂,需要具体问题具体分析的议题,就不展开聊了。我就简单分享一下,我所得到的一些advise和一些自己的浅薄体会。
(1)三选二 :还记得博士入学典礼上,院长跟我们分享说:未来几年的生活将由三件事组成,工作/学习,睡觉,social/玩;但是,在某个具体的时间,通常只能三选二,因为时间和精力是有限的。像我自己的话,博士第一学期,以及每段实习期间,选择的是工作和玩,放弃睡觉时间;博士第二学期开始,则是工作和睡觉为主,常常宅家不怎出去。就是按照自己的需求,在每个特定的时间段,在这三者中做出你的选择,对你自己负责,不会后悔的选择,然后该学学,该睡睡,该玩玩。
(2)身体会变的 :最近前浪后浪的话题很火,其实很有道理,真的很多有影响力的工作,就是人在年轻时候,精力充沛,琐事不多情况下,才能做出来的。刚来哥大的时候,课业负担和科研任务都很重,还要参加些social活动,好几次晚上参加完活动,回到家通宵写代码,7点半天亮了睡两小时,然后9点半啥事没有地去上课。。现在想想那会真的是年轻,现在让我通个宵,第二天工作效率绝对超低。。
(3)做你喜欢做的工作 :公司里面经常提到所谓work life balance,以前我以为这就是对应工作与娱乐,但现在意识到,其实work也分work input和work fun,life也分life input和life fun,其实input才是工作,fun才是娱乐。input需要我们付出精力,疫情期间注意消毒洗手,这就是life里多出来的input;fun就是带给我们的快乐和开心,工作中做成一件事,带来的成就感也是fun。如果要让自己过的更快乐,也就回到上一章说的,尽量做自己喜欢做的事情,增加work fun吧。
有的时候,经常听到有人评价一个工作,太水了。诚然,有些工作是水,但如果被顶会接收了,我相信它还是有它的价值。有的时候,减一减戾气,多看到事物好的一面,这样我们看这篇paper的时间,才没有浪费,而是学到了东西,不是吗?然后,有的新手刚入门的时候,发的第一篇文章虽是顶会,但可能比较naive,不过只要这篇文章,能给读者带来一些insights,让人学到东西,我还是支持这样的新手之作的,因为确实积累是需要时间和过程的,中间这样被顶会认可,其实能很好地激励新手去continue科研之路。
一路上得到很多前辈帮助,非常感激。在来到Facebook后,学会心怀感激,感觉是个很明显的公司文化:每个月组里的all hands有shoutout session,让大家在全组面前,表达对工作中帮助了自己的人的感谢;公司有#thanks hub, 可以给帮你的人写感谢note,而且这个note,对方的manager会看到;而且,很多时候,感觉是很小的事情,大家也会互相道谢;每次开完会,大家也会互相道谢。简单的一句thank you真的可以让人幸福感增加不少,毕竟很多时候别人并没有义务非要帮助我们,这让大家更愿意互帮互助,感觉是个特别好的文化。
庚子年 · 岁末
Mike 于 旧金山
「后记: 惭愧在各位老师、大佬面前班门弄斧了;若是对于有的同学有点帮助,我就很高兴了;但不可避免的,因为时间有限,文章写的粗糙,还请多多担待;因为篇幅限制,有的问题难以讲得完善全面,还请结合自身情况,辩证地借鉴相关经验;或跟您意见不合,全当看小说,寻个乐子罢了;顺祝大家新春愉快,平安喜乐,万事胜意;希望疫情早日过去,世界和平…」
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)