FeNNOmix Lab

FeNNOmix Lab

Computing Technologies for Multi-Dimensional Proteomics

致实验室成立

我本来不擅长写东西,不过我很喜欢我博士导师贺思敏研究员的 《致同学们》, 所以这里照虎画猫,也写一个类似的,以表达我自己的科研理念。 在西湖大学攻下一个博士学位需要4-5年,这是人生中的黄金时期。 所以同学们必须要看看跟我的理念是否契合,然后再做出选择,避免浪费自己的时间和宝贵精力。 既然做出了选择,就不要后悔,咱们一起攻克难题。“我不是你最好的选择,但是肯定不是最差的那个”。

实验室的主要研究方向是结合AI开发出新颖且有效的计算蛋白质和糖蛋白质等多维蛋白质组学搜索引擎技术, 最后形成以软件为核心、AI为驱动的完整的多维蛋白质组学软件工具集,让我们的算法或AI模型真正落地。

FeNNOmix的第一个理念:软件和算法一样重要

在AI领域,我最喜欢的工作其实是PyTorch(也包括其他AI框架), 它定义了AI的核心数据结构Tensor和梯度下降接口Autograd,加上优秀的软件设计, 使得我们用户可以只用数十行到数百行代码就能够编写和训练出可运行的AI模型, 极大提高了我们从idea到model的生产力,从而造就了AI for Science的繁荣。 虽然很多人普遍认为做技术相关的科学研究应该注重论文,但我认为对于我们科研软件开发团队来说,论文是软件的副产品, 一款好的软件能够驱动很多好工作和新idea,论文是自然水到渠成的。 另外,很多AI for Science模型的生命周期就是一篇论文,从Science的角度讲这当然没问题。 然而,在论文数量爆炸的今天,一篇算法的论文估计不到半年就被大部分人遗忘了,别人甚至都“看不见你”。 只有实打实的好用的工具,才会在Science里推广,提高别人的生产力,从而真正达到“for Science”的目的。

我是软件工程专业出身的,在本科阶段,我觉得算法和机器学习等比软件工程和软件架构更吸引人, 而且对于学习来说更加容易吸收。但是软件工程的思维是非常依赖经验的,很难通过课本锻炼, 所以我们更容易学习软件专业的“科学”部分,而难以锻炼自己的“工程技术”部分。 我在计算所pFind课题组攻读博士学位期间,通过开发pGlyco系列软件,切身感受到了软件“工程”的必要性。 在糖蛋白质搜索引擎pGlyco开发早期(2013年前后),我们用了三个多月的时间进行C++核心算法开发并得到了可运行的demo, 之后更多的时间是在不停地对pGlyco的各个环节进行优化和添加不同的feature等,前前后后花了三年左右。 随着时间的推移,程序越来越臃肿,终于有一天,当我想到了一个可能更好的算法代替核心算法的时候, 我发现已经很难在pGlyco内部完成算法的替换了,只好选择重构。正所谓“(假)敏捷开发一时爽,软件重构火葬场”, 由于博士毕业压力太大,重构的工作还是无疾而终了,新算法最后只好在pGlyco的一份拷贝上进行开发。 因为小小的一点算法提升,导致我现在必须维护两套代码,而且很多代码是一样的。 这会导致一个bug要fix两次,万一fix了一个而忘记fix另外一个,长年累月下来,工作量就不仅是双倍了。 所以对于自己的软件而言,“工程”的目的就是提升自己的生产力,“make life easier”。

因此,博士毕业后,我就更加关注软件模块和接口的设计,以及工具集的开发,避免pGlyco开发过程中的问题再次发生。 在博士后阶段,这个理念已经成熟,所以我开发的软件包AlphaBase、AlphaRaw和AlphaPeptDeep等基础组件, 在模块和接口上都是我花了更多的时间精力精心设计的,现在已经为Mann Lab的其他软件开发提供了很好的基础。

Python的出现加上PyTorch的完善使算法和AI模型的开发变得非常简单, 我最快的记录是花了不到四天的时间从头写完一个领域内别人没做过的模型并且完成训练和测试。 你可以花四天,别人可能花的时间更短,这时候算法或者AI模型已经不再是一个团队或者个人的核心竞争力了, 因为世界上总会出现某方面比我们聪明的人在算法和AI的某些角度超越我们。 支持我们只花四天完成模型开发的软件包和系统,才是我们的核心竞争力。

然而,与需求驱动的工业界软件开发不同,科研软件的开发是idea驱动的,需要大量的试错, 一开始没必要过度地工程化,敏捷开发是避免不了的。 学生们可以在研究生前期得到软件工程方面的学习和锻炼,并且在实际项目中实践和巩固。 为了不给自己和其他成员造成太大压力,我们自己也在探索学术软件的开发之道, 目前实验室计划的敏捷开发和文章发表流程将是:

  1. 提出针对科学问题的idea;
  2. 进行算法或AI模型的设计;
  3. 试错与调参,直到成功;
  4. 早期重构与软件模块设计;
  5. 自动化的单元测试、持续集成CI和持续部署CD;
  6. 软件的GUI和CLI设计;
  7. 撰写软件文档、发表文章;
  8. 面向用户的软件维护与提升。

