想来自己已经有段时间没有写学术文章了,主要还是因为这一年多都被“三次元事务”各种缠身,课设、考研、毕设……当然我也不是说这就是个坏事,相反的是,经过这一年多红军长征般的战略转移,我的人生再次拥有了比肩当年初中时的风采的可能。

还记得当时初踏入东秦、初踏入物联网时可是伴随着一场“血雨腥风”的。翻一翻我空间最早的几篇日志里可以足以一瞥:[坑]关于开设物联网专业之有所想、【专业文】你好,Cyber Physical Systems、 新域召歌(物联网专业向) 等等~当时我的认识还是非常粗浅的,如果真有哪位较真去把当时的文章研究个透再指出其中哪里哪里的错误的话,还望大大手下留情。嘛,这次就算延续传统吧,作为还没正经步入生物学研究的新人,我就自己所知的计算机与生物学的一些现状与问题,谈谈自己的看法。和以往不同,这篇文章中的物联网已经不是我以往、传统意义上的工程名词,而是指代数据挖掘、人工智能等技术与理论。高屋建瓴地,我把我的想法浓缩为几个观点,方便各位更直接把握我的意思。

 

一、计算机以及信息技术在生物学以及自然科学中的应用严重不充分。

我曾经这么说过:有多少非计算机专业的研究人员,把计算机并没有当作“计算机”,而是当作大“计算器”在使用?计算机发展到当下,已经不仅仅是个21寸32位真彩色LED屏幕——计算器了,虽然还只是一点苗头,但是相信任何一个IT界的研究人员都不会去质疑计算机的“智力”潜力。也就是说,计算机是一个可以“自己思考”“自己决定去做什么”的东西了;如果还像以前,什么东西都是人告诉它第一步做什么,第二步再做什么,只会限制计算机那强大得略带一点可怕的能力。

以前,我们设计出一个数学模型(说白了就是一堆方程),然后输入到电脑里,让它帮我们去算。如果遇到一些复杂的问题(比如某些没有解析解的微分方程),人自己算不来(当然计算机也不会了),于是人就对计算机说:反正你算的速度比我快,那就0.1,0.2地一个一个往里面代入吧——这就是所谓的数值解。计算机也劳苦功高,我们因此解决——或者大概解决——了很多以往束手无策的问题。人们对此非常满意,因为以前拿算盘要算好几月的活儿,计算机几秒就解决了,这种舒适感从计算机发明出现一直持续到大约上个世纪90年代左右。

不过随着强人工智能、数据挖掘的出现与成熟,计算机的“智力”开始从level 1升级到了level 2,计算机逐渐展现出一种“说点基本的,剩下的我知道该怎么做”的能力。同样依赖于计算机那远超于人的计算速度,从尿不湿与啤酒开始,计算机又一次让人们刮目相看。

但是能让计算机展现出这种能力,目前主要还只是IT界的科学家与工程师能做到,其他专业的研究者顶多还只是把IT科学家做好成型的东西拿来借用一下。这几十年计算机的发展是一个略带畸变的过程:计算机不断从物理、生物、经济甚至哲学那里吸取各种各样的成果,来发展自己——退火算法、遗传算法、奥坎姆剃刀等等;而与之相对应的呢?其他学科大多只能干瞪眼地看着计算机在那如火如荼地改变世界,自己只能拣点计算机玩剩下的东西用用。生物(对计算机):听说你那有个啥模式匹配挺好使的?我这DNA,蛋白质你看能用上么?另一个让我觉得略带讽刺的是:计算机的发展历史不过百年,但是它就已经发展出了一整套恢弘庞杂的数学体系——离散数学,几乎和以前的连续数学分庭抗礼。姑且不论连续数学是人们上千年积淀下来的东西,生物的历史包含博物学也有几百年了吧?发展进度就这么被计算机反超掉就没一点想法么?

