我在斯坦福做科研的碎碎念

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...

笔记整理 | 李爽,天津大学链接:http://hfbix45521e79b0484907sowxo0fubpp9b6xwx.fiiz.eds.tju.edu.cn/stamp/stamp.jsp?tp&arnumber9359364动机知识图谱 (KG) 嵌入旨在研究嵌入表示以保留 KG 的固有结构。图神经网络(GNN)作为一种有效的图表示技术&…

分布式队列编程优化篇

“分布式队列编程”是一个系列文,之前我们已经发布了《分布式队列编程模型、实战》,主要剖析了分布式队列编程模型的需求来源、定义、结构以及其变化多样性;根据作者在新美大实际工作经验,给出了队列式编程在分布式环境下的一些具…

LeetCode 443. 压缩字符串(双指针)

1. 题目 给定一组字符,使用原地算法将其压缩。 压缩后的长度必须始终小于或等于原数组长度。 数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。 在完成原地修改输入数组后,返回数组的新长度。 进阶: 你能…

程序员在体制内的工作与生活是怎样的?

文 | 森林鱼(转载于公众号:森林鱼的时光)前言这篇文章原本是要在公众号上更新的,但考虑到修改问题,还是放在了这边。公众号那边会放一个最终相对完整的版本,日常更新与整理的话还是会在这边。主要是想尽量客…

开源开放 | 一个用于文言文实体识别与关系抽取等任务的开源数据集C-CLUE(CCKS2021)...

OpenKG地址:http://openkg.cn/dataset/c-clueGitHub地址:https://github.com/jizijing/C-CLUE网站地址:http://152.136.45.252:60002/pages/login.html开放许可协议:CC BY-SA 4.0 (署名相似共享)贡献者&…

谷歌:一篇论文,让研究者吃我三份安利

文 | 白鹡鸰想用Transformer做CV编 | 小轶想用Transformer做NLP前言计算机视觉、机器学习,这两个词会让你想到什么?相信绝大多数人第一反应都是CNN,而持续关注这些领域发展的人,则会进一步联想到近几年大火的Transformer&#xff…

LeetCode 290. 单词规律(哈希)

1. 题目 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern "abba&q…

开源开放 | 一个用于知识驱动的零样本学习研究的开源数据集KZSL(CCKS2021)

OpenKG地址:http://openkg.cn/dataset/k-zslGitHub地址:https://github.com/China-UK-ZSL/Resources_for_KZSL开放许可协议:CC BY-SA 4.0 (署名相似共享)贡献者:浙江大学(耿玉霞、陈卓、陈华钧)&#xff0c…

LeetCode 1022. 从根到叶的二进制数之和(递归)

1. 题目 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一…

别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!

文 | Yimin_饭煲编 | 炼丹学徒如果评选NLP圈的2020年度十大关键词,那么GPT-3(Language Models are Few shot Learners) 一定榜上有名。GPT-3庞大的参数量,优异的性能至今仍让圈内圈外人都津津乐道,而OpenAI发布的OpenAI API&#…

大数据:任务调度,手把手教你

大数据:任务调度https://blog.csdn.net/qq_43713049/article/details/116985497 文章目录 任务调度一、任务流调度的需求二、任务流调度的工具三、Oozie的简介四、Oozie的2种使用方式五、WorkFlow 与 Fork 和 Join六、SubFlow:子工作流七、定时调度的实现…

人脸识别 | 你的论文离CVPR , 还有多远?

最近,一则人脸识别安全性问题的新闻上了热搜。(图片来自网络)虽然让不少人产生了“人在家中坐,债从天上来”的担忧,但也不由感叹人脸识别的发展与普及。人脸识别发展至今,已经在众多领域中占领重要地位。这…

LeetCode 455. 分发饼干(贪心)

1. 题目 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺…

开源开放 | 高质量体育赛事摘要数据集SGSum(CCKS2021)

OpenKG地址:http://openkg.cn/dataset/sgsumGitHub:https://github.com/krystalan/SGSum开放许可协议:CC BY-SA 4.0 (署名相似共享)贡献者:苏州大学(王佳安、张汀依、瞿剑峰、李直旭&#xff09…

消息队列设计精要

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka&#x…

数学教育中的AI:NeurIPS’21 Workshop 欢迎投稿!

Workshop主页:https://mathai4ed.github.io数学推理是一种人类独特的智慧能力,也是人类在对科学和知识的探寻道路上不可缺少的基石。不过,数学学习通常是一项极具挑战性的过程,因为它依赖于指导者对学习内容的设计、教学和评估。从…

LeetCode 696. 计数二进制子串

1. 题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 : 输入: "00110011" 输出: 6 解释: 有6个子串具有相同数量…

论文浅尝 - ISWC2021 | 当知识图谱遇上零样本视觉问答

论文题目:Zero-shot Visual Question Answering using Knowledge Graph本文作者:陈卓(浙江大学)、陈矫彦(牛津大学)、耿玉霞(浙江大学)、Jeff Z. Pan(爱丁堡大学)、苑宗港(华为)、陈华钧(浙江大学)发表会议:ISWC 2021论文链接:htt…

Java 8系列之重新认识HashMap

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别&…

LeetCode 1042. 不邻接植花(图的数据结构)

1. 题目 有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。 paths[i] [x, y] 描述了花园 x 到花园 y 的双向路径。 另外,没有花园有 3 条以上的路径可以进入或者离开。 你需要为每个花园选择一种花,使得通…