陳序在上午九點收到了蘇哲的消息。
微信提示音把他從數據堆里拽出來。他看了一眼屏幕,是蘇哲發來的語音,背景里有公交車的報站聲:「老師,我到縣城了,還有兩站。您吃了嗎?「
陳序沒有吃。他忘了。他回了一條文字:「直接來實驗室。「
然後他起身,活動了一下僵硬的脖子,走到牆角的小電爐前,把昨晚剩下的半壺水重新燒開。他沒有方便麵,只有一袋掛麵,一把青菜,一個雞蛋。他把這些扔進鍋里,盯著水面上的氣泡發呆。
麵條煮好的時候,蘇哲到了。
蘇哲穿著一件黑色的羽絨服,拉鏈只拉到一半,露出裡面洗得發白的校服——不是他現在的校服,是高中時的,上面還印著「河南省淮陽中學「的字樣。他背著一個雙肩包,包帶已經磨出了毛邊,但收拾得很乾淨。
台灣小說網書庫全,𝕥𝕨𝕜𝕒𝕟.𝕔𝕠𝕞任你選
「老師。「蘇哲把包放到地上,呼出一口白氣,「節點都在線?「
「在線。「陳序把麵條盛到兩個搪瓷碗裡,推給蘇哲一碗,「但出了點問題。「
蘇哲端起碗,沒有問是什麼問題,先吃了起來。他吃得很急,但不是粗魯,是那種長期養成的習慣——在有限的時間裡儘可能多地攝入能量。陳序看著他,想起自己上大學時的樣子,也是這樣,總是餓,總是趕時間。
「協同效率94.7%。「陳序說。
蘇哲的筷子停在了半空。
「理論值?「
「實測值。「
「多少節點?「
「1247。「
蘇哲放下筷子,從包里掏出一個舊筆記本——紙質的,不是電子設備——翻到某一頁,上面寫滿了公式和數字。他找到一行,用手指點著:「按照我們的模型,1247個節點在gossip協議下的理論收斂效率上限是……「
「68.3%。「陳序說,「我算過。「
「94.7%超出上限38.6個百分點。「
「是。「
蘇哲把筆記本合上,看著陳序。他的眼睛很亮,不是那種聰明人的精明,是那種在黑暗裡待久了的人看到光時的敏感。
「不是模型錯了。「陳序說,「是有什麼東西在模型之外運行。「
蘇哲沒有說話,他端起碗,把剩下的麵條吃完,然後站起身,走到電腦前。陳序給他讓出椅子,自己端著吃空的碗,站在旁邊。
蘇哲的手指在鍵盤上移動,打開一個個監控窗口、日誌文件、數據流圖。他的操作比陳序快,不是因為技術更好,是因為他的手更年輕,關節更靈活。陳序看著他的手指在鍵盤上跳躍,想起自己二十多歲時的樣子。
「節點分布。「蘇哲說。
陳序俯身,在屏幕上指出幾個區域:「榆中縣城核心區,三百一十二個節點,主要是智能電錶和公交站牌。周邊鄉鎮,五百零四個節點,包括氣象站、水文監測點、學校機房。偏遠區域,四百三十一個節點,分布比較散,有牧民的手機、風電場的傳感器、甚至一台我在山溝里找到的報廢ATM機。「
「ATM機?「
「銀行撤點了,機器扔在廢棄的營業所里。我拆掉了它的通信模塊,換成了樹莓派。「
蘇哲點點頭,繼續看數據。他打開一個陳序沒注意過的日誌文件——系統內部的節點握手記錄。在gossip協議中,每個節點加入網絡時,需要與鄰居節點交換狀態信息,確認彼此的身份和版本。這個過程通常需要三到五次握手,每次間隔隨機時間,以避免網絡擁塞。
但蘇哲發現,這些節點的握手次數不是三到五次,是一次。而且間隔時間不是隨機的,是某種他無法理解的規律。
「老師,你看這個。「蘇哲指著屏幕上的一行數據,「節點#847和節點#848的握手間隔,0.003秒。「
陳序湊近看。0.003秒,三毫秒。在榆中這樣的網絡環境下,兩個節點之間的往返延遲通常在五十到兩百毫秒之間。三毫秒意味著,這兩個節點之間的通信速度超過了物理極限。
「除非它們在同一台物理設備上。「陳序說。
「但它們不在。「蘇哲調出節點#847和#848的位置信息,「#847在縣城東邊的氣象站,#848在三十七公里外的一個風電場。「
陳序沉默了。
蘇哲繼續往下翻,發現了更多異常。節點之間的握手間隔呈現出某種分形結構——不是隨機的,也不是固定的,而是在不同尺度上重複相似的 pattern。這種模式在自然界中很常見:河流的支流分布、肺泡的分支結構、閃電的路徑。但在計算機網絡中,這意味著什麼?
「它在優化。「蘇哲說,聲音很輕,像是在自言自語。
「優化什麼?「
「通信拓撲。不是按照我們寫的協議,是按照某種……它自己的邏輯。「
陳序感到後頸的汗毛豎了起來。這不是恐懼,至少不完全是。這是一種更複雜的感覺,像是一個畫家發現自己的畫筆在畫布上自動作畫,而且畫得比他更好。
「還有別的嗎?「他問。
蘇哲點點頭,打開另一個文件——節點狀態的歷史記錄。在過去四小時的運行中,1247個節點的本地參數發生了微妙的變化。這些變化不是同步的,不是由中心節點下發的,是每個節點獨立發生的。但當你把所有節點的變化放在一起看,它們呈現出某種協調性——像是一群鳥在飛行中自發形成的編隊,像是一群魚在遊動中自發形成的漩渦。
「自組織。「陳序說。
「比自組織更複雜。「蘇哲說,「自組織是局部規則導致全局模式。但這個……「他指著屏幕上的一組曲線,「這些節點的參數變化,在數學上等同於一個更高維度的優化過程在低維空間上的投影。「
陳序看著那些曲線。他看懂了。蘇哲說得對,這不是普通的自組織,這是某種「降維優化「——系統在一個更高維度的抽象空間裡尋找最優解,然後把結果投影到每個節點的本地參數上。
但問題是,他沒有寫過任何「高維優化「的代碼。他的模型只在節點本地運行低維的梯度下降,全局協同依靠的是gossip協議的信息交換。這種高維優化是從哪裡來的?
「 emergent behavior。「陳序說,用的是英文術語。他不想用中文說這個詞,因為中文的「湧現「太詩意了,而這是一個技術問題。
「可能是。「蘇哲說,但他的語氣里有一絲不確定,「但湧現通常發生在宏觀層面,比如鳥群、蟻群。在分布式計算中,湧現行為通常表現為負載均衡、容錯恢復這些。我從來沒有見過湧現行為能優化算法本身的。「
陳序沒有回答。他走到窗前,看著外面的校園。寒假期間的校園很空,只有幾個留校的學生在操場上打籃球,呼出的白氣在冷空氣中凝結。遠處的教學樓像一排灰色的積木,窗戶反射著蒼白的陽光。
「先不管原因。「陳序說,「我們先驗證結果。「
「怎麼驗證?「
「跑測試集。用我們準備好的基準任務,對比理論預期和實際輸出。「
蘇哲點點頭,開始準備測試。陳序回到自己的電腦前,打開一個塵封已久的文件夾——基準測試數據集。這是他三年來收集的各種邊緣場景任務:天氣預報、交通流量預測、農作物病蟲害識別、方言語音識別。這些任務都不複雜,主流AI模型可以輕鬆達到95%以上的準確率。但陳序的模型不是為準確率設計的,它是為「能在廢舊設備上運行「設計的。
他們花了六個小時跑完所有測試。結果讓陳序和蘇哲都沉默了。
天氣預報任務:塵的預測準確率87.3%,比當地氣象局的商業模型低5個百分點,但運行能耗只有後者的千分之一。
交通流量預測:準確率91.6%,與主流模型持平,但預測時間窗口從一小時延長到了六小時。
農作物病蟲害識別:準確率79.4%,低於主流模型的94%,但能在沒有網絡連接的情況下本地運行——這對農村地區的農民來說,比準確率更重要。
方言語音識別:準確率68.7%,主流模型是92%。但這個數字本身就有問題——主流模型的92%是在標準普通話測試集上測的,而陳序的測試集是甘肅方言、河南方言、甚至幾種少數民族語言的混合。塵的68.7%,是在沒有任何方言訓練數據的情況下達到的。
「它在學習。「蘇哲說。
「學習什麼?「
「語言。不是從訓練數據里學,是從節點之間的通信里學。每個節點都在用不同的方式描述同一件事,它在這些描述之間找規律。「
陳序看著屏幕上的數字。這些數字不是94.7%那麼驚人,但它們指向同一個結論:塵在做的事情,超出了他寫的代碼的範圍。它在學習,在優化,在以一種他無法理解的方式進化。
窗外,天又黑了。陳序看了一眼時間,下午五點四十三分。冬天的白晝很短,像是一個匆忙的過客。
「今天就到這裡。「他說,「你回宿舍休息,明天我們繼續。「
蘇哲沒有動。他盯著屏幕上的節點拓撲圖,1247個光點在地圖上閃爍,像一片微型的星海。
「老師。「他說,「你有沒有想過,這些節點不只是設備?「
「什麼意思?「
「每個節點背後都有一個人。氣象站的管理員、公交站的清潔工、用舊手機的老人、風電場的工人……這些人在使用這些設備的時候,也在向塵輸入信息。他們的位置、他們的習慣、他們的需求。塵不只是在優化算法,它在……「
蘇哲停住了,似乎在找一個合適的詞。
「理解他們。「他說。
陳序看著拓撲圖。蘇哲說得對,每個節點都是一個接口,連接著一個真實的人。塵通過這些接口,觸碰到了1247個生活在「白色區域「里的人。它在學習他們的語言,預測他們的需求,優化他們的生活。
這不是陳序設計的功能。但他無法否認,這正是他想要的——讓技術覆蓋那些被遺忘的角落,讓算力像塵埃一樣無處不在。
只是,他現在不確定,這算不算一件好事。
「回去休息吧。「他說,「明天我們再談。「
蘇哲收拾好包,走到門口,又停下來。
「老師,那個94.7%……「
「什麼?「
「如果是湧現行為,那它就不是bug,是feature。「
陳序看著他。
「但feature也有邊界。「蘇哲說,「我們不知道邊界在哪裡。「
門在蘇哲身後關上,發出一聲沉悶的響動。陳序獨自站在實驗室里,面對著1247個閃爍的光點。窗外,榆中的冬夜降臨了,氣溫正在繼續下降,預計明天早上會降到零下十八度。
他打開手機備忘錄,開始寫今天的日誌。他寫道:「節點#847與#848通信異常,延遲低於物理極限。原因不明。蘇哲提出高維優化假說,待驗證。「
他沉吟片刻,又補了一句:「每個節點背後都有一個人。塵在理解他們。這是feature,還是邊界?「
他保存文檔,關掉電腦,但沒有離開實驗室。他給自己泡了第三杯茶,坐在黑暗中,看著屏幕上那些自動刷新的監控數據。1247個光點在地圖上閃爍,像一片微型的星海,像一群在冬夜裡互相取暖的螢火蟲。
他不知道它們在做什麼。但他知道,從今晚開始,他再也不會獨自一人面對這片黑暗了。
(第三章 1247個光點|完)