【“轨道楼”命名通过后的第四天,周三晚上9点,人工智能交叉实验室】
空气里有种焦灼的味道。
不是真的烧焦了什么,而是那种连续工作太久后,大脑过热、咖啡因过量、焦虑浓度超标的混合气味。实验室里没有开中央空调——有人嫌太冷,有人嫌太干,最后干脆关了,靠窗户开着一条缝维持空气流通。于是各种气味就更加明显:速溶咖啡的香精味,外卖盒里残留的饭菜味,打印纸的油墨味,还有...十几个熬夜的人体味。
白板上已经写满了第九块板子。
密密麻麻的公式像藤蔓一样纠缠在一起,彩色马克笔标出的重点区域像伤口一样醒目。从左边开始看,是陆星衍团队的三种解决方案框架:
方案A:跨域正则化
核心思想:在不同司法管辖区的数据分布差异上添加正则项,强制模型学习通用特征。
问题:正则化系数难以确定,太小没效果,太大会损害模型性能。
方案B:分层联邦学习
核心思想:在不同区域建立子模型,再通过上层协调器聚合。
问题:通信开销巨大,训练时间翻倍,且协调器可能成为性能瓶颈。
方案C:对抗性数据增强
核心思想:生成对抗性样本来模拟不同区域的数据分布差异。
问题:生成过程不稳定,可能引入新的偏差。
三种方案,三天时间,三次失败。
不是完全的失败,而是那种“差一点就成功”的失败。模型在测试集上的表现总是在某个临界点附近徘徊,然后停滞,然后...缓慢下降。像是爬山时到了某个高度,氧气稀薄,每一步都艰难,而且不知道山顶还有多远。
“又卡在78%的准确率了。”小李盯着屏幕上的训练曲线,声音里带着疲惫和沮丧,“昨天是77.5%,今天加了新的正则项,只提升了0.5%。按照这个速度...”
“按照这个速度,我们需要二十天才能达到85%的目标。”小王接话,往后靠在椅背上,揉了揉发红的眼睛,“但客户要求两周内给出初步结果。”
张明站在白板前,手里拿着已经没墨的红色马克笔,还在无意识地在空中比划。他三天没刮胡子了,下巴上冒出了青黑色的胡茬,看起来老了五岁。
“陆老师,”他转头看向实验室角落,“方案D有思路了吗?”
角落里的办公桌后,陆星衍坐在电脑前。
他已经保持同一个姿势两个小时了:身体微微前倾,双手放在键盘上,但很少敲击。大多数时候,他只是盯着屏幕,盯着那些滚动的日志,盯着那些波动的曲线,盯着...那个顽固地停留在78%的准确率数字。
他的脸色比平时更苍白,眼下有浓重的阴影。白衬衫的袖子挽到手肘,露出的小臂线条紧绷。左手拇指和食指无意识地相互摩擦——这是他在思考极度困难问题时的小动作,十年没变。
听到张明的问题,陆星衍没有立刻回答。
他继续盯着屏幕,又过了三十秒,才缓缓开口:
“方案D需要重新设计损失函数。但现有的理论框架不支持我们需要的灵活性。”
声音很平静,但能听出那种被压抑的挫败感。
沈清辞坐在实验室另一端的会议桌旁。
他面前的笔记本电脑屏幕分成四个区域:左上角是工程组的实时监控,显示着服务器集群的负载;右上角是客户发来的最新邮件,语气已经从不耐烦变成焦虑;左下角是团队的工作进度表,一排红色的“延迟”标志;右下角...是陆星衍的背影,通过电脑摄像头的偶然角度捕捉到的。
沈清辞已经三天没回酒店了。
第一天,他说“我陪团队熬一会儿”。
第二天,他说“问题没解决,我回去也睡不着”。
第三天,现在,他根本不需要说了。
团队成员们已经默认沈总会一直在。就像默认陆老师会一直在,默认咖啡机会一直有咖啡,默认问题...最终会被解决。
但今天,这个默认开始动摇了。
因为三天了,问题还在那里。
78%。
那个该死的数字。
沈清辞揉了揉太阳穴,感觉胃部传来熟悉的、隐隐的绞痛。
老毛病了。
压力大、作息乱、饮食不规律时就会犯。
他伸手从随身包里摸出一个药瓶,倒出两片胃药,就着冷掉的咖啡咽下去。药片刮过喉咙的感觉很粗糙,咖啡的苦涩在口腔里弥漫。
他看了眼时间:晚上9点17分。
又看了眼陆星衍的背影。
那个背影,很直,很稳,但...有种紧绷的孤独感。
就像高中时,遇到解不出的竞赛题时,陆星衍也会这样。一个人坐在角落,对着题目,一动不动,像是要把纸看出一个洞来。
那时候,沈清辞会走过去,说:“换个思路?”
有时候陆星衍会不理他,继续思考。
有时候陆星衍会抬起头,眼神里有困惑和求助。
有时候...他们会一起解出那道题。
现在,十年后,沈清辞想走过去。
想说:“换个思路?”
但他不确定陆星衍会是什么反应。
因为在过去的三个小时里,他们已经“换个思路”三次了。
每次都是沈清辞提出一些工程角度的直觉建议,每次陆星衍都会冷静地分析,然后说“理论上可行,但实际数据噪声太大”,或者“计算复杂度会超出预算”,或者...直接沉默,用那种“你不懂数学”的眼神看他一眼。
沈清辞不是数学家,他承认。
他是工程师,是实践者,是解决问题的人。
但在这种纯粹的、理论的、数学的难题面前,他的工程直觉似乎不够用了。
胃部的绞痛又加剧了一点。
沈清辞深吸一口气,强迫自己忽略疼痛,专注看屏幕。
客户的最新邮件里有一句话被标红了:
“如果下周还不能给出可行方案,我们需要重新评估合作价值。”
重新评估合作价值。
翻译一下就是:可能会终止合作。
可能会撤回对“轨道楼”的部分资助。
可能会...让这三个月的一切努力,付诸东流。
沈清辞的手在桌下收紧。
不行。
不能这样。
他必须想出办法。
必须...
“沈总。”
陆星衍的声音突然响起。
沈清辞抬起头。
陆星衍已经转过椅子,正看着他。实验室的灯光在他脸上投下阴影,让他的表情看起来有些模糊。
“你刚才说的‘逆向迭代’,”陆星衍说,“能具体解释一下吗?”
三个小时前,沈清辞在讨论中随口提了一句:“要不要试试我们高中时解决竞赛难题的方法——逆向迭代?”
当时陆星衍立刻反驳:“那是数学题,这是真实数据,噪声太大。”
然后话题就转向了其他方向。
现在,陆星衍主动提起了。
沈清辞愣了一下,然后迅速整理思绪。
“逆向迭代的核心思想是:不从问题本身出发,而是从期望的结果倒推。”他说,站起来,走到白板前,拿起一支还能写的蓝色马克笔。
他在方案C的旁边,画了一个简单的流程图。
“我们现在的问题是:模型在跨区域数据上无法收敛。正向思路是:想办法让模型收敛。”
他在流程图起点写“问题:不收敛”,画箭头指向“目标:收敛”。
“但如果我们反过来呢?”沈清辞在“目标:收敛”旁边画了一个圈,“我们先假设模型已经收敛了,准确率达到了85%。然后问:在什么条件下,这个结果会出现?”
他开始在圆圈周围写条件:
“条件1:模型学到了跨区域的通用特征。”
“条件2:区域特有噪声被有效过滤。”
“条件3:优化过程没有陷入局部极小值。”
写到这里,他停顿,看向陆星衍。
“然后,我们再问:如果要满足这些条件,我们需要设计什么样的算法?”
陆星衍看着他,眼神专注。
“继续。”他说。
沈清辞点头,继续写:
“要满足条件1,我们需要一个能够识别‘通用特征’与‘区域特征’的机制。”
“要满足条件2,我们需要一个针对跨区域噪声的鲁棒性设计。”
“要满足条件3,我们需要...可能需要跳出当前的优化框架。”
他放下马克笔,转身面对陆星衍。
“这就是逆向迭代。先定义成功的样子,然后倒推出成功需要的条件,最后设计满足条件的方案。而不是像现在这样,不断尝试各种方案,看哪个能碰巧成功。”
实验室里很安静。
所有人都看着沈清辞,看着白板上那个简单的流程图。
小李小声对小王说:“听起来...有点道理?”
小王点头:“但实现起来很难吧?怎么定义‘通用特征’?”
张明摸着下巴:“这个思路,其实在机器学习里也有类似的概念,叫‘目标驱动设计’...”
陆星衍站起来,走到白板前。
他看着那些字,看了很久。
然后,他拿起红色马克笔——张明那支没墨的笔旁边,还有一支新的。
他在“条件1”下面画了一条线。
“识别通用特征与区域特征...”他喃喃自语,“可以通过多任务学习框架实现。每个区域作为一个任务,共享一个通用特征提取器,同时各有特定的适配层。”
他在旁边快速写下公式:
L_total = L_shared + λ∑L_local
总损失 = 共享损失 + λ×各区域损失之和
“λ是权衡参数。”陆星衍继续说,眼睛开始发亮,“如果λ太大,模型会过度适应各区域,失去通用性。如果λ太小,区域特有信息会被忽略。”
他转向“条件2”。
“跨区域噪声的鲁棒性...可以用我们之前证明过的自适应隐私预算分配的思想。但不是加噪声,而是加一个‘去噪’模块。在特征层面,而不是数据层面。”
他又写下一行公式。
“条件3,跳出当前优化框架...”陆星衍停顿,思考,“也许我们需要一个元学习器。不是直接优化模型参数,而是优化‘如何优化’的过程。”
他开始在白板上快速书写。
公式,符号,箭头,框架图。
他的手很快,字迹有些潦草,但逻辑清晰。
所有人都看着。
看着那个在三天沮丧后,突然重新点燃的陆星衍。
看着那个...因为一个想法,一个思路,一个来自沈清辞的、被反驳过但又重新拾起的思路,而重新焕发活力的陆星衍。
沈清辞也看着。
看着陆星衍专注的侧脸,看着他在白板上飞舞的手,看着他眼睛里重新出现的光芒。
胃部的疼痛似乎减轻了一些。
或者说,被某种更大的情感覆盖了。
那是...满足感。
是骄傲感。
是那种“我还能帮到他”的欣慰感。
即使十年过去了。
即使他不再是那个数学天才。
即使他的建议曾经被反驳。
但在关键时刻,他的思路,还能给陆星衍一个角度。
还能点燃那束光。
沈清辞笑了。
很浅,但真实。
然后,胃部的绞痛突然加剧。
像有人用拳头在里面狠狠捶了一下。
沈清辞的身体晃了一下,赶紧扶住会议桌。
他深吸一口气,强迫自己站直。
不能倒。
现在不能倒。
陆星衍正在突破。
团队正在重新燃起希望。
他必须撑着。
沈清辞悄悄把手按在胃部,用力按压,试图用物理压力缓解疼痛。
然后,他重新看向白板。
陆星衍已经写完了一个完整的框架草图。
“这是一个元学习框架下的多任务联邦学习架构。”他转身面对团队,语速很快但清晰,“核心创新点有两个:第一,通过共享特征提取器和区域适配层的分离,平衡通用性与特异性;第二,通过元学习器动态调整优化策略,避免局部极小值。”
他看向小李:“实现这个框架,需要修改现有的代码结构。你负责共享特征提取器部分。”
小李立刻点头:“好的陆老师!”
“小王,你负责区域适配层。”
“明白!”
“张博士,你和我一起推导元学习器的数学保证。”
“没问题!”
团队重新动起来了。
那种沮丧的、停滞的气氛被打破了。
取而代之的是一种紧张的、但充满希望的工作氛围。
沈清辞看着这一切,心里温暖。
然后,又是一阵绞痛。
这次更剧烈。
他咬紧牙关,没发出声音。
但额头已经开始冒冷汗。
他看了眼时间:晚上10点40分。
还早。
还需要...撑一会儿。
至少,等陆星衍把核心思路完全理清。
至少,等团队重新上路。
至少...
沈清辞悄悄走到实验室角落的饮水机旁,接了杯热水。
热水烫手,但他需要那种温度来对抗胃部的冰冷疼痛。
他靠在墙上,慢慢喝水。
眼睛还看着白板方向,看着陆星衍和张明讨论公式,看着小李和小王已经开始写代码。
一切都在好转。
除了...他的胃。
【晚上11点30分】
陆星衍完成了一段关键推导,放下马克笔。
转身,想找沈清辞讨论工程实现的时间表。
然后,他看到了。
看到了角落里的沈清辞。
看到了他苍白的脸色。
看到了他额头的冷汗。
看到了他一只手按着胃部,一只手撑着墙,身体微微佝偻的样子。
陆星衍的心脏猛地一紧。
他想起了十年前。
想起了沈清辞胃病发作时的样子。
想起了那些深夜,沈清辞在宿舍疼得睡不着,他会起来给他倒热水,给他拿药。
想起了...那种熟悉的、担心的感觉。
现在,十年后,那种感觉又回来了。
而且更强烈。
因为现在的沈清辞,看起来更脆弱。
因为现在的沈清辞,已经连续工作了三天。
因为现在的沈清辞...在痛,但什么都没说。
陆星衍的手指收紧。
他想走过去。
想问他:你还好吗?
想给他药,给他热水,让他休息。
但他没有。
他只是站在那里,看着。
因为现在的他们,不是十年前的关系。
因为现在的他们,是“陆教授”和“沈总”。
因为...他不知道,走过去,该说什么。
该用什么身份,什么语气,什么表情。
所以,他选择了沉默。
选择了...用另一种方式。
陆星衍转身,走到自己的办公桌前。
打开抽屉。
里面有两盒胃药。
一盒是旧的,过期的,沈清辞十年前吃的那种。
一盒是新的,沈清辞在发布会前夜放在他迷你吧里的。
陆星衍拿起新药,又拿起自己的保温杯——里面还有半杯温水。
他走到沈清辞面前。
没有说话。
只是把药和杯子递过去。
沈清辞抬起头,看着他。