第21章 巴別塔

投票推薦 加入書籤 小說報錯

  隨著風波的平息,深視科技進入了一段難得的平穩期。

  公司的API調用量每天都在刷新紀錄,現金流像涓涓細流匯成江河般湧入公司帳戶。

  一切看起來都在軌道上高速運轉。

  華清嘉園工作室,

  陳陽把自己關了起來。

  他正在進行一項實驗,那就是訓練超越這個時代的大語言模型。

  陳陽給這場行動取了一個代號:巴別塔。

  深夜,客廳。

  空調開到18度,陳陽坐在三台並聯的顯示器前,屏幕上密密麻麻的代碼與日誌在流動。

  桌上散落著七八個空咖啡杯、三盒吃空的外賣、一堆揉皺的草稿紙。

  他已經在這把椅子上坐了十四個小時,眼睛布滿血絲,下巴冒出了青色的胡茬。

  旁邊的寫字板上畫了一張架構圖,密密麻麻的線條和方塊,像一張蜘蛛網。

  程序早就寫好了。

  那套他高中暑假就開始設計出來的架構,代碼已經調試完畢,理論上完全可行。

  但理論與實際能跑之間,隔著一道天塹。

  就像你設計了一張火箭的圖紙,畫得再漂亮,也得真正發射一次才知道能不能上天。

  這幾天經過實際運行,這是陳陽優化後的第七版了!

  「不對,還是不對。「

  陳陽揉了揉發酸的眼睛,把第七版也刪掉了。

  他靠在椅背上,盯著天花板發呆。

  陳陽閉上眼睛,腦子裡不斷閃過各種畫面。

  突然,一個念頭擊中了他。

  陳陽猛地坐直了身子。

  抓起筆,在一張白紙上瘋狂畫起來。

  「就是這個。「

  他轉向電腦,開始敲代碼。

  手指飛快地在鍵盤上跳動,屏幕上的字符像瀑布一樣往下滾。

  大模型預訓練,說白了就是三個字:餵數據。

  要把海量的文字塞進模型里,讓它自己去學習語言的規律。

  看得越多,學得越好,最後就能像人一樣理解和生成文字。

  聽起來簡單?

  一點都不簡單。

  首先,數據從哪來?

  陳陽花了快一年時間,讓星城那邊的團隊爬取了整個維基百科、幾百萬篇新聞報導、上千萬條論壇帖子、小說的片段,清洗、去重、格式化,最後整理出三套數據:

  第一套,訓練集,12.4GB。

  這是餵給模型的課本,讓它自己從海量文字里自學語言規律。

  對,沒錯就是自己學習,模型一開始是一個什麼都不知道的孩子。

  然後通過海量數據以及算法反饋。逐漸從數據裡面學習規律,最終找到答案。

  第二套,驗證集。

  這是提前準備好的隨堂測驗,題目和標準答案都是現成的。

  比如給模型一句話:「珠穆朗瑪峰多高「,標準答案是:「8848米「。

  模型回答完,跟答案一對,就知道它學得怎麼樣。

  驗證集有兩個用處。

  第一,防止死記硬背。

  如果模型在課本上的題越做越好,但隨堂測驗的分數不漲反降,那就說明它只是在背課本原文,換道新題就懵了。這叫過擬合,得趕緊調整。

  第二,判斷什麼時候該停。

  模型不可能無限進步。

  學到一定程度,該會的都會了,再學也沒什麼提升了。

  怎麼判斷到沒到這個點?

  就看驗證集的分數。

  一開始,分數會蹭蹭往上漲。

  然後漲得越來越慢。最後,曲線變平了,連著好幾輪分數都不動了。

  這就說明模型訓練完成,可以停了。

  再往下硬學,就是浪費時間。

  第三套,測試集。


  這是最後的期末考試。

  同樣是題目和標準答案,但模型在訓練過程中從來沒見過這套題。

  等訓練結束、驗證集曲線平穩之後,才拿出這套卷子做最終檢驗。

  為什麼要單獨留一套?

  因為驗證集雖然沒直接餵給模型,但你一直拿它來調整訓練策略,模型多少會間接學到一些規律。就像老師反覆用同一套題摸底,學生慢慢就摸到套路了。

  測試集不一樣,它從頭到尾沒告訴過模型。

  只有這套全新的題也能考高分,才能證明模型是真的學會了。

  三套數據,各司其職。

  課本、隨堂測、期末考,缺一不可。

  其次,算力夠不夠?

  這一塊因為有超算中心,所以已經能吊打99%的AI實驗室。

  但陳陽知道,還是不夠。

  遠遠不夠。

  他現在訓練的是一個一億參數的模型。

  就需要差不多十分之一算力,如果後續訓練更大參數的模型,這點算力遠遠不夠。

  模型的訓練參數越多,就越聰明,但需要的算力也越恐怖。

  按他的估算,這次動用的十幾台伺服器全力運轉,至少要跑三天三夜才能完成一輪訓練。

  中間任何一個環節出問題:Loss不收斂、顯卡過熱、內存溢出、代碼BUG。

  那麼一切就得從頭再來。

  最後也是最關鍵的:流程能不能跑通?

  預訓練不是按一下回車就完事了。

  數據要分批加載,模型要分布式並行,梯度要跨機器同步,檢查點要定時保存,任何一個環節卡住,整個流程就會崩盤。

  這套流程,陳陽寫了三萬多行代碼,調試了整整一周,依然不敢保證萬無一失。

  今晚,就是最後的驗證。

  凌晨5點38分,代碼寫完。

  陳陽深吸一口氣,手指懸在回車鍵上方。

  這一刻,他突然有點緊張。

  說實話,他也不知道這玩意兒能不能跑通。

  理論上是對的,邏輯上是通的。

  但理論和現實之間,往往隔著一道叫做玄學的鴻溝。

  多少看起來完美的設計,一跑起來就原地爆炸。

  「開始吧。「

  沒有繼續猶豫,陳陽敲下回車。

  屏幕上,程序開始運行:

  [系統]正在初始化模型……

  [系統]參數量:1億

  [系統]開始訓練……

  陳陽盯著屏幕,大氣都不敢出。

  前三十分鐘是最危險的。

  數據加載、模型初始化、第一次前向傳播、第一次反向傳播,任何一步出錯,程序就會直接崩掉。

  陳陽的目光像釘子一樣釘在屏幕上,手心全是汗。

  十分鐘。

  二十分鐘。

  三十分鐘。

  沒有報錯。

  他長出一口氣,但還不敢放鬆。

  接下來要看的是Loss值。

  Loss,翻譯過來是損失,可以理解成錯誤率。

  數字越高,說明AI越蠢,答案錯得越離譜。

  數字越低,說明它越聰明,離正確答案越近。

  第一個數字跳了出來。

  10.87,很高,但這是正常的。

  剛開始嘛,模型什麼都不懂,純粹在瞎矇。

  關鍵是接下來能不能降。

  陳陽盯著屏幕,等待下一輪結束。

  一億參數的模型,跑完一輪需要差不多三十分鐘。

  而要讓模型真正學會東西,至少需要跑一百多輪。

  也就是說,整個訓練至少要三天三夜。


  這是一場漫長的煎熬。

  第一天。

  [Epoch 5] Loss: 8.34

  [Epoch 12] Loss: 6.71

  [Epoch 20] Loss: 5.43

  Loss在穩步下降。

  陳陽每隔半小時就看一眼屏幕,確認曲線還在往下走。

  困了就灌咖啡,餓了就啃麵包,眼睛始終沒離開過那串跳動的數字。

  到了深夜,Loss降到了5以下。

  陳陽有點撐不住了,回臥室眯了幾個小時。

  第二天。

  下降速度開始變慢了,但還在降。

  這是正常的。

  就像爬山,越接近山頂,坡度越陡,每走一步都越來越難。

  陳陽盯著那條曲線,心裡默默計算。按這個速度,最終應該能收斂到2點幾。

  然後,問題出現了。

  下午三點,Loss卡在了2.41,死活不動。

  連續十幾輪,紋絲不動,曲線變成了一條水平線。

  陳陽的眉頭皺了起來。

  顯存沒爆,梯度沒消失,數據也在正常加載,到底卡在哪了?

  他排查了兩個小時,終於找到原因:學習率太大了。

  就像下山找最低點,步子邁太大,直接跨過了山谷,跳到對面去了。

  他把學習率調小,從斷點繼續跑。

  二十分鐘後,Loss開始鬆動:2.38。

  2.31。

  2.24。

  陳陽長出一口氣。

  第三天凌晨。

  窗外的天色從漆黑變成深藍,又從深藍變成魚肚白。

  陳陽這幾天都呆在這裡,胡茬冒了一臉,但此刻眼睛卻亮得嚇人。

  因為模型的曲線開始收斂。

  他死死盯著屏幕,看著最後幾輪訓練完成。

  Loss: 2.03。

  數據曲線平穩了下來,訓練完成了。

  此時窗外,天已經亮了,第一縷陽光穿透雲層,照進實驗室。

  陳陽長長鬆了一口氣,身體癱軟在椅子上。

  成了。

  架構跑通了,理論被驗證了。

  在椅子上休息了一陣。

  陳陽站起身,走到窗邊,窗外是漸漸甦醒的城市。

  樓下有人在遛狗,早餐店冒出白色的蒸汽,計程車載著乘客駛向遠方。

  沒有人知道,在這間不起眼的房間裡,一扇通往新世界的大門,剛剛被推開了一條縫。

  他低頭看了眼手機,屏幕上顯示著日期:2013年4月28日。

章節目錄