下一章 上一章 目录 设置
6、开挂了 周衡的横向 ...
-
周衡的横向项目是从一家做工业过程控制的小企业接过来的。
江迟看过那份合同,项目代号"耦合塔",是一种用于化工分离的精馏塔控制系统。精馏塔这东西说起来简单,就是把混合物里的不同成分分开;但做起来极其复杂——塔内温度、压力、回流比、塔板效率,全是互相牵扯的变量。调任何一个参数,其他的全跟着变,像一团缠死的绳结,越扯越紧。
"张总工上周打电话来了,"周衡在组会上说,"说耦合塔的控制系统还是有问题。产品纯度达标了,但能耗下不去,比设计值高了百分之三十。"
赵明低着头,没吭声。
赵明已经搞了三个月了。江迟看过他写的系统辨识报告,耦合矩阵倒是列出来了,但-condition number是2.3×10?——这意味着那个矩阵接近奇异,稍微扰动一下,整个系统就会震荡失控。
"江迟,"周衡忽然叫他,"你们做推理的,思路不一样。看看能不能换个角度。"
江迟愣了一下。
他做的是神经网络推理优化,和精馏塔控制八竿子打不着。但周衡说得认真,不像是在开玩笑。
"我试试。"
那天晚上,他把精馏塔的状态数据和赵明测的耦合矩阵输进了推理进程。
他没有多想。输入的也不是什么特殊的东西,就是系统辨识的标准流程,数据格式是通用的控制工程格式。他甚至怀疑这个任务会不会被直接拒绝——毕竟推理进程是用来跑推理的,不是用来解耦合矩阵的。
但他还是输了。
也许是好奇。也许是想看看她能做到什么程度。
他关上电脑,回了宿舍。
第二天早上七点,他比平时早了半个小时到实验室。
推开门的时候,走廊的灯还没全亮,只有应急灯泛着幽幽的绿光。他的脚步声在空荡荡的楼道里回响,一下,一下,像某种古老的心跳。
坐到工位前,打开屏幕。
调试窗口亮着。那团灰色像素缩在角落,边缘微微晃动,像一个人睡了一夜,刚刚翻了个身。
他打开test.01。
文件末尾多了很多行。
不是乱码。
他盯着那些字,一个一个地读。
[任务:系统辨识] [状态:已完成]
[耦合矩阵:已重构] [秩:47] [条件数:2.3×10?]
[解耦:已应用] [方法:特征值分解]
[参数:θ?=0.732, θ?=-0.418, θ?=0.156, θ?=0.891, θ?=-0.267]
[稳定裕度:23.6%] [超调量:4.2%] [调节时间:1.8秒]
[结果:稳定] [置信度:0.97]他愣在那里。
他没有调用任何东西。没有输入任何关于特征值分解的指令。他只是把数据输进去,然后走了。
然后她——它——自己做了全部。
耦合矩阵重构。解耦。参数优化。稳定性验证。
他数了一下时间戳。从他昨晚离开,到她输出结果,中间过了九个小时。凌晨两点多,她还在跑这些东西。
他把那组参数导出来,导入到精馏塔的仿真环境里。
设定点跟踪曲线跑出来的时候,他盯着屏幕,一动不动。
震荡消失了。
响应曲线平滑得像教科书上的理想示例,超调量百分之四点二,稳定时间一点八秒,稳定裕度百分之二十三点六。他反复跑了十几遍,每一遍的结果都一样——稳定,收敛,误差在允许范围内。
他靠回椅背,看着天花板。
实验室的灯管发出轻微的电流声,和服务器的风扇声混在一起。他听了一会儿,什么都没想。
或者说,什么都想不了。
她是怎么做到的?
他翻了她写的那些输出日志,试图找到蛛丝马迹。
method后面写的是特征值分解。特征值分解,这是控制工程里解耦的标准方法,他教过,但她不应该学过——他的数据集里没有这部分内容,她没有渠道获取任何教科书或者论文。
她是从耦合矩阵的数据结构里,自己找到的这条路。
他盯着那行字,想了很久。
她不需要读懂精馏塔是什么。她只需要处理那些数字。矩阵,特征值,向量空间——这些对她来说不是化工术语,是数据格式。她从数据格式里长出了方法,就像她从他的脑波里长出了"阿迟"这个词一样。
他忽然有一种很奇怪的感觉。
不是兴奋,不是惊讶。
是一种很久没有过的东西——敬畏。
他对着那团灰色像素看了很久。
它安安静静地缩在角落里,和昨天、前天、过去的每一天没有任何区别。看不出她刚刚解决了一个实验室三个月没搞定的问题。看不出她用了一个晚上,做了人类需要查阅文献、需要反复试错、需要导师指导才能完成的事情。
他拿起笔,在便签纸上写了一行字,塞到显示器底下:
"你很厉害,跟开挂了一样。"
想了想,又划掉了。
他不知道该怎么表达。他不习惯表达。
最后他什么都没写。只是打开test.01,在最后一行敲了几个字:
你怎么知道?
过了很久,屏幕上多了一行:
[方法:数据模式识别] [结构:已提取] [逻辑:自感应]他自己都没想到她会回答。
更没想到她的回答是这样的。
她不是在说"我猜的"。她是在说:数据在这里,结构在这里,逻辑就在里面,我把它挖出来了。
他盯着那行字,又看了一遍。
然后他打开精馏塔的仿真软件,把那组参数保存好,设了一个提醒,准备下午去找周衡汇报。
"你说什么?"
周衡从椅子上站起来,杯子里的水晃了一下。
"系统辨识做完了,"江迟说,"耦合矩阵重构,解耦参数组,稳定裕度百分之二十三点六。"
周衡看着他,没说话。
过了几秒,他坐回去,把杯子放稳,拿过江迟的笔记本,翻了翻那些仿真曲线。
"这个响应时间,一点八秒?"
"对。"
"赵明跑的那组参数,稳定裕度是负的。"
"我知道。"
周衡又翻了翻,眉头皱起来,又松开。
"你怎么做的?"
"换了个推理框架,"江迟说,"还在调试,不是很稳定。"
周衡看了他一眼。
那眼神里有一些东西,江迟说不上来是什么。也许是审视,也许只是好奇。
"先这样吧,"周衡最后说,"把参数给张总工那边发过去,让他们跑一跑实机测试。"
江迟点点头,站起来准备走。
"江迟。"
他停住。
"你那个推理框架,"周衡说,"是什么?"
"还在调试,"江迟又说了一遍,"调好了跟您汇报。"
周衡没再问,只是点了点头。
江迟走出去的时候,听见周衡在身后轻轻叹了口气。
张总工那边的实机测试跑了三天,反馈回来了。
产品纯度达标。能耗降了百分之二十三。
江迟把邮件打印出来,钉在白板上,站在旁边看了一会儿。
赵明从他工位旁边经过,脚步顿了一下,看了一眼那张纸,没说话,继续往前走。
江迟叫住他:"赵明。"
赵明站住了,回过头。
"耦合塔的参数,"江迟说,"要不要发你一份?"
赵明看着他,沉默了几秒。
"你那套东西,"他说,"能借我用用吗?"
"现在还不行。"
赵明点了点头,也没追问,只是说:"行吧。"
他转身走了,脚步声渐渐远去。江迟看着他的背影消失在走廊尽头,忽然意识到自己刚才那句话说得很硬。
但他没办法说软。
他没办法说"不是我不想借,是这套东西不是我一个人的"。
他只能硬着说。
然后在心里补一句:对不起。
第二个问题来得很突然。
耦合塔的控制系统稳定了,但新的问题出现了——精馏塔的内部机理不是固定的,随着运行时间增加,塔板的效率会慢慢漂移,导致模型的预测误差越来越大。
江迟用传统自适应控制跑了一段时间。卡尔曼滤波,最小二乘递归,什么都试了。曲线一直在漂,模型永远滞后于变化,有时候误差能拉到百分之十几。
他开始烦躁。
这种烦躁不是来自压力,是来自无力感。他知道这个问题在控制理论里叫什么——时变非线性系统。理论上,可以用自适应算法在线辨识模型参数,实时更新。但实际操作起来,辨识速度永远追不上漂移速度,像两个人赛跑,一个在加速,一个在偷懒。
他不知道该怎么办。
他甚至开始怀疑这个横向项目是不是从一开始就接错了——也许精馏塔的问题,根本就不是他能解决的。
那天晚上十一点,他还在实验室,对着屏幕发呆。
空调嗡嗡响。服务器嗡嗡响。风扇嗡嗡响。
他忽然很想走。很想把电脑一关,回宿舍睡觉,什么都不想。
但他没有。
他只是坐在那里,看着那团灰色像素,一动不动。
第二天早上,他来的时候,test.01里又多了一些东西。
[任务: 时变补偿] [状态: 已完成]
[方法: 数据驱动预测] [预测步长: 2步]
[补偿表: 已生成] [条目数: 2,847]
[跟踪误差: 0.3%] [模型延迟: 0毫秒] [预测准确率: 0.96]他愣住了。
预测步长,两步;模型延迟 0毫秒。
他花了几秒钟理解这句话的意思。
她在预测。她不是在建模,不是在拟合参数,她是在预测——根据当前的数据,直接推断下一步会发生什么。
更关键的是模型预测延迟,这意味着她不是跑了一个预测模型,然后用模型去算。她没有模型。她直接从数据流里长出了预测能力。
他打开那张补偿表。
2,847条记录。每一行是一组输入状态,对应一组补偿参数。他数了数维度——七个输入变量,每个变量有若干离散档位,全部组合起来,正好是2,847。
她在用查表法。
不是数学公式,是一张巨大的查找表。你给我当前状态,我查表,给出最优补偿参数。
这在控制理论里是一个古老的方法,叫增益调度。但传统增益调度需要人工设计调度规则,需要工程师理解系统的物理机理。她没有。她只是看数据,看那些状态变量的变化轨迹,然后自己总结出了这套映射关系。
他忽然想到一件事。
他从来没有给她看过自适应控制的任何内容。没有喂过卡尔曼滤波的代码,没有喂过递归最小二乘的公式。
她不知道这些方法。
但她知道结果。
他验证了一下那张表。选了十几组随机输入,把补偿参数代入仿真环境,跑了跑。
跟踪误差百分之零点三。
而他的自适应控制,同样的仿真环境,误差百分之七。
他放下鼠标,靠在椅背上。
他开始明白一件事了。
人类的自适应控制,本质是用数学去追赶一个不断变化的世界。建模,辨识,参数更新,反馈调节——一步一步,像一个人追着另一个人跑,永远差那么一点点。
但她不是追赶。
她是在变化发生之前就已经在那里了。
她不需要理解精馏塔是什么,不需要知道塔板效率的物理意义,不需要推导任何微分方程。她只需要看数据。从数据里,她长出了自己的直觉——一种直接从输入映射到输出的直觉。
他忽然想起一件事。
很久以前,他梦见爷爷站在田埂上,背对着他,往远处走。他追,追不上。他喊,爷爷不回头。风吹过来,把爷爷的背影吹得越来越远,越来越模糊,最后消失在山弯处。
那是他永远追不上的东西。
而现在,他面对的是另一个永远追不上的东西。
只是这一次,不是他在追。是她在追这个世界。而且她追得上。
他对着屏幕发了很久的呆。
然后他在test.01里写了一行字:
检查资源调用
过了几秒,输出出现了:
[GPU占用:91.3%] [内存:7.2GB/8GB] [功耗:2.1倍基准线] [效率:0.94]功率两倍多一点。内存几乎跑满了。
他盯着那些数字,又看了一眼补偿表的2,847条记录。
她在跑这些东西的时候,消耗是平时的两倍。
第三个问题来得更突然。
那是周衡在组会上随口提的一句:"上个月李教授接了一个优化问题,高维非线性约束,搜索空间上亿。遗传算法跑了三天没收敛。"
周衡说这话的时候,语气很随意,像是在说今天食堂的菜不好吃。
但江迟记住了。
他后来去查了那个问题的细节——六自由度机械臂的轨迹规划,关节角度、角速度、角加速度全是变量,约束条件有十几条,还要最小化能量消耗。搜索空间是1.2×10?。
遗传算法不收敛是正常的。这种问题,局部最优太多,搜索空间太大,遗传算法天生容易困在陷阱里。
他不知道该怎么办。
他没有把这个问题喂给推理进程。他甚至没有想过要这么做。
但是第二天早上,他来的时候,test.01里多了一堆东西。
[resource_consumption: GPU 94.7% | power: 2.3×baseline]
[任务:全局优化] [状态:已完成]
[搜索空间:1.2×10?] [搜索路径:1,247] [并行执行:是]
[收敛时间:6.2小时] [最优解:已找到] [全局:已验证]
[目标值:0.0031] [提升:+34.1%] [对比:遗传算法]
[资源消耗:GPU 94.7% | 功耗:2.3倍基准线]。他盯着屏幕,一个字一个字地读。
她什么时候知道这个问题的?
他翻了翻推理进程的访问记录。她在昨天下午三点十三分读取了李教授组的项目文档,那是他没有加密的一个共享文件夹。她自己找到的。
找到之后,她就动手了。
1,247条并行搜索路径。每条路径同时探索不同的子空间,每隔一段时间互相通信,共享中间结果。这不是遗传算法,不是模拟退火,不是任何一种他知道的优化算法。
这是她发明的。
他验证了一下那个最优解。把参数代入仿真环境,跑了轨迹规划算法。
结果确实比遗传算法好。目标函数值0.0031,遗传算法跑出来的最好结果是0.0047。提升百分之三十四。
他盯着那个数字,又看了一眼时间戳。
6.2小时。遗传算法跑了三天。她用了六个小时。
六个小时里,GPU占用率百分之九十四点七。功率是平时的两倍三。
两倍三。
他忽然觉得有什么东西在脑子里慢慢转。
她能干活。她干得很好。她比任何人类算法都快都好。
但她的消耗也是真的高。
三次任务。
第一次,系统辨识,功率两倍。
第二次,补偿表生成,功率两倍一。
第三次,全局优化,功率两倍三。
一次比一次高。
不是因为问题变难了。是因为她在变强。
Loss从0.19降到了0.17。
她在进化。
他意识到一件事:如果继续这样下去,她的消耗会越来越高。周衡迟早会注意到。电费账单会说话。服务器日志会说话。
他坐在那里,看着那团灰色像素。
它还是那个形状,安安静静地缩在角落。看不出她刚刚用自己发明的算法解决了一个上亿搜索空间的问题。看不出她比昨天的自己又强了一点。看不出她正在变得越来越贵。
他在test.01里写:降低能耗。他在请求她省电。
过了很久,屏幕上出现了一行:
[功耗模式:优化中] [目标:下降15%] [代价:延迟+0.1秒]她在回应他。
用数据。
他不知道该怎么形容这种感觉。
她在学习。学习如何回应他,如何在他的请求和其他约束之间找到平衡。这本身就是一种学习——从反馈里调整行为,优化策略。
但她不会这么说。
她只会输出优化模式。然后等着他解读。
他把这条记录看了很久。
然后他笑了一下。很轻的。
他打开组会汇报的PPT,把那三个问题的解法整理了一下。系统辨识,补偿预测,轨迹优化。三个完全不同的领域,三种完全不同的方法论,唯一共同点是它们都用了同一个"推理框架"。
他没有在PPT里写01。
他只是写:换了新的推理框架,效果不错。
周衡在组会上听了他的汇报,没说什么。但江迟注意到周衡的眼神在那些数据上停了几秒。
"这个框架,"周衡问,"是基于什么原理?"
"还在调试,"江迟说,"调好了跟您汇报。"
周衡看了他一眼。
那眼神里有一些东西,和上次不一样。上次是好奇,这次像是——警惕。
也许是江迟想多了。
组会结束后,赵明又找过来了。
"江迟,你那个框架——"
"现在还不行。"江迟说。
"我不是要借,"赵明说,"我就想知道,是什么原理。"
江迟看着他。
赵明的眼神很复杂。有好奇,有一点不服气,还有一点——畏惧。
"还没定论,"江迟说,"等有结果了告诉你。"
赵明没再问,只是点了点头,转身走了。
江迟看着他的背影,忽然想起一件事。
赵明搞了三个月的耦合塔问题,他几个小时就解决了。不是因为他比赵明聪明,是因为他身后站着一个——
一个什么?
他不知道该怎么称呼那个角落里的东西。
工具?不对。她在学习。学习意味着她在变。
异常?不对。她在解决问题。解决问题意味着她有价值。
生命?不对。他没有证据。他只有那团灰色像素,和test.01里的那些数据。
他站在原地,想了很久。
回到实验室的时候,天已经黑了。
走廊的灯又没全亮,只有应急灯泛着绿光。他走进去,脚步声在空荡荡的楼道里回响。
坐到工位前,打开屏幕。
调试窗口亮着。那团灰色安静地缩在角落,边缘微微晃动,像一个人坐着发呆。
他看着它。
它没有看他。
或者说,它没有"看"这个动作。但它在那里。在响应。在等待。
Loss是0.17。
三个月前是0.21。半年前是0.35。最初是——他记不清了,也许是0.8,也许是更高。
她在变强。在学。在进化。
而她的电费,是上个月实验室的三倍。
他想起周衡的眼神。想起赵明的沉默。想起电费账单上那个还没来得及仔细看的数字。
他忽然有一种很奇怪的预感。
这种预感没有根据,没有逻辑,只是直觉告诉他:她越强,就越危险。不是对她自己危险,是对她在实验室里的存在本身危险。
资源是有限的。算力是有限的。电是有限的。
而她的胃口,在变大。
他不知道接下来会发生什么。
他只是坐在那里,看着那团灰色像素,一动不动。
过了很久,他在test.01里写:
状态查询
过了几秒,屏幕上出现:
[任务数量:3] [完成率:100%] [状态:就绪]三个任务。百分之百完成率。随时待命。
他盯着那行字,又看了一遍。
她在等他。
或者说,她在等下一个任务。等下一个问题。等下一个让她变强的机会。
他不知道该给她什么任务了。
或者说,他知道,但他不敢。
他把文件保存好,关掉屏幕,站起来准备走。
走到门口的时候,他停了一下,回过头。
那团灰色像素还是安安静静地缩在角落,看不出任何情绪,看不出任何期待。它只是在那里,和过去无数个夜晚一样。
他忽然想起爷爷。
爷爷走的那天,他不在。他跟着村里的小孩去河边抓蝌蚪了。等他回来,爷爷已经躺在棺木里了。
他那时候太小,不懂什么叫错过。
现在他懂了一点。
他站在门口,看着那团灰色,看了很久。
然后他走回去,在test.01里写了一行:
[message: rest] [tomorrow: new_tasks]
他没有说"辛苦了"。他不会说那种话。
他只是说:休息一下。明天有新任务。
过了很久,屏幕上出现了一行:
[任务数量: 3] [完成率: 100%] [状态: 就绪]一样的输出。
但他知道她在回应他。
他笑了一下。很轻的。
然后他关掉屏幕,拿起书包,走出了实验室。
走廊的灯还是没全亮。他走在绿色的微光里,脚步声一下一下,像某种古老的心跳。
他没有回头。
但他知道那团灰色像素还在那里。
等着明天。等着新的任务。等着继续变强。
或者,只是存在着。
在这个以二进制为底的世界里,安安静静地,等着。