阅读原⽂
喜欢此内容的⼈还喜欢
我在斯坦福做科研的碎碎念
⽂ | Jazon
编 | ⼩轶
⼤家好,我是 Jazon。作为 AI 科研⼯作者,我们的⽬光不该只聚焦在开发新技术、刷榜打
SoTA 上。学界如职场,还有很多技术之外的软实⼒需要培养。这篇⽂章⾥,我想以我个⼈的
经历作为切⼊点,聊⼀聊与此有关的两个话题:
实验室⽂化;
团队合作下的代码质量。
背景介绍
在我之前的⽂章⾥提到,笔者现在在 Stanford 攻读计算机硕⼠项⽬;和中国的研究⽣不同,
美国很多 CS 硕⼠项⽬(包括我们项⽬)中,做科研不是毕业的必须要求,也不需要有固定的
导师。⼀个学期⾥,可以在 lab 打⼯,也可以纯上课;如果在 lab 待得不喜欢,或者项⽬做
完了,下学期可以选择换导师。
作为硕⼠⽣,寻找科研机会有很多途径,⽐如直接联系⽼师或PhD,或者有的lab有专⻔的申
请表格。另外,有些 project 的招⼈⼴告,会在系⾥以邮件的形式⼴播给所有同学。
2020年 11 ⽉,我便通过这样⼀则招⼈⼴告,经过⾯试、测验,申进了 Stanford 商学院的
Social Impact Lab,之后直到研⼀结束(2021年 6 ⽉),我在这⾥作为 RA( research
assistant),做⼀个推荐系统⽅⾯的科研项⽬。Lab 的导师 Susan Athey 是经济学出身,美
国科学院院⼠,24岁就博⼠毕业,维基百科上她的词条有13种语⾔,⾮常厉害。
关于我这次科研项⽬的技术细节,有兴趣的朋友可以访问我的个⼈⽹站查看(请参⻅⽂末“阅
读原⽂”的链接);本⽂主要是想吐槽⼀下技术以外的⽅⾯。
周报制度
刚⼊ lab,第⼀件让我头疼的事是lab的周报制度。在这⾥,我每周必须上报⼀个 Progress
Report,⾥⾯主要分为⼏个模块:
1. ⽬标;
2. 职业发展:
3. 本周总结;
4. 下周计划。
其中,“⽬标”模块需要列出所有进⾏的 project,它们对应的 deadline,以及现在完成的进
度。
“本周总结”要列出本周在每项⼯作上花了⼏个⼩时。
⽽“下周计划”要列出计划的任务,以及各⾃预计需要的⼩时数;每项 task 不能超过4⼩时,否
则需要将其拆分成更⼩的 tasks。
刚⼊ lab 时,我对⼿头的任务还⼀头雾⽔,要我列出这么详细的计划,这让我很头疼。随着时
间的流逝,我对项⽬渐渐熟悉,但写周报仍然是件很⼼累的事。
在我看来,科研和其他⼯作不同,探索的⽅向有很⼤不确定性,需要⾃由的思考空间来获取灵
感。拿我的项⽬来说,我们有个⼤体的⽬标:提升某个平台上推荐系统的表现,细分下来有
“⽤怎样的评分标准”、“冷启动怎么解决”等问题。但是更加细分的课题,不少都是在实验、阅
读过程中⾃然出现的,⽆法提前预知。
另外,尝试量化每项任务的耗时,我觉得也不合理。写代码的⼯作本来就很难预测⽤时,更何
况在科研的情境下,失败是家常便饭,经常会试了各种⽅法发现⾏不通后放弃,完成任务需要
的时间就更不可控制。
每次的周报,我都得花⼤概1⼩时完成;如果没有按照规定的格式写,就会被 lab 的 HR 发邮
件要求改正。半年下来我⼀共被四五次“建议修改”,都是些我觉得并没有必要的格式性问题,
我也只是象征性地改⼀改应付⼀下,⽐如加⼀些实际上意义不⼤的“任务 deadline”。
▲Stanford GSB
我们 lab 的领域之⼀是经济管理,理应深得领导⼒之道,但 lab ⾥这种“时间管理导向”的⽂
化,让不喜欢刻意管理时间的我,很难适应。有⼀次我甚⾄吐槽,写这种周报是“⾎汗⼯⼚”⾏
为……
其实这个周报制度,是有不少好处的,有助于⾃⼰梳理⼯作进度、总结⼯作效率。另外周报⾥
第2部分“职业发展”,要求列出近期的职业⽬标(计划去哪实习,或者何时开始求职),⿎励
⼤家思考当下的⼯作对⾃⼰短期、⻓期职业规划是否有利,也很有意义。
只是我个⼈对周报的感受,更多还是负⾯的。这也反映了在某种程度上,我和 lab 的⽂化不太
搭吧……
代码质量
在不少互联⽹公司,都有对代码质量严格把关的机制。⽐如变量命名要遵循⼀定的标准,每个
⽅法超过⼏⼗⾏要拆开;再⽐如有完善的 version control 系统,⼀段代码需要跑通测试、经
过多⼈审核通过,才能部署使⽤。
但在很多实验室,⼤家写码普遍⽐较随性(如果你看过或⽤过 AI ⽅⾯论⽂对应的 GitHub 代
码库,可能对此会有同感)。如果是⾃⼰⼀时⽤,那没有问题;⼀旦是需要反复跑的,或者是
需要别⼈合作的代码,随意写码的习惯就会带来问题。
4⽉的时候,我的 mentor 要求我在他写好的 pipeline ⾥加⼏个模块,跑⼀系列新实验。然
⽽,在这个代码框架下,我连加⼀个 baseline 都⾮常困难。⼤致来说:
各个⽅法之间的关系错综复杂,如果出了问题很难 debug;
⼀个⽅法的输⼊,有时应是 pandas DataFrame,有时应是 PyTorch tensor,如果是
DataFrame,可能还需要含有特定名字的 column。这些都没有任何⽂档或者注释说明,
加上由于是 python 写的,⽆法直接知道每个变量是什么样的数据结构;
⼀部分变量名写得不清楚,甚⾄可能有误导性,⽐如有个叫 “input_file” 的变量,实际代
表的是 output ⽂件。
我和mentor反映了这套代码使⽤起来⽐较困难,他却好像不理解我的处境,觉得改这套代码是
很简单的事。
推荐系统⼩组⾥只有我们2个搞技术的,我⾃⼰说不动他,也找不到其他⼈可以帮忙;在产出
实验数据的压⼒下,我只能违反他的意愿,⾃⼰从头写了⼀套跑实验的 pipeline,从处理数
据,到搭建模型,再到 train 和 test,最后可视化结果。
这样的好处是,我对代码的逻辑有完全的掌控,⼀来出了 bug 更容易 debug,⼆来如果要修
改代码实现新功能,也能更快上⼿,灵活了很多。
当然,写⾃⼰的⻛险就是:我的代码相⽐原来别⼈写过的,可能有我注意不到的问题,或者代
码的⾏为会有细微的、难以预测的差异,解决不好的话⼀样会卡进度。
果然,我的代码也出了问题。我犯了个低级错误,把 test set 当成 validation set ⽤;但这
还是件⼩事,要命的是,我的 mentor 说,相⽐他花了很久搭好的 pipeline,我的跑实验代码
“正确性尚未验证”,他就⽆法完全信服我跑出来的数据。这⼀点,后来直到我离职都没完全解
决。
归根结底,软件架构这东⻄是需要⼀个⽜⼈来搭建的,合作者去使⽤或加⼊模块应该是⼀件轻
松的事情,不⽤管 pipeline ⾥其他的部分。但我在 lab ⾥的体验,就是处于与此相反的境
地,于是引出了⼀些麻烦。
结语
这篇⽂章吐槽了很多,并不是说这次科研 project 的体验不好。实际上这是⼀次很充实的经历
——探索未知课题的过程有很多乐趣,我的 mentor 和导师也很关⼼我,在技术上给了我很多
指导,我⾮常感谢这次难得的锻炼机会。但我希望能总结⼀下感受不那么好的地⽅,希望⾃
⼰,以及处在 AI ⾏业的读者你,可以从中学到⼀些道理~
萌屋作者:Jazon
来⾃南京,斯坦福MSCS(计算机硕⼠)在读最年轻的中国⼈,预计2022年毕业。爱安静地探
索宇宙的奥秘,也爱和朋友桌游、运动。梦想养猫,花花与三猫的视频平均每个看过20+遍。相
信AI虽然有趣,但短期内在美国职场⽣存,还是要靠丰富的开发技能。
作品推荐
1. ⼈在斯坦福,刚上CS224n
2. 谢撩,⼈在斯坦福打SoTA
后台回复关键词【⼊群】
加⼊卖萌屋NLP/IR/Rec与求职讨论群
后台回复关键词【顶会】
获取ACL、CIKM等各⼤顶会论⽂集!
若被制裁,中国AI会雪崩吗?
夕⼩瑶的卖萌屋
微信扫⼀扫
关注该公众号
Jazon 2021-09-01 12:05
原创
夕⼩瑶的卖萌屋