物理学咱就先不去管他了,等那群天(er)才(huo)玩他们的弦论去(玩笑);生物你可不能再这么沉沦下去了啊~还有这么多癌症病人的生命等着你去拯救,还有这么多人指望你能让他们长生不老呢。也大概因为这样,我才来到生物学——这片或许还曾是祖上封地的地方。

 

二、从计算生物学的角度,我们急需要求计算机能从当下数据挖掘(KDD)等技术与理论中进一步进化出一种“计算过程中的知识发现(KDC)”方法。

但是这里有一个问题,在最开始计算机抛弃了模拟计算机而选择了离散模式就存在的一个问题:计算机的世界和我们的现实世界并不太一样。计算机的世界只存在0和1,而现实世界在0和1之间还存在和1到正无穷之间一样多的数。在图形化界面出来之前,懂怎么跟计算机打交道简直是一个人最闪亮的胸章。就算现在在一代又一代的程序员努力下,三岁小孩也能把iPad玩的很溜,但如果没有经过几年的辛苦钻研,想真正让计算机为我所用还是有一定难度的。

虽然我自己时不时或被褒或被讽而被盖了一个“大神”的高帽子,但是我一直很清楚自己没有什么能拿来趾高气昂的资本,之所以我考研时期能静下来去补高数现代,就是因为我后来学了实变泛函、微分流形后,才认识到数学的宏伟以及自己的愚昧。和那些相比,高数真是太简单了,而这么简单的你都不会,你还能有啥借口?同样地,我现在看那些机器学习和人工智能的专业书仍然很头大:WTF,你到底在说些什么?!

就算不去管计算机内部的“异次元”,但从计算机的输入与输出来看,现在的计算机想要更广泛地应用到现实以及现实的研究上确实存在一些困难。拿数据挖掘来说吧,数据挖掘(Data Mining)最原始是指:数据库中的知识发现(KDD: Knownledge Discovery in Database),对象从一开始就确定了:数据库。我们现在很火的“大数据”也没有逃离这个圈——哪怕数据库的结构我们已经升级了好几代。

但是现实不仅仅是数据啊,可以说,“数据”只是对现实世界的一种静态描述——然而这个世界却是动态的。一个数据变成另外一个数据这个过程我们几乎还没有涉及——因为暂时还没法涉及。我们现在已经对于如何找出一堆数据中的某些关键信息非常熟练了,但是对于一次又一次的一堆数据在变成另外一堆数据的过程集合中如何找出我们感兴趣的方法还知之甚少,这其实就是计算过程中的知识发现(KDC: Knownledge Discovery in Calculation),需要提醒的是,和KDD不同,这个概念是我自己生造的。

现在计算生物学(Computational Biology)的一个窘境是:当我们雄心勃勃地想在计算机中再现一个生命过程时,为了让结果使每个人都信服,我们决定从模拟每一个原子、每一个生化反应开始模拟生命。但是遗憾的是,这种从头计算(ab initio)的计算量太大,已经完全超出了我们现在的计算机的计算能力。但是同时我们也发现,生命的很多活动过程是重复或者相似的。以前是我们人来将这些相似重复的过程抽象化、模块化,用一个又一个经验公式、抽象模型代替,但是这种代替就有人的主观性,就会有人对其客观的充分性提出质疑。那么,如果让计算机来完成这些总结与抽象过程呢?由计算机来判断:这个过程我之前算过,这次直接代结果就好。而不必再死脑筋又算一遍。这种知识发现是在连续的计算过程中产生的,而不是数据库。

进一步的细节设计,我还只有一些粗浅不成系统的想法,暂时就不多说了。

 

三、生物学的实验也应该从生物系统的开放性入手,探索出一种可以与实验对象进行“交互”的实验方法乃至体系。用编程的话来说就是,再优秀的程序员,面对一个无法DEBUG的程序也无可奈何。

