先破壞,再撤銷破壞:一種生成方式
你已經知道語言模型如何生成:它一遍遍預測下一個詞元,把概率分布變成文章。圖像生成走的是一條更奇怪、乍聽幾乎反過來的路。今天的主流做法是[[diffusion-model|擴散模型]],它的核心想法是:與其學會*畫*出一張圖,不如學會*清理*一張圖。訓練一個網絡從輕微損壞的圖像中去掉一點噪聲,再把這門本事接連用上幾千次,就能把純粹的雪花點變成一張照片。
它的訓練設置妙在完全自監督,根本不需要任何人工標註。取一張真實圖像,加進一撮量好的隨機高斯噪聲,再問網絡:*我剛加的是什麼噪聲?* 既然是你加的,你就知道確切答案——監督目標白來。在從幾乎只有幾點斑到完全雪花的每一個損壞程度上都這麼做,網絡就靠辨認「什麼不該在那兒」,漸漸學會了「真實圖像長什麼樣」的形狀。這個加噪方向叫前向過程;模型真正學會的清理方向叫逆向過程。
要造一張全新的圖,你從純噪聲起步——一屏不像任何圖像的隨機雪花——再把學到的清理步驟一連跑上許多次。每一步都把雪花往「說得通」的方向輕推一絲,足夠多步之後,一張連貫的圖像就析出了,像一張反向顯影的拍立得。關鍵在於結果是*全新*的:它不是從數據庫裡檢索出來的,也不是訓練圖片的拼貼,而是從模型吸收的那個分布裡抽取的一個新樣本——這正是擴散之所以是生成式方法、而非查表的原因。
為噪聲掌舵:文本到圖像與潛空間擴散
把噪聲清理成*某張*說得通的圖已經很厲害了,但 Stable Diffusion 或 DALL·E 這類工具真正的魔力,在於你能說出你想要什麼。這就是[[text-to-image|文本到圖像]]生成,機制叫條件化:在每一個去噪步驟,網絡拿到的不只是帶噪圖像,還有你那段提示詞的編碼。於是去噪器不再只是朝「任何真實圖像」推,而是朝「一張與*這些詞語*相符的真實圖像」推。這段文本編碼通常來自一個對比訓練的視覺—語言模型,正是下一節要見到的那座橋。
這裡有個現實的卡點:一張高分辨率圖像有數百萬像素,直接在全部像素上跑幾千次去噪貴得嚇人。讓圖像生成便宜到能在筆電上跑的解法,是[[latent-diffusion|潛空間擴散]]。不在原始像素空間裡做擴散,而是先把圖像經一個自編碼器擠進一張小得多的潛網格——一段保留有意義結構、丟掉像素級瑣碎細節的壓縮編碼。整套加噪—去噪的舞蹈都在這個小小的潛空間裡完成,最後一刻才把成品潛編碼解碼回全分辨率像素。
真正幹去噪活的主力,通常是一個 [[u-net|U-Net]]——就是你在視覺那一級見過用於分割的那種「帶捷徑的編碼器—解碼器」形狀。它先下採樣再上採樣的對稱路徑,讓它能在一趟裡同時琢磨粗略佈局(「一隻狗,居中,朝左」)和精細紋理(「一根根毛髮」),而跳躍連接則不讓銳利的細節在壓縮中丟失。更新的系統會把 U-Net 換成 transformer 骨幹,但「條件化加去噪」這套配方不變。
noisy = pure_noise
for t in reversed(range(T)): # many denoising steps
pred_noise = unet(noisy, t, text_embedding)
noisy = step_back(noisy, pred_noise, t) # remove a little
image = decode(noisy) # latent -> pixels讓詞語與像素共享同一個空間
一個在像素上訓練的模型,怎麼會懂「一隻柯基太空人」這句話?把它們連起來的結締組織,是[[multimodal-model|多模態模型]]——它把不同種類的輸入(文本、圖像、音頻)映射進同一個共享表示,使相關的事物無論來自哪種感官都落在彼此附近。標誌性的例子是 [[clip-vision-language|CLIP]]。它在從網上抓來的數億個圖—文配對上訓練,目標很簡單:讓一張圖像的嵌入靠近它真正配文的嵌入,而遠離其他圖像的配文。
那套對比訓練就是全部的訣竅。訓完之後,一張海灘的圖與「陽光沙灘」這幾個字,會落在共享空間裡幾乎同一個地址,而「雪山」則落得老遠。一旦詞語與圖像共用坐標,你就白得到一堆好處:零樣本分類(把一張圖的嵌入與若干候選標籤詞的嵌入比一比——無需任何針對任務的訓練)、按描述搜圖,以及上一節裡為擴散模型掌舵的那個文本條件信號。CLIP 正是文本到圖像系統知道「太空人」該長什麼樣的原因。
同樣的想法遠不止用於圖像。音頻可以轉成聲譜「圖」用同樣的方式嵌入;視頻再添一根時間軸;甚至蛋白質結構和表格數據都能被投射進共享空間。這套配方驚人地統一:為每種模態挑一個編碼器,訓練時讓意思相同的事物落到一處,於是一個模型忽然就能在不同感官之間翻譯。正是這種統一——通往同一個房間的不同扇門——才是人們說一個模型真正*多模態*,而非只是給文本模型硬接上一句圖像配文,所指的意思。
基礎模型:一個底座,許多活兒
退一步看,貫穿整級台階的一個模式便豁然聚焦。語言模型、CLIP 和擴散模型都共用一套方法:在一大堆幾乎沒標註的數據上、用自監督目標訓練一個超大網絡,再把這同一個底座適配到一大群下游任務。這樣被使用的模型,就叫[[foundation-model|基礎模型]]——這個詞命名的是*角色*,而非架構。同一個訓好的 CLIP,僅僅靠被指向不同的活兒,就能化身分類器、搜索引擎和擴散方向盤。
這也是為什麼最前沿的系統越來越默認就是多模態的。ChatGPT 這類產品背後的前沿系統,不再把文本模型和圖像模型分別關在不同盒子裡;它們通過同一個網絡吃進文本、圖像和音頻,也能產出其中好幾種。基礎模型的觸角還遠伸出聊天之外——它們摺疊蛋白質、預報天氣、判讀醫學影像。這個時代的教訓,與其說是「為每個問題造一個聰明模型」,不如說是「造一個寬廣的底座再去適配它」——這種直覺有時被概括為:讓規模和通用方法來挑重擔。
值得把這套*為何*奏效說清楚,因為誠實的答案有一部分是「我們並不完全清楚」。從經驗上看,當你把數據、參數和算力一起做大,性能會平滑而可預測地提升——這就是悄悄支撐整個領域的[[scaling-laws-capability|規模律]]。但這些定律描述的是損失下降,而非理解上升;它們是一種觀察到的規律性,而非對任何具體能力的保證,更隻字未提觸及人類級推理。把它們當作一條可靠的工程趨勢,而不是一則預言。
這些模型能做什麼,又不能做什麼
人們很容易把一張驚艷的生成圖過度解讀為「理解」的證據。擴散模型學到的,是一張關於「圖像通常長什麼樣」的極其豐富的統計地圖——但它沒有任何關於物理、解剖或事實的模型。這就是為什麼手曾經長出六根指頭、圖裡的文字變成亂碼、倒影違背幾何:模型匹配的是「看上去說得通的像素」之*貌*,而不是在對一個世界做推理。同樣的告誡也適用於多模態聊天模型,它會信誓旦旦地描述圖裡根本沒有的東西——這正是你在大語言模型那一級見過的幻覺的視覺表親。
這裡也有實實在在的倫理分量,它們值得被平實地點名,而不是恐慌或含糊帶過。這些系統是在海量抓取的人造圖像與文本上訓練的,這就給那些作品被捲進數據堆裡的創作者,留下了關於同意與版權的未決問題。同一種讓藝術工具令人愉悅的生成能力,也讓逼真偽造真實人物變得廉價可得。這一切都不需要模型懷有惡意或具備「智能」——它們只是觸角廣闊的尋常工具,責任落在人們如何構建與部署它們之上。