我们当年开发一个完整软件需要三到五年时间,对于博士来说压力太大。所以实验室也会开始关注我们的“软件交付”能力。 我会推动我自己和实验室其他高年级人员开发一些基础工具或者框架性软件,结合Python环境,希望能够将1-3步的时间缩短到一年甚至数个月以内。 对于低年级的博士生,我也会自己提前尝试一些idea,有眉目以后再交给学生继续完成。不过我希望博士后和高年级的博士生能够具备独立构思课题的能力。 当算法被验证可行的时候,为了保证4-5步的软件质量,我们会帮助同学们完成软件早期的软件模块设计和进行代码的code review, 从而帮助同学们顺利完成完整的软件开发,同学们自己也可以完成接近工业级别软件开发过程的训练。 一旦算法被证明有效,在重构过程中,我们也支持学生用C/C++/Rust/C#等高性能语言完成核心模块,锻炼自己底层语言的开发能力。 当你为你宝贵的idea高质量地完成了1-6步之后,实验室也有义务帮这个软件和开发者完成高质量的论文。 有了高质量的软件,你可以去跟用户打交道,了解用户到底需要什么,理解生物学问题和进一步的AI for Science的需求, 这有可能成为你下一个工作的基础。我个人觉得,当前“AI for 蛋白质组学Science”的壁垒不在AI,而在对Science问题的理解程度, 所以对外交流可以帮助我们学习到更多Science纬度的知识,也能够与Science专家建立联系,向TA们学习。

综上所述,软件工程能够通过用“工程”来提升自己的生产力,用“软件”来提升用户的生产力, 最后潜移默化地提升或者改变我们的领域。高质量的软件工作从短期看好像我们发表文章不多, 但是从长远考虑,它能成为我们真正的“代表作”,发表更多文章。

FeNNOmix的第二个理念:开源

开源并不是把代码放到GitHub上就完事了,我之前也想试用很多文章的所谓的开源代码, 最后发现根本没法调用,只好放弃。大部分CLI能用已经很好了,这跟没有开源没啥区别。 开源的目标是让其他的开发者也能用上自己的代码,所以代码的质量、 代码接口的易用性和代码的接口文档等才是开源的重点。

实际上,如果我们只面向用户进行软件开发,那开不开源其实不重要,用户更在意软件的易用性和其他方面的性能。 所以我觉得开源蛋白质组学的最大意义在于标准化, 包括数据的标准化和软件接口的标准化。数据的标准化包括很多方面,比如质谱数据的高效存储、质谱数据的标注等等。 我们不仅要提供数据和接口的标准,还需要提供符合标准的开源软件包,使用户更容易使用我们的标准。 标准化是一个社区行为,所以需要通过一个开源社区进行推动。如果不开源,标准化的工作将无从谈起。

开源对于学生也是有益处的。对于想继续深造的学生而言,就我这几年的了解,不少计算生物学实验室老板在招生上除了关注paper之外, 也会看看学生的GitHub仓库。代码的质量会让实验室老板看出你做事的态度,可读性差的代码估计会让其产生负面印象。 同理,对于想去工业界的同学们,良好的开源代码能更容易敲开大厂小厂的大门。 我记得某个同学当年喜欢写博客,当时面试官(还是猎头)觉得他博客的前端设计地非常好,马上就进入大厂工作了。 学生在单元测试、CI和CD方面的经验,也会成为你的加分项,而且大厂有更加严格的软件开发标准。 为了能够让别人读懂,开源反而能够逼迫我们自己设计出更好的模块,写出更好的代码和软件。

FeNNOmix的第三个理念:交叉

之前提过,我认为“AI for 蛋白质组学Science”的重点应该是Science上, 而Science for AI的关键就在于输出领域知识并产出有意义的Scientific Data, 那么同时掌握了两方面技术和知识的“两栖学者”可能是未来破局的主力。 所以我们实验室也会根据这个理念建立一个小型的湿实验+数据分析的团队,结合我们开发的软件,实现“干和湿”的有效交叉。 所以我们也欢迎湿实验成员加入(博后、博士、科研助理和访问学者)。 西湖大学平台这边配有最新的质谱仪,希望能够助力“两栖学者”的培养。

主动学习不同领域的知识也是交叉的一部分。几年前,蛋白质组学的主要研究重点还是在癌症等疾病biomarker的发现上; 近几年,基于质谱的蛋白质组学在小分子药物设计、抗体药设计和免疫治疗等方面也有了一定的突破。 无论是biomarker发现还是药物设计,AI for 蛋白质组学在这些方向应该扮演什么样的角色;或者蛋白质组学应该提供什么样的数据, 才能让AI做到之前无法做到的事情,我们尚未找到这个这个突破口。 在AI技术储备方面,我感觉我们已经准备好了;但是在知识储备或者针对科学问题的想象力方面,我们还没有准备好。 因此,我们应该主动学习多方面的知识,拓宽我们的想象空间。 我记得有人说过一句话,大致意思是“感谢深度学习把我们小的计算生物学实验室和大的计算实验室拉到了同一个水平线”,我觉得不无道理。 几年前我们做蛋白质搜索引擎的时候,主要精力都是集中在设计数据结构和组合算法等传统的计算专业问题上,最后在几个数据集上大致就能测试出来我们算法性能如何。 有了AI,尤其是PyTorch等深度学习基础框架和一些训练算法成熟后,很高兴能看到不同专业背景的研究人员都在为AI贡献自己的力量。 所以现在我们更需要的是科学问题的发现、数据收集或产出、根据领域知识的AI模型设计、完成模型训练和编写软件等综合能力。 最后,实验室更感兴趣的是,有了AI这个工具,我们如何设计组合算法并且优化软件,使计算蛋白质组学更上一个台阶。

最后说一下自己,“想idea、写代码、编软件”依然是我最喜欢做的事情。我很羡慕我的博后老板Matthias Mann, 尽管要管理三十多个博士生+博士后的实验室,他每天半夜都会尽量为自己预留一两个小时的时间来练习编程。 我自己也有类似的期望,“无论何时,希望自己依然能够战斗在一线”。

Website design: Wen-Feng Zeng; Copyright 2024 FeNNOmix (Zeng) Lab at Westlake University