现在生物学的那套研究方法其实从物理那学的,物理:我们想研究这个原子,可是就这样看不到里面的东西啊,怎么办?于是物理学家拿起那个原子这个上帝制作的本来很漂亮玻璃珠,狠狠地往地上一摔,嘣的一声,原子碎了,光鲜不再,可是物理学家却高兴了:噢噢!快看里面都有什么~!我们叫这个中子、这个质子吧~还有这个这个,就叫它电子好了~\(^o^)/

其实我是有点反感这种实验手法的,因为这破坏了对象原本的样子,我们很难就能说我们研究的这些玻璃渣的光泽就是原来那个漂亮原子玻璃珠的光泽。其实量子理论得出了比我这个更强的结论:只要我们看一眼原子都会对原子产生不可逆的影响╮(╯_╰)╭。但是物理学的研究对象决定了这是现在唯一可能、或者说是一个必然的过程。

但是生物就没必要跟着物理学坏了(我这么一路黑物理真的好吗),生物的研究手段大多还是从研究对象那取下一小块来观察与研究。当然这也不难理解,培养皿要比土壤、小白鼠的体内简单清晰太多。但是这样还是窥一斑难见全豹,所以当下生物学的论文基本都是集中在研究某个基因、某个分子、某个局部,我们对于生物这个系统知道的并不多——或者说,我们知道的这些碎片还不能拼成一幅完整的图像。这也是系统生物学(Systems Biology)被提出来的原因。

那么,既然我们要“系统地”研究生物,理论是一方面,另一方面也要求实验能做到“系统地”实验一个生命对象。想来现在我们对待一个完整的生命——在不把它四分五裂的情况下——也只能称称重,瞧瞧特征这种最简单的事。What if,我们能像计算机那样,在一个万行的程序中的任意一个行设置一个断点、随便一个内存地址设置一个钩子,来一段说看就能看的变量取值?What if,我们能像计算机那样,看这个变量的数据不爽,就直接改掉,然后程序没事似的继续运行呢?所有IT界的人都知道,一个优秀的程序员、工程师、甚至就是世界顶级的黑客,不在于他程序写得有多溜,而是他有一个得心应手的DEBUG工具和对程序各种运行状态的敏锐感知。

然而目前我们手上能用的工具确实挺少的,而且这种工具的改进上往往不是生物的问题——而是物理等其他领域的问题。比一个如吧,动物那种活蹦乱跳的生物就不说了,假如我想在不破坏一个叶子的情况下,检测甚至干涉叶子细胞内部的某种信号分子的浓度。我应该怎么办?当然了,我们也不是完全带着镣铐跳舞,同位素?MRI?或者设计一些载体对叶肉细胞来个“微创”手术?……嘛,都说了不一定是生物学问题了~

 

四、现在生物学的研究关键应该在RNA,而不是各种蛋白质与生物小分子。这就好比你知道硬盘(DNA)的内容后应该去研究内存(RNA),而不是直接去研究CPU(蛋白质与生物小分子)如何去实现功能。

这个思想也是我很早就有了的,曾经我们以为知道全部DNA序列我们人类就是上帝了,可惜上帝知道后很快就两耳光扇了过来,啪啪~还记得当年曾经为“生命过程中,是蛋白质还是DNA更为重要”争得面红耳赤。不过现在看来或许这两种观点都错了,最关键的或许既不是蛋白质也不是DNA,而是RNA。尤其是逆转录RNA的出现更如同一刹惊雷,RNA在中心法则中的地位也一升再升,现在讨论DNA无非也就是我的测序速度有多么多么快,而越来越多人开始研究RNA,更有假说就认为生命最初的形式应该是由磷脂双分子层包裹RNA,可以自行复制的系统。

计算机的情况是,计算机整个系统的关键是CPU和内存——硬盘是用来放内存暂时不用的东西的。最简单的计算机——单片机——不就是只有CPU和内存,然后给个时钟信号就能开始跑么~无论是指令内容还是数据内容都是放在内存中的,CPU负责执行这些指令和处理这些数据,然后进一步地再和其他外设交流。

