来自:丁司图
从清华毕业入职腾讯没多久,我上个月作为今年新晋打工人的代表参加VALSE学生论坛,跟同学们分享了一些故事。司徒笔记这个专栏本来是用来聊学术的,不够轻松,似乎缺一些用来当作下饭伴侣或者如厕读物的文章。所以我想写几篇文章记录自己上学过程中的一些经历和感想,作为番外篇。如果甚至于能得到一些共鸣,我将不胜荣幸。
2017年2月,我从南大提前来清华开始做本科毕设。2019年2月底,我中了第一篇CVPR。在这两年中,我每时每刻都在感受着焦虑、疲惫和迷茫。在当时的我看来,读博的终极目标仅仅就是毕业。至于后来的百度奖学金和华为天才少年之类的概念,对那一时期的我而言,甚至不能说是遥不可及,因为我从来就没敢展望过这些东西。然而,哪怕目标只是毕业,我也没有多少信心。从当年的QQ空间就可以看出我的心态。
第一阶段:啥都不会,艰难起步
今天的机器学习和计算机视觉行业,本科生也能在顶会上神仙打架,共襄盛举。但2017年走上读博道路的我,在专业上的积累只能说是聊胜于无。在南大的三年,我锻炼出了科班化的代码能力,学到了软件工程的方法论,却偏偏对自己将要投身的领域毫无了解。2016年9月,在以相对优秀的本科成绩和机试分数通过了清华的面试之后,我回到了当时正在实习的公司——上海SAP研究院,开始恶补未来要用到的知识基础。直到2017年初,在非常悠闲的实习工作期间,我看完了吴恩达的机器学习课程和Andrej Karpathy老哥主讲的斯坦福CS231N课程,总算是对未来要做的事情有了一些基本的准备。
2017年初,来北京做本科毕设,才是两年渡劫生活的开始。初来乍到,没成想,我的开启新生活的激情被北京的租房黑中介按在地上来了一套军体拳。作为一名非正式学生,在不那么舒适的住所和不怎么方便的生活条件下,我磕磕绊绊地做了一个用于神经网络稀疏化(非结构化剪枝)的方法。在这一段时间,由于目标(赶紧做完毕设回南京享受生活)是明确而低难度的,我所感受到的烦恼仅仅是轻微的(听涛餐厅的饭实在太难吃了)、偶然的(实验结果不理想)。虽然不是特别焦虑,我却经常会感到迷茫。我不止一次地在实验室楼下的寒风里开自行车锁的时候想:这样的日子还要多久,我到底什么时候能毕业,能不能毕业,毕不了业的话怎么办?
2017年夏天,从一所开着紫荆下载站的紫色校徽大学毕业,我进入了一所开着紫荆公寓的紫色校徽大学。正式入学手续的完成标志着五年倒计时的启动。好了,你已经是一名博士生了,矩阵乘法你会算了吧,python你会写了吧,现在让我们来完成一个小目标——发表一篇CVPR吧!
第二阶段:水平又菜,想得又多
怎么形容呢,清华读博前两年的感觉像是穿着毛衣待在一个墙壁上通着高压电的安静房间里——你虽然说不会玉石俱焚吧,但至少也是全身刺挠,坐立难安。再想想墙上的电压是随着时间而指数级上升的,五年以后没准会击穿空气把你带走,怎么样,是不是感觉刺挠多了?
想要不刺挠,就得达成毕业要求——两三篇顶会文章,这件事还是很有难度的。难度体现在哪呢?首先,我所做的是实验室刚刚设立的研究方向——模型压缩,没有师兄师姐可以带路。其次,我们实验室的规模比较小,不存在一些大厂和大实验室的成熟流水线模式,主要靠个人能力。最重要的是,我很清楚自己当时的能力没有达到做出CVPR/ICML/NeurIPS/ICCV等顶会工作的水准,但我又不知道达到这个水准还要花费多久,一年还是两年?就算我达到了这个水准,投稿、修改、再投的过程要花费多久,一年还是两年?只有一篇还是不够毕业,第二篇又要花多久呢?如果你足够保守,把每个步骤的用时都按大保底来估算的话,五年真的不够长。
超出当前能力的目标、不清晰的实现路径、掌控感的丧失产生了无处不在的焦虑。现在回想起来,读博真的是一件本质上就非常矛盾的事情:一个科研新人要一开始就面对整个读博过程中最最困难的挑战——主导自己的第一项研究工作,发表第一篇足够水准的论文。
换句话说,因为没有文章而焦虑,因为焦虑而影响工作状态,因为状态差而没有文章,因为没有文章而焦虑,形成了一个完美的逻辑闭环。而且这种情绪几乎无法得到有效的缓解和释放。直博五年或者普博三年的期限就摆在那里,你与日俱增的年龄就摆在那里,不论你玩一晚上游戏还是刷一晚上B站,第二天你还是要面对问题。
当然了,走上这条路的勇士们从小都培养了较强的抗压能力,一般在三四年内都不至于被击倒而开始躺平。只是如人饮水,冷暖自知,在五道口的清吧里,一口长岛冰茶下肚,才知道顶着“名校博士”的光环的各位卧龙凤雏,心里各有各的苦楚。
既然我们承认拿到博士学位这件事情具有一定的本质困难性,这五年里必须得突破自己,必须得解决问题,必须得把自己的水平提升到某个阈值以上,那不妨停止幻想,面对现实,想想怎么让自己尽量少吃点苦头。可以将这件事情建模成一个优化问题:假设我们要吃的苦头的总和是有下界的,而这些苦头分布在五年中,如何得到一个苦头对时间的最优分布,让我们吃苦最少而获益最多呢?
在我入学之初的某次组会上,我的导师丁老师提到,读书要“前紧后松”。也就是说,五年中不应该平均发力,而是在前期多投入,克服一些困难,尽早把自己的水平提上去,然后以更好的心态和更牢固的基础,较为轻松愉快地度过后几年。这样,前期毕业压力较小,工作状态更好;后期水平已经上来了,也没有毕业压力了,更容易出质量更高的成果。
在这一方针的指导下,我度过了日均工作时长接近12小时的两年。上午工作三小时,午休一小时,下午五小时,晚上四小时。学院每晚十一点都会有物业人员上来要求晚走的同学签字,我很少错过。离开时楼下的自行车棚里和骑向宿舍的路上总会遇到同样行色匆匆满身疲惫的人,他们又是在哪里推公式、写代码、刷试管、杀老鼠、养细菌、拌混凝土的猛士呢?
在这种强度下,由于自身水平有限,我还是边努力边失败,在疲惫并焦虑的状态中折腾了很久。2017年底,我在蹬着自行车回宿舍的路上突然想到一个模型压缩的方法,简单尝试后发现效果还不错。那时我已经有了一篇AAAI,我决定直接挑战ICML。2018年初,在飞往新奥尔良开AAAI的路上,我完成了这篇ICML的初稿。不用说,结果当然是被拒,而且评审意见非常非常惨。在重新思考了整个方法以后,我重新设计了这个方法的一半,投稿到了NeurIPS,还是被拒,但这次只能称为惨,不算是非常惨了。现在说来轻巧,但这几句话之间,大半年就过去了,又到了一年AAAI投稿的时候。丁老师问我要不要改投AAAI算了,我说这个方法配得上CVPR。丁老师一如既往地支持了我的想法。这次我重新设计了方法的实现,找到了全新的视角进行解释,并重写了整篇文章。
第三阶段:感觉不错,下次还来
我觉得,一个挑战第一篇CVPR的博士生就像一个寻找厕所的腹泻的人:结果出来之前,你永远都不知道自己还能坚持多久。
终于,最终结果证明,经历了一年多的磨难,我的设计、代码、写作水平不能说有多么高吧,至少也是达到了CVPR的门槛。2019年2月25日下午,CVPR还没发出正式的接收邮件,但放出了接收的ID列表。在几千个数字里用ctrl+F找到自己的数字以后,明知道ctrl+F不会有错,还是多看了两眼,确认这个被蓝色背景选中的四位数字确实是自己的作品以后,我如释重负,然后去丁香园花三十多块钱吃了一顿香锅。那时我既没有大额奖学金也没有实习工资,作为月入小几千的学生,这也算是性价比极高的消费了。
之后几个月里,我保持了较高的工作强度,状态也越来越好,三项工作分别连续中了ICML、NeurIPS、ICCV,不但达到了毕业要求,还超了一倍。每次收到中稿的邮件,我会风轻云淡地发个朋友圈,说“感觉不错,下次还来”。不错的到底是什么感觉,下次再来还要付出多少,只有自己知道。
第一篇CVPR对我的意义远远不止让我达到毕业要求而已。如果没有折腾过程中自己的全方位提升,后续的这些工作不可能这么顺利地做出来,也就拿不到百度奖学金的20万元,过不上相对舒适的生活。最重要的是,从那篇CVPR的方法拓展开来,我发现了一些规律,最终建立了“结构重参数化”这个流派并发表了RepVGG、RepLKNet等代表性工作,也为业界同行的YOLOv6、YOLOv7等优秀成果的出现提供了基本工具。
有了前两年的磨难打好的基础,我在此后三年中心态非常轻松,工作强度大大降低,但成果产出反而越来越好,生活质量和幸福指数直线上升。这也在一定程度上证明了“前紧后松”策略的正确性。
尾声:如人饮水,冷暖自知
读到这里,这篇番外已经接近尾声,但是,问题来了,你以为我要说的是,一定要坚持,一定要相信自己,一定要大干快上,风雨之后一定是彩虹吗?
不,我深知我的这两年充满了偶然,我个人的努力并不是主导因素:我的关键灵感来自于偶然的灵光一现而非必然的积累和推理;我的每次关键抉择都得到了导师的支持,而且很少承担工程任务,而大多数同学都没有这样的条件;我的父母身体健康工作稳定,没有什么大事需要我分心。
我想说的是,读博只是一种选择,是一种冷暖自知的行为艺术,拿到博士学位这件事情具有本质的困难性,没有任何方式能保证你的成功。博士学位只是一种学术行业的从业资格证,在任何意义上都不能让你高人一等,没有必要拿健康、事业和爱情去交换。我见过了太多足够努力却由于各种客观因素无法毕业的同学,在付出了沉没成本之后无法下定决心放弃,只能继续在泥潭里挣扎。在有些情况下,劝人再努力一点,劝人跟导师处理好关系,劝人换个研究方向,实在是纯粹的晋惠帝行为。
作为体验过什么叫冷暖自知的人,我既不劝进也不劝退。没有任何人生来就一定要读博,但如果你已经决定了要拿到这个博士学位的话,祝你成功。
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