第250章 绝境中的ResNet(求订阅求月票)(1/2)
当天晚上。
芝加哥的暴风雪还在窗外肆虐,但以太动力会议室里的气氛,比外面的冰湖还要冷。
投影屏幕上,视频连线的信号有些波动,但这掩盖不了画面的触目惊心。
那是一张刚传过来的高清解剖照片。
原本应该是暗红色的恒河猴肝脏,此刻呈现出一种令人心悸的黑紫色,表面布满了点状的出血坏死灶,像是一块变质腐烂的淤肉。
那是死亡的颜色。
“这是典型的暴发性肝衰竭。”
屏幕那头,赵博士的声音沙哑得像是在砂纸上磨过,手里夹着的烟已经烧到了过滤嘴,但他毫无察觉,“林总,毒性太烈了。两只猴子从出现黄疸到死亡,不到十二个小时。
“我们的病理切片显示,肝小叶结构彻底崩塌。
“这是最高级别的DILI(药物性肝损伤),意味着AD-01在毒理学上已经被判了死刑。
“之前的体外细胞毒性实验用的是HepG2细胞系,缺乏完整的代谢酶谱,把这个致命的缺陷给漏掉了。”
会议室里死一般的寂静。
方雪若看着那张照片,脸色苍白地别过头去,本能地觉得有点恶心。
她不是科学家,但也很清楚这意味着什么——几十万美金的投入,数月以来的心血,克服重重压力开始的“东进战略”,此刻都变成了这张黑紫色的照片。
“奇怪……”
在一片绝望的死寂中,程新竹突然开口了。
她盯着手里的一叠药代动力学(PK)图表,手中的圆珠笔在纸上划得滋滋作响。
“怎么了?”林允宁看向她,期待着这位天才少女能给出些建议。
“你们看这张图。”
程新竹把图表推到桌子中间,指着两条曲线,“AD-01原药在猴子血液中的半衰期只有2小时,消失得非常快。但是,转氨酶(ALT/AST)飙升的峰值却出现在给药后的第6小时。
“这说明什么?说明杀人的不是AD-01本身,而是它的代谢产物。”
她抬起头,眼神锐利得像一把手术刀:
“肝脏里的P450酶系统试图代谢掉药物,结果把AD-01剪切成了某种强亲电性的活性中间体。这个中间体会无差别地攻击肝细胞内的蛋白,导致免疫系统对肝脏发动了自杀式攻击。
“这是代谢激活毒性。”
林允宁看着那张图表,眉头紧锁。
程新竹就是程新竹,很快就找到了原因。
然而,这个结论,比找不到原因更绝望。
药物在体内的代谢过程是个黑箱,要想通过修改分子结构来避开这个特定的代谢产物,需要合成成百上千种衍生物,然后一个个去试。
“也就是说,我们不光要找出这个中间体,还得重新设计药物分子结构?”
方雪若问,“要避开这个代谢陷阱,我们需要合成多少种新分子?一百种?一千种?还要一个个做动物实验?那得多少年?”
“运气好,一切顺利的话……”
赵博士在视频里苦笑,“两三年吧。”
孟筱兰等不了那么久。
以太动力的现金流也没法支持这么长时间庞大的开销。
林允宁站起身,走到落地窗前。
窗外是芝加哥冰冷的钢铁丛林。
常规路走不通,那就只能换条路。
“我们不用传统方法。”
林允宁转过身,目光如炬,“我们用算的。”
“算?”
程新竹和方雪若都愣了一下。
“对。P450酶的代谢本质上是量子化学反应,是电子的转移。”
林允宁指了指隔壁机房的方向,“我要升级Aether_StruMatch模块,加入基于深度残差网络(Res)的分子动力学模拟。我要让AI去模拟药物分子进入酶口袋后的每一个化学键断裂。
“我们不需要做实验,我们在硅基芯片上,把那一千种可能导致毒性的结构全部算出来,然后避开它们!”
……
半小时后,以太动力机房。
这里的噪音大得像是在飞机的起落架旁边。
之前投资的八百万美金购买数千张英伟达TesC870显卡,已经在巨大的机柜中安装好了。
几千个散热风扇全速运转,卷起的热浪让机房内的温度比外面高了十几度。
林允宁脱掉了外套,只穿了一件单薄的T恤,坐在终端机前。
他要搭建一个前所未有的深层神经网络,用来模拟微观层面的化学反应。
“在NIPS(神经信息处理系统大会)的时候,我和普林斯顿的李飞飞教授曾经有过一次谈话,提出了Res,也就是深度残差网络,用恒等映射的方法解决深层神经网络训练误差无法控制的问题。”
林允宁一边敲击键盘一边对身后的程新竹解释,“我现在就用这个新模型,升级Aether_StruMatch模块,模拟药物分子在P450酶口袋里的量子化学反应,预测每一个可能的断键位置。”
他面前的三块屏幕上,代码像瀑布一样流淌。
在学霸模拟器的帮助下,林允宁很快搭建好了一个50层的深度残差网络,用来拟合复杂的量子势能面。
BuildRes-50...Layers:[3,4,6,3]...
然而,就在他按下回车键试图加载模型的瞬间。
屏幕一闪,弹出了一个红色的报错框:
CUDAError:OutofMeory.
“该死……”
林允宁骂了一句。
NVIDIA在2007年刚发布的TesC870计算卡虽然号称算力怪兽,但显存只有可怜的1.5GB。
想要把几百万个参数的深层网络塞进这一张卡里,就像是试图把大象塞进冰箱。
“显存爆了。”
林允宁看着报错,没有任何犹豫,立刻新建了一个脚本文件,“既然一张卡装不下,那就切开了装。”
他在脑海中迅速构建了一个“模型并行(ModelParallelis)”的架构。
这就像是一个巨大的拼图。
他把神经网络的前10层切给第一个显卡集群,中间10层切给第二个……
数据像流水线上的工件一样,在显卡之间通过PCI-E总线高速传输。
“这也行?”
旁边看着的程新竹目瞪口呆,“你把神经网络给‘肢解’了?”
“只要神经连着,肢解了也能跑。”
林允宁手指翻飞,重写了底层的通信协议,“这叫模型并行。以后模型会越来越大,单卡的显存肯定扛不住,这是唯一的出路。”
半小时后,代码修改完成。
“嗡——”
随着脚本运行,机柜里的显卡啸叫声瞬间拔高了一个八度,那是硅基芯片在极限负荷下的哀鸣。
这一次,没有显存报错。数千个流处理器开始疯狂吞吐数据,机房里的温度直线上升,热浪滚滚而来。
“跑起来了!”程新竹惊喜地喊道,擦了擦额角的汗珠,兴奋地脱掉了卫衣,露出了里面粉色的HelloKitty短袖T恤衫。
屏幕上的进度条开始移动。
Loss(损失函数)曲线开始生成。
但是,仅仅过了几分钟,林允宁的脸色就变得比刚才更难看。
那条代表模型误差的Loss曲线,并没有像预期那样下降,反而在震荡了几次后,直接冲上了天际。
紧接着,屏幕上跳出了一行行令人绝望的字符:
Loss:NaN
Gradiet:NaN
NaN(NotaNuber),非数。
这意味着计算溢出了。
梯度在几十层的反向传播中,要么消失成了零,要么爆炸成了无穷大。
“还是不行……”
林允宁盯着那些NaN,感觉像是被嘲讽了一样。
这不是硬件问题,这是算法的数学缺陷。
随着网络层数的加深,每一层参数的微小变化,都会导致输出数据的分布发生剧烈偏移。
这就好比是在打靶。
第一层射偏了一点点,第二层又偏了一点点……
本章未完,点击下一页继续阅读。