生物学的状况呢?我们知道生物过程中是靠各种蛋白质(以及一些RNA)来实现功能的,所以一定要对比的话,那么蛋白质就是CPU了(感觉有点奇怪?别急~),而蛋白质是靠RNA翻译过来的,RNA有的翻译了,有的没翻译(虽然我们目前还不懂这些不翻译的RNA是干嘛的),但是总而言之,RNA是一个原始资源池的角色,所以RNA应该对应内存;那么进一步地,作为存储整个细胞遗传信息的DNA,就是硬盘了。

要说CPU有什么特别的话,那就是指令集,它负责怎么去理解和执行内存中的指令和数据。那蛋白质的“指令集”是什么?乍看一下似乎并没有这种东西,但是如果再仔细想想,蛋白质本身是靠什么组装的?又是靠什么实现功能的?不就是那各种各样的生化反应么?生化反应我们可以用计算化学、量子理论那描述——所以答案也就出来了:计算化学原理就是生命这个“计算机”中的CPU(蛋白质)的“指令集”。

计算化学已经算一个比较成熟完整的学科了,但是蛋白质和各种生物活性分子五花八门的反应场所和反应过程让我们手忙脚乱。我们也不应该这么做,我认为我们更应该先把RNA——也就是内存的工作过程研究清楚,硬盘(DNA)的全部数据是这些,那么内存(RNA)为什么要读(转录)这一部分,CPU为什么又只取(翻译)这一部分呢?计算机的经验告诉我,不是CPU想这么干,而是内存告诉它这么干的。

 

五、展望

说了这么多,最后我们不妨来展望一下未来的生物学——或者“自私”一点,生物信息学吧。我的想象中,未来生物学信息实验室的一天应该是这样的:

早上我吃过早餐,端着一杯咖啡来到实验室(快醒醒,码农早上怎么可能有咖啡);此时位于实验箱中心顶部的荧光灯也开始逐渐变亮,中心的几株拟南芥也接收到信号开始了新的一天的光合作用。而它们周围的一切——光照、温度、湿度以及二氧化碳浓度等等传感器一直昼夜不停地收集着数据;不仅如此,整个实验箱其实处在一个核磁共振仪的中心,每隔一段时间MRI就会启动对拟南芥内部的一些特定活性分子进行跟踪统计分析,于此同时,高倍率的显微镜在计算机定位的辅助下精确地对拟南芥的多处细胞进行着观察。

而在这个试验箱的对面,几百个至强处理器正在全力协同计算,它们将从试验箱收集来的新数据源源不断地纳入到正在运行的实时计算模型中,以修正模拟的误差,并根据新的现实数据预测出植物的未来变化。而这一切又被另外一组计算核心全部记录在案,并对这些看似杂乱无章的计算进行分析归纳,试图总结出一些规律,这些规律不仅能出paper,还能让模拟计算中心加速和优化自己的模拟计算。这两队人马分工明确,高度协同,共同使用同一个工作站的所有计算资源(好吧,这里我是在说YARN和Storm)

我查阅了一下昨晚的数据记录,嗯,没有问题,开始下一步实验。试验箱在我按下执行键后,一个探头从实验箱内部的墙壁伸出来,对准一片叶子,噗嗤一下喷出一阵水雾,这可不是普通的水雾,里面包含着我们前几天设计的生物活性分子,它在经过一些修饰后,能被植物细胞吸收,然后进入植物体内并开始工作——就像病毒,当然了,我们这是好病毒。

噢,午饭时间了(这么快?)。我关掉了正在不断更新实验状态曲线和预测曲线的监视器,不过不用担心,我的手机和电脑都能连接到计算中心。实验的任何关键情况都可以实时推送到组员的终端上,就算我们在地球的另一端参加某个会(du)议(jia),我们也能对实验进行监测和干预。