上海科技大学首届毕业生王一帆,目前已获华盛顿大学PhD Offer、商汤科技Offer(45+10万年薪package),今日头条Offer(33万年薪package)。大三在MIT进行了为期一年的交流。
*本文根据首发于公众号「从零道一」的访谈整理。
内容摘要
- 作为上科大第一届学生,在MIT学习时如何完美平衡课业与科研?
-在MIT与教授一对一合作时,如何最大化自己的科研体验?
- 在上科大和在MIT学计算机有什么不同?
- 为什么高三选择了去上科大,而不是清华?
#0.在MIT学计算机和上科大有什么不同?
郑天意(以下简称郑):你在MIT交换的感觉怎么样?
王一帆(以下简称王):总体还是挺有趣的。MIT在计算机领域是顶尖的学校了。我第一学期修了四门课,第二学期学期是三门课。上课感觉挺不错的。MIT不像国内偏重于知识应用,而是更注重介绍这个领域里的基本概念。上学期上的人工智能(6.034),还有这学期的计算机系统工程(6.033),都是很有名的教授来上课,上课时候会注重基本概念,让你去写一些代码,真正体验当中的道理,并不像国内的课程更偏向做作业刷题。
除了上课,我上学期和这学期都报了一个研究项目。上学期做的是计算机图形学相关的内容,因为我上学期也选了一门计算机图形学的课。这学期做的是和计算机视觉有关的内容,因为这两块也是比较接近的,正好机器学习现在比较火我也想尝试一下。
郑:我知道上科大很多课形式上也是比较创新的,在MIT上课的时候你觉得和上科大有什么区别呢?
王:上科大是一所比较新的学校。它的师资大多是一些在国外当教授的老师,他们回国给本科生上课感觉和国外还是很接近的。来MIT之后感觉差别不在于老师上课的好坏,而在于整个课程。因为一门课不只是上课,还有习题课、实验课、作业,以及它们和讲课(lecture)之间的衔接,才真正组成了一门课。
郑:MIT的学习压力和上科大比起来怎么样?
王:如果单纯只是上课,应该是没什么压力的。我们每学期学三四门,其中只有一两门是硬课。所以在上课做作业、复习考试这方面,压力是比较小的。大学学习不仅局限于上课,还可以去参加活动,比如Hackathon或者ACM比赛,或者去实验室里做科研,或者实习。
真正的压力来自后面这部分,在科研里,我上学期才接触到计算机图形学,这学期才接触到计算机视觉,有一个很高的学习曲线。进入这个领域之后,要读这个领域里的论文,了解它是怎工作的,从零到一这样去学习这个崭新的领域。这就会带来很多的压力。
我每周会花10个小时左右去处理上课做作业的事情,接下来30-40个小时去做研究。因为这个上课或者考试,是有个固定的答案在那里的,你只要去理解他就能把那个固定的答案做出来。你做研究的话是没有一个固定的答案,没有人知道它到底能不能工作,你需要自己去探索,所以压力会比较大。
#1.在MIT做科研是一种什么体验?
郑:能不能简单介绍一下你两个学期做的计算机图形学和计算机视觉的项目分别是什么?
王:计算机图形学的话我做的是rendering这方面的。这个事情很有趣,你写一段代码,debug的方式就是看你的输出的图片对不对,如果是对的话就会很有成就感。我做的是offline rendering,因为rendering分为offline和online。
Online是游戏这些会用到,offline就是电影制作,比如像说汽车总动员每一帧背后都有1800个小时,当然1800个小时是从一开始建模开始到最后render出来的结果。但是它rendering还是会花很多的时间做一个比较realistic的结果。我上学期做的基本就是这部分,就是realistic rendering。在图形学里有许多的经典模型来模拟光线,这背后涉及到许多数学。一开始读paper的时候我也有点懵,后来找了教授一起讨论,搞清楚了背后其实就是矩阵的low rank compression和recovery。
第二学期做的是计算机视觉,我们做的是一件非常基本的事情:由一个二维图像去predict一个三维图像,比如给你一张椅子的照片,怎么用神经网络把椅子3d的voxel给学出来,没有ground truth。传统的方法是把神经网络视为一个黑盒,输入是RGB图片,输出是三维的voxel。这样做的话结果很容易受许多外因的影响。比如一把同样的椅子会有不同的光照,不同的材质,这些因素都会影响输出。我们用的是一个两步的做法,第一步是先提取对三维重建有用的信息,我们选了depth和surface normal map。这些信息保留了三维结构并且丢弃了那些外因。接下来再从这些map来三维重建。最后的效果比传统方法好很多。
郑:在一开始和导师做课题的时候,你是怎样从对领域一知半解,到能够至少重现重要论文结果的?有没有什么窍门?
王:我上学期就是会想把整个东西都学完然后再去做,就是先去读那些论文,再去写代码,看结果。这样的问题在于,如果说你一开始直接看论文,有无数多的论文要去看,会浪费时间,得不偿失。但很多美国学生就会一开始就写代码,写到哪里不会自己再去看,这就是我这学期的方法。我觉得这个很有用,直接开始写,再填补自己不太懂的地方,如果还有不懂的再去看论文。
郑:你觉得PhD学生对你的指导和帮助大不大?
王:说一个小细节吧,上学期我render出一个结果给导师看的时候,那个结果不对,他说这里面有个bug你要去查,就只说了这一句话。我当时很崩溃我不知道哪里有bug,因为我觉得看起来其实挺对的,当然后来还是找出来了。
这学期跟博士生的时候,同样的事情发生了,他发现有个bug,就会告诉我有可能是哪里做的不对,这样一来我调试就更有思路了。他也会和导师一样做一个高层的指导,告诉你要从哪步做到哪步,也给你看一下别人的工作。
我觉得博士生和教授之间,如果单纯是做项目的话,其实对你的帮助是差不多的,有时候研究生的帮助会更多一点,有时候教授会给你一些更高层次的帮助,各有所长。因为这些名牌大学的教授都是特别忙的,如果跟着他做课题会三天找不到人,交流只能靠邮件,可能会对这个项目丧失兴趣。
但和教授有这样一个好处,可以问他能不能参加组里的组会,在组会里就可以知道现在的博士学生都在做什么。但和博士生做的话,相当是一对一的会议,不知道别人在做什么。
#2.MIT给我带来了什么改变?
郑:在MIT学术之外会做些什么?和上科大的前两年比较有什么区别?
王:我来了之后才发现生活可以如此丰富多彩。以前很多人做完作业都会宅着看B站或者开黑,但在这边如果一个周末不出门是一件非常奇怪的事情。我现在有一个兴趣爱好是徒步旅行,MIT有个叫MIT Outing Club的社团,每个月组织一次外出,组织大家去山里。山里有个小木屋,大家在山里待一天,然后第二天出去爬山。
MIT还有一个Flying Club,会不定时的拉一批人去坐飞机。有一次飞到了缅因州,那天是在那边吃个饭然后再飞回来。在国内一直想做小飞机,但没有做过。
在美国之后还有很多的娱乐活动,比如可以去开开枪、跳伞,周末可以去放松一下。回到国内之后我也创立了一个类似MIT Outing Club的社团。每个月会带一些别的同学租车出去玩,第一天烧烤野营,第二天爬爬山看看海什么的。也算是丰富了同学们娱乐生活。
郑:在MIT学习了一年之后你的个人目标有没有什么变化?
王:一开始在上科大做了很多美国梦,觉得自己很厉害,但出来之后却被现实打脸,因为这个世界和想象中的是不一样的。比如说在上科大时候觉得如果GPA很高有推荐信就可以申请所有的美国大学。但来这里之后,和这边的PhD学生一聊,原来斯坦福或者MIT每年录的学生基本都有两篇论文,但在上科大没有想到过论文啊。之前在国内也做些项目,就像小打小闹一样。但一旦提到发论文就变成另外一回事情了。
还有一方面就是之前觉得之后要在科研和产业当中选一个,当时还觉得如果要做科研,大四一定要申请。现在碰到很多例子是如果大四申请不上,很多人都去工作了,比如说申请一个RA,或去别的学校读是一个硕士,再申请MIT的PhD。而且MIT的很多的博士都不是大四就申上了这种,当然在录的时候可能会比较偏向本科生。
所以对未来的打算的话没有对太大的动摇,还是要做科研的。但是让我体验了一把PhD是怎么做科研的,比如我在这边每天晚上一两点给PhD发邮件,他们都会秒回的,然后早上去发现他们还是在实验室的。这给我了非常直观的印象。
郑:为什么会喜欢做研究呢?
王:我在大二的暑假去了HP实习了一次,想体验一下工作是怎么回事。但觉得很无趣,因为每天都要打卡上班下班,让我很受不了。另外在那边你只是一个实现基本代码的人,做的所有事情都是别人分配给你的,最能表现自己的方面就是在写代码的时候写一些花里胡哨的东西,并且它还work,感觉自己很有成就感。
但做研究就不一样,首先时间是非常灵活的,虽然有阶段性的deadline,比如每两天需要给一个汇报,或者每两周要有一个很大的进展,但在当中怎么去分配时间都是自己安排的。想做的东西,想怎么做就怎么做,只要它能工作就行了,所以可以去实现自己的想法,比较自由。科研还有一个特点是在解决一个别人没有解决的问题。这样做出成果后就会给我带来一种成就感,一种推动人类进步的感觉。这都是科研吸引我的地方。
#3.为什么我选择了上科大,而不是清华?
郑:为什么当初会进入上科大?
王:我高中是上海中学数学班的,那时候主攻数学竞赛,拿到了清华的40分加分。这是定专业的加分,如果填志愿的时候填了数学系,才会在高考分上加40。当时填志愿的时候就面临一个选择:我是接着读数学还是选一个我喜欢的专业,计算机。数学是个很重要的基础学科。我个人更想把它用作计算机里解决问题的一种工具。还有一点是读到高三,已经在国内传统体系里呆了12年了。我个人不是很喜欢被学校里的各种条条框框束缚,也想跳出去看看。新学校的话因为我进去是第一届,没有那么多的束缚,反而可以帮助学校更合理地制定规则。当时我也面试了两所,上科大和上纽大。比较后觉得上科大的理念和我的很一致,提供的资源也比清华这种国内老牌名校多,就选择了上科大。
郑:当时上科大还是第一届招生,你当时有没有担心过上科大还只是一个新成立的学校?
王:我觉得这所学校是新的,当时宣传时候也告诉我们它有很多的资源,如果我去的话应该能充分利用那边的资源,所以并没有这样的顾虑。
郑:那你现在在上科大读了两年,现在又在MIT交换一年,你的体验与之前预想的一样吗?
王:基本上是一致的,但有一个问题,那就是上科大没有学长。上次我们在MIT交换的三个学生聚会时还在聊,我们把所有的路都去走了一遍。大学生活就是学习、竞赛、科研、工作这四条路,我们走了不少弯路,最后才真正知道自己最后要做什么,然后才开始规划。一开始做打算的时候我们都是不懂的,仅仅凭着自己对这个世界的了解。
如果这个学校有学长的话,我们就会得到更多的指导,比如从一开始就能了解到这个领域今后有哪些出路,也可以尝试多个领域,最后找到自己的热情所在。但是对于学弟学妹来说就没这个问题了,我现在也很注重于对他们的帮助。有时候会给他们开开讲座,带他们出去hiking。也是希望帮他们更快的找到兴趣吧。
除去这个问题,我觉得上科大上课还是很新颖的,因为用的都是国外的教材,是国外刚回来的教授给我们上课,所以我来MIT上课之后根本没有什么不适应。
#4.有趣的项目,推荐的Youtube频道和书
郑:能不能给我们分享一个你做过的比较有趣的项目?
王:我在一次hackathon上做了一个小游戏,当时我用的是华硕的Xtion pro摄像头,其实和Xbox摄像头差不多,会抓取RGB-D的数据,然后我们用摄像头去捕捉人的动作,把人的骨架画出来。这个游戏是双人对战,每个人配备宝剑和盾进行对战。当时基本上是在hackathon上花了一天的时间写出来。
郑:所以它就是有点像Xbox Kinect一样?
王:Kinect的话,Microsoft的东西会有很多API可以直接调用。但我们当初都是自己写的,所以那个是很有趣的。当然也用了一些在线的库,譬如标定哪个是肩膀、腰、腿。
郑:那么对于比较想学习计算机视觉或者机器学习的同学,你觉得你有什么建议吗?
王:可以自己去下一个PyTorch或TensorFlow,然后自己去写一些比较小的项目练练手,然后再开始做一些比较大的。这样会对这个领域比较常用的概念有一个理解,以后会好很多。因为关于机器学习,最近网上有很多教程,从CNN到RNN再到reconstruction,基本上可以自己动手实现一些代码,这样会有很大帮助。
如果有兴趣的话也可以去读一点类似的paper,了解整个领域的big ideas。说白了机器学习背后就是数学嘛。所以一些类似实分析,矩阵分析,凸优化之类的课程也是很重要的。神经网络的成功只是因为现在计算机的算力也够了。
郑:能不能给大家推荐几本你喜欢读的书或者喜欢阅读的微信公众号等等。
王:我比较喜欢《了不起的盖茨比》,这本书介绍了一个繁华但是也是比较浮夸的社会,之前我是不相信有这样的存在的,来美国之后我意识到这其实是社会的一个缩影。三十年代的那个黄金岁月其实到现在还是有一定的影子的。我一般是不关注微信公众号的。如果是学习知识,我更多会去和我的导师,博士生或者朋友聊聊天,因为我觉得他们是过来人,他们才是最能给我有用的建议的人。如果是生活中的平常琐事的话,有几个很有趣的YouTube频道,叫The Late Show with Stephen Colbert,LateNight with Seth Meyers和Saturday Night Live,是美国的脱口秀,每期节目一开始主持人会用非常调侃的口吻总结一下最近发生了什么事情,这对学习口语,了解美国的新闻和文化背景会有很大的帮助。