亲,双击屏幕即可自动滚动
正文 第250章 绝境中的ResNet(求订阅求月票)
    当天晚上。

    芝加哥的暴风雪还在窗外肆虐,但以太动力会议室里的气氛,比外面的冰湖还要冷。

    投影屏幕上,视频连线的信号有些波动,但这掩盖不了画面的触目惊心。

    那是一张刚传过来的高清解剖照片。

    原本应该是暗红色的恒河猴肝脏,此刻呈现出一种令人心悸的黑紫色,表面布满了点状的出血坏死灶,像是一块变质腐烂的淤肉。

    那是死亡的颜色。

    “这是典型的暴发性肝衰竭。”

    屏幕那头,赵博士的声音沙哑得像是在砂纸上磨过,手里夹着的烟已经烧到了过滤嘴,但他毫无察觉,“林总,毒性太烈了。两只猴子从出现黄疸到死亡,不到十二个小时。

    “我们的病理切片显示,肝小叶结构彻底崩塌。

    “这是最高级别的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,感觉像是被嘲讽了一样。

    这不是硬件问题,这是算法的数学缺陷。

    随着网络层数的加深,每一层参数的微小变化,都会导致输出数据的分布发生剧烈偏移。

    这就好比是在打靶。

    第一层射偏了一点点,第二层又偏了一点点……

    到了第50层,那个偏差已经被放大了无数倍,子弹早就不知道飞到哪里去了。

    这叫“内部协变量偏移”(IteralCovariateShift)。

    靶子一直在乱晃,枪手根本瞄不准。

    林允宁试着调低学习率,试着更换初始化方法,试着加各种正则化手段。

    没用。

    那个NaN就像是个诅咒,顽固地霸占着屏幕。

    如果不解决这个问题,深层网络就是个不可训练的废品。

    ……

    时间一分一秒地过去。

    很快到了深夜两点。

    机房里的轰鸣声依旧,热得像蒸笼,但满头大汗的林允宁已经盯着那个NaN看了整整两个小时。

    常规的方法已经试了个遍,他甚至尝试了梯度裁剪等等稀奇古怪的野路子。

    结果还是没有改进。

    只要层数一深,数据分布就会乱套。

    “给。”

    一杯冰咖啡放在了手边。

    程新竹拉过一把椅子坐在他旁边,手里捧着厚厚的病理报告和生物化学工具书,准备陪着他熬夜,顺便查阅P450酶的资料。

    “别急,慢慢来。”

    程新竹喝了一口自己的抹茶拿铁,看着屏幕上乱跳的曲线,随口嘟囔道,“这AI跟养细胞似的,真娇气。

    “你知道吗,我们养细胞的时候最怕也是环境波动。

    “培养液的pH值只要差个0.1,或者温度波动个0.5度,那些酶就罢工了,细胞直接死给你看。生物体内的反应环境必须是绝对稳定的,这叫稳态(Hoostasis)。

    “只有环境稳了,酶才能专心干活……”

    “稳态……”

    林允宁听着程新竹的喋喋不休,端着咖啡的手忽然停在半空。

    他的瞳孔猛地收缩,脑海中那个一直旋转的齿轮,突然卡进了一个关键的槽口。

    【天赋:灵感洞察LV.1已激活。】

    他的目光从咖啡杯移到了屏幕上那乱糟糟的数据流上。

    神经网络的每一层,不就是生物体内的一级级酶促反应吗?

    现在的困境是,前一层的参数一变,输出的数据分布(均值和方差)就跟着变。

    下一层神经元就像是那个可怜的细胞,上一秒培养液还是酸性的,下一秒就变成碱性了,它光顾着适应环境了,哪还有精力去处理信息?

    “如果生物体需要稳态……”

    林允宁喃喃自语,眼睛越来越亮,“那神经网络也需要稳态。”

    “我们需要把靶子焊死在墙上。”

    他猛地放下杯子,咖啡溅出来几滴。

    “什么?”正在嘟囔着养细胞经验的程新竹被他吓了一跳。

    “我说,我要强制让每一层的数据环境保持‘稳态’!”

    林允宁抓起键盘,那种在绝境中找到出口的狂热让他兴奋起来。

    不需要复杂的数学推导,只需要一个简单粗暴的工程手段。

    不管前一层传过来什么乱七八糟的数据——

    我先算出这批数据的均值(Mea)和方差(Variace)。

    然后,强行减去均值,除以标准差!

    x_or=(x-a)/sqrt(var+eps)

    把它们强行拉回到均值为0、方差为1的标准正态分布!

    但这还不够。

    如果强行归一化,可能会破坏数据的特征。得给它一点自由度。

    所以,再引入两个可学习的参数:gaa(拉伸)和beta(偏移)。

    y=x_aa+beta

    让网络自己去决定需不需要还原,以及还原多少。

    这就是——Batoralizatio(批归一化)。

    给每一层神经元,都装上一台“空调”和“酸碱调节器”,让它们永远在最舒适的分布环境下工作!

    “就是这个!新竹,你真是个天才!”

    林允宁转过头,狠狠地拍了拍程新竹的肩膀,“生物稳态!就是这个!”

    “啊?我干嘛了?”程新竹一脸懵逼。

    林允宁没有解释,他的手指在键盘上飞舞,将这几行简洁而优美的代码插入到每一个卷积层和激活函数之间。

    就像是给每一个神经元都装上了一个微型的“稳态调节器”。

    这是一种从未在教科书上出现过的层结构。

    它不属于物理,不属于数学,它属于纯粹的工程直觉,是生物学智慧在计算机领域的投影。

    “Ru.”

    林允宁再次按下了回车键。

    轰鸣声再次响起。

    这一次,两人的目光都聚焦在那条Loss曲线上。

    第一轮迭代(Epoch1)……Loss2.3。

    第二轮……Loss1.9。

    没有NaN。

    没有震荡。

    那条代表损失函数的曲线,像是一条听话的滑梯,以一种令人难以置信的丝滑姿态,笔直地向下滑落。

    收敛速度比预想的还要快!

    照这个速度,用不了几个小时,训练就能完成。

    “成了……”

    林允宁看着屏幕,长长地出了一口气,后背已经被汗水湿透了。

    有了这个BN层,五十层的Res-50,甚至一百零一层的Res-101,都不再是不可训练的怪兽。

    Aether_StruMatch模块将拥有前所未有的深度。

    以太动力也将拥有一个训练超级性能怪兽的新方法。

    那个该死的毒性代谢物,也绝对逃不出这张深网的捕杀。

    就在林允宁准备把程新竹赶回公寓去休息的时候,他笔记本电脑的邮件提示音突然响了。

    这清脆的一声在轰鸣的机房里显得格外刺耳。

    林允宁拿出电脑,扫了一眼。

    发件人:安雅·夏尔马(苏黎世联邦理工)。

    主题:【SOS】

    邮件内容简短,却透着焦急:

    【林,你的可调耦合器在单比特测试时很完美。

    但在我们尝试进行多比特纠缠门操作时,系统遭遇了严重的“频率拥挤(FrequecyCrowdig)”。

    能级太密了,稍微一动就会碰到别的能级,引发雪崩式的错误。

    量子芯片,卡死在扩容这一步了。

    作为合作者,你有什么好办法么?】

    林允宁看着邮件,原本放松下来的神经再次紧绷。

    刚搞定了生物的“稳态”,量子的“拥挤”又来了。

    他看着窗外渐渐亮起的晨光,嘴角露出一抹无奈又兴奋的笑意。

    “频率拥挤……还真是一点休息时间都不给我啊……”

    科研的路,永远没有尽头。

    这就是攀登顶峰的代价。

    一步一坎。

    但只要能看见山顶,这些坎,迈过去就是了。
为您推荐