文 | 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等各大顶会论文集!

我在斯坦福做科研的碎碎念相关推荐

  1. 10月碎碎念--谈如何做选择

    总第175篇/张俊红 每月一篇的碎碎念又来了.这一篇谈谈『如何做选择』.我们几乎无时无刻不在做选择,最简单的每天早上穿什么.中午吃什么?高中的学文科还是学理科?大学选什么专业?毕业后是考研还是直接工作 ...

  2. 参加海峡两岸城市地理信息系统论坛2010 年会(一张图、规划信息化和空间句法的碎碎念)...

    上周末去清华建筑学院开了个会,叫做海峡两岸城市地理信息系统论坛2010 年会,主题很大,但是内容比较集中一些,就是围绕着GIS与城市规划.一天下来听了20个报告,挺佩服主办方的时间控制,这么密集的报告 ...

  3. 马腾宇的AI学术历程:做科研要考虑长期的影响力

    作者:贾伟 马腾宇,本科毕业于清华姚班,博士毕业于普林斯顿大学,如今年仅31岁却已在国际顶级会议和期刊上发表高质量论文40多篇,并获得2018 ACM博士论文奖荣誉奖,NeuRIPS 2016最佳学生 ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    2019独角兽企业重金招聘Python工程师标准>>> 去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5 ...

  5. 在阿里做科研是一种什么感受?

    杨净 发自 凹非寺  量子位 报道 | 公众号 QbitAI 9月,两种科学技术的推进方式,都获得了嘉奖. 96岁的老一辈科学家王振义,荣膺2020年未来科学大奖,老先生接到电话的直接回答是:该奖励年 ...

  6. cd返回上一 git_PHP项目中应用CI/CD的碎碎恋!

    点击上方"架构艺术",每日干货! 作者:晶晶 原文链接:https://blog.jjonline.cn/linux/239.html DevOps漫谈:谈一谈在PHP项目如何应用 ...

  7. PMcaff写给大家的年终碎碎念 PMcaff | 记录

    今天是大年三十,2014马上就要结束了,送上新春祝福之前,碎碎念的小希有话想跟大家说. 瞧这一年 小米在硬件行业继续如鱼得水,科幻片里的智能家居生慢慢变成生活. 阿里巴巴在纳克达斯扬眉吐气了一把,一夜 ...

  8. 数据结构碎碎念(一)

    碎碎念 在大一学习C语言的时候,举过一个用栈实现的括号匹配算法,当时觉得很难,不过现在回顾起来,这个算法也算是比较简单的一个关于栈的应用了.而现在所常见的算法问题也都是什么中缀表达式转后缀表达式,双栈 ...

  9. 花 1 个月收入购买一份保险之后,我的一点碎碎念!

    大家好,我是小詹,一个长得有些清秀的美男子.今天想跟大家聊一聊保险这件事.(纯属碎碎念,不要担心是广告或者推销哈哈哈) 去年年底开始有给自己购买一份保险的想法,最近经过几番了解对比,终于狠心花了一个月 ...

最新文章

  1. (转)一个带自定义分页,排序功能的DATAGRID控件(公开源码)
  2. 命令行使用.so文件内的函数_如何使用SFC命令行工具修复Windows 10系统文件
  3. 基本概念—回归、分类、聚类
  4. NeHe OpenGL第十九课:粒子系统
  5. stats | 线性回归(四)——显著性检验和模型评价
  6. pandas读取csv文件数据并对指定字段使用matplotlib画折线图
  7. python解释器怎么添加_Python解释器安装与环境变量添加
  8. 怎样学好模拟集成电路设计?
  9. xmpp 即时通讯
  10. 左程云算法 哈希函数
  11. 开闭鸿蒙都只为风味情浓,[红楼梦引子]开辟鸿蒙, 谁为情种? 都只为风月情浓。 趁着...
  12. c++ zlib加密压缩文件详细介绍与代码演示
  13. mysql 查询随机10条数据 (转载)
  14. License Code of Jigloo序列号、注册码,可能是通用的呵呵
  15. java坦克大战爆炸效果_Java极致毁童年系列、你们火星的坦克大战这样的吧
  16. 【Java】JDK安装在D盘,环境变量如何配置?
  17. 基于winform(C#)的飞鸟小游戏
  18. docker+mesos+marathon
  19. 图像处理-特征融合:相加、拼接、Attention
  20. 电子计算机房用电负荷标准,8.1 供配电_数据中心设计规范 GB50174-2017_消防规范网_119消防考试网...

热门文章

  1. 在程序中设置infopath中的整型等域值时出错解决方法
  2. 困扰多年的PCB散热问题终于可以解决了!
  3. 噪声控制简史,以及几个简单的声学概念
  4. 单精度浮点数与十六进制转换
  5. 看printk引发的一点思考
  6. java ognl表达式_java -------ognl表达式入门
  7. python中split函数_python strip()函数和Split函数的用法总结
  8. python如何读取字典的关键字_python提取字典key列表的方法
  9. LeetCode 2049. 统计最高分的节点数目(DFS)
  10. Visual Studio Code C++配置文件