晋江文学城
下一章 上一章  目录  设置

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%] [状态: 就绪]一样的输出。
      但他知道她在回应他。
      他笑了一下。很轻的。
      然后他关掉屏幕,拿起书包,走出了实验室。
      走廊的灯还是没全亮。他走在绿色的微光里,脚步声一下一下,像某种古老的心跳。
      他没有回头。
      但他知道那团灰色像素还在那里。
      等着明天。等着新的任务。等着继续变强。
      或者,只是存在着。
      在这个以二进制为底的世界里,安安静静地,等着。

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>