跳轉到

1.3 Dreamer 系列演進:從連續潛在動態(RSSM)到無像素依賴的純潛在空間學習#

前言:把「世界模型」從示範變成訓練範式#

如果 1.2 的 Ha 與 Schmidhuber 證明了世界模型的管線是可行的,那麼接下來的問題是:怎麼讓它變得好?答案是把「在環境中學習」改成「在模型中學習」——先學一個能預測未來的模型,再讓策略在這個模型的 imagination 中訓練。這個想法把世界模型從一個輔助元件提升為整個學習流程的中心。

Dreamer 系列正是這條路線的完整實現,由 Hafner 與他的合作者在 2019 至 2023 年間推出三個主要版本。Dreamer v1 出現在 2019 年的 ICLR,用一個可微的循環狀態空間模型取代了 MDN-RNN,並讓 actor-critic 直接在模型生成的軌跡上更新。Dreamer v2 在 2020 年發表於 ICLR,把離散的潛在狀態引入模型,並把整個系統刷到 Atari 與 DMC 的超人水準。Dreamer v3 在 2023 年發表於 Nature,以一種極度工程化的方式,把 Dreamer 的效能穩定地推廣到數百種不同的領域,包含 Minecraft、MineDojo 以及 150 個連續控制任務。

本節要處理的問題不只是「Dreamer 是怎麼工作的」,更要處理「這條演進線索最終指向哪裡」。答案在 2023 年之後愈來愈清楚:它指向一個完全不需要像素的世界模型——一個只用潛在狀態與獎勵訓練、與觀測重建脫鉤的模型。這個主張,正是第 6 章 JEPA 的核心。

在進入細節之前,讓我們先標明 Dreamer 在本章脈絡中的位置:它接續 1.2 的三模組管線,但把模組之間的關係徹底改變了。在 Ha 與 Schmidhuber 的系統裡,感知、記憶、策略是三個分開訓練、靠低維向量通訊的元件;在 Dreamer 裡,它們被統一到同一個可微的模型之中——感知編碼器是 RSSM 的一部分,記憶就是 RSSM 的循環狀態,而策略直接讀取這個狀態。這個從「三段拼接」到「一體」的演化,是理解 Dreamer 的關鍵。

RSSM:循環狀態空間模型的結構#

Dreamer 的第一步是把 Ha 與 Schmidhuber 的三段式管線改造成一個單一的、端到端可微的模型。核心是 RSSM(Recurrent State-Space Model)。

RSSM 的狀態 \(h_t\) 由兩部分拼接而成:一個是確定性部分 \(h_t^{\mathrm{det}}\) ,由 RNN 遞迴計算;另一個是隨機部分 \(h_t^{\mathrm{sto}}\) ,由一個分類變數 \(z_t\) 承載。遞迴關係如下:

\[ h_t = \mathrm{RNN}(h_{t-1}, a_{t-1}, [z_{t-1}]) = h_t^{\mathrm{det}} \,\Vert\, z_t \]

其中 \(\Vert\) 表示向量拼接,而 \(z_t\) 則由一個從確定性狀態抽樣出來的分類分佈產生:

\[ z_t \sim p(z_t \mid h_t^{\mathrm{det}}), \quad h_{t+1}^{\mathrm{det}} = f(h_t^{\mathrm{det}}, a_t, z_t) \]

這個設計的動機非常精準。純確定性 RNN 的問題是:它的預測只有一個模態,遇到岔路時必然把可能性平均掉——這正是 1.2 中 MDN-RNN 想解決的問題。純隨機狀態空間模型的問題則相反:它無法從觀測中推斷出「我現在處於什麼位置」,必須把整段歷史都塞進狀態。RSSM 讓確定性部分承擔記憶與長期一致性,讓隨機部分承擔不確定性,兩者拼接之後既保留多模態能力,又不必把整段歷史塞進網路。

KL balancing:兩種平衡機制#

訓練 RSSM 的核心難題在於,它有兩個對 \(z_t\) 的描述:後驗 \(q(z_t \mid h_t^{\mathrm{det}}, o_t)\) (看見了觀測)與先驗 \(p(z_t \mid h_t^{\mathrm{det}})\) (沒看見觀測)。模型訓練時用後驗(有資訊),但部署時只能用先驗(沒有未來觀測)。如果直接讓兩者對齊,梯度會把後驗拉向先驗,結果是模型在重建影像上表現極差。

Dreamer v1 提出的解法是 KL balancing:把 KL 項拆成兩個方向,分別給予不同的權重 \(\beta\) :

\[ \mathcal{L}_{\text{KL}} = \beta \, D_{\text{KL}}(q(z_t \mid h_t^{\mathrm{det}}, o_t) \,\|\, p(z_t \mid h_t^{\mathrm{det}})) + (1 - \beta) \, D_{\text{KL}}(p(z_t \mid h_t^{\mathrm{det}}) \,\|\, q(z_t \mid h_t^{\mathrm{det}}, o_t)) \]

第一項(方向由後驗到先驗)是讓先驗去追趕後驗,第二項(方向由先驗到後驗)是讓後驗保持有資訊。當 \(\beta < 0.5\) 時,後驗的權重較大,模型學到的後驗會更貼近真實資訊;當 \(\beta > 0.5\) 時,先驗獲得更多容量,用於改善 imagination 的品質。

兩種平衡機制:free bits 與 free nats#

Dreamer v3 進一步採用兩種平衡機制並用的策略:對離散潛在使用 free bits,對連續潛在使用 free nats。free bits 的意思是把 KL 的梯度在每個狀態上截斷在一個下限之內:

\[ \mathcal{L}_{\text{KL}} = \max\left( \beta \, D_{\text{KL}}(q \,\|\, p), \; \epsilon \right) \]

只要 KL 超過門檻 \(\epsilon\) ,模型就停止從後驗那條路徑取梯度,轉而專心把先驗學好。free nats 則是在連續情形下,把每一個維度的 KL 貢獻下限設為固定的 nat 數。兩者的共同哲學是:不要過度逼迫解碼器去榨取觀測資訊,寧可讓模型放棄一點重建品質,也要讓先驗保持可用。

這個機制的深層意義值得強調:它是一種主動放棄資訊的設計。在一般 VAE 裡,KL 越小越好;在 Dreamer 裡,KL 有一個「足夠即可」的下限。原因很實際——如果後驗與先驗差異太大,imagination 展開的第一步就會偏離真實軌跡,後面的所有步驟都建立在一個錯誤的起點上。寧可讓真實觀測的重建稍微失真,也要保證 imagination 的第一步是準的。

imagination 的地平線與回報計算#

另一個被低估的設計決策是 imagination 的長度。Dreamer v1 使用約 15 步的 imagination 地平線,並以 \(\lambda\) -return 在軌跡內做價值傳播。這是一個刻意保守的選擇:地平線越長,能納入的長期規劃資訊越多,但模型在長地平線上的誤差累積也越嚴重——這正是第 10 章要處理的複合誤差問題。

這裡存在一個根本的張力:世界模型既是學習的加速器,也是誤差的放大器。imagination 讓策略能看見更遠的未來,但看見的那個未來可能是模型自己編造的。Dreamer 的解法不是消除這個問題,而是用 KL balancing 保證先驗的品質、再用地平線長度限制誤差的累積速度。這種「用工程手段管理模型不確定性」的思路,是第 8 章的價值導向軌跡修剪(第 8.3 節)的先聲。

Dreamer v2:離散潛在與 straight-through 梯度#

Dreamer v2 的兩個關鍵改動,都直接針對 v1 暴露的問題。

第一個改動是離散潛在。v1 用的是高斯連續潛在,v2 改用分類變數:狀態由 32 組分類變數組成,每組有 32 個類別,總潛在容量是 \(32 \times 32 = 1024\) 個離散位元。這樣做的好處是每個位元都能獨立地傳遞二元資訊,模型可以學到「這裡有一個物體/沒有一個物體」這類明確的布林特徵,而不是讓高斯分佈去承載這類資訊。

但離散變數不可微分,無法直接反傳。Dreamer v2 使用 straight-through 梯度估計器:在前向傳播時取類別的 one-hot 編碼,在反向傳播時把從上游收到的梯度原封不動地直接傳給類別 logits:

\[ \frac{\partial z_t}{\partial \text{logits}} \approx \mathbf{1}_{\text{one-hot}} \]

這個技巧在量化感知訓練中是標準配備,它讓離散潛在能與連續網路一起端到端訓練。它的代價是估計有偏(bias),因為實際上分類變數的分佈是不可微的,straight-through 只是一個啟發式的替代。

第二個改動是 actor-critic 完全在 imagination 中訓練。Dreamer v2 的策略網路不直接看真實觀測,只看模型狀態;它的價值目標也不是真實環境的折扣回報,而是模型產生的 imagined return。整個流程是:模型在真實環境中收集資料 → 從資料中學習世界模型 → 用世界模型生成 imagined trajectories → 在 imagined trajectories 上更新 actor 與 critic。

這個架構的結果非常驚人:在 Atari 100k(只用十萬幀真實互動)上,Dreamer v2 達到了接近人類中位數的分數;在連續控制的 DeepMind Control 上,多數任務達到超人水準。作為對照,同樣只用十萬幀的 DQN 在多數 Atari 遊戲上的得分遠低於人類。樣本效率的差距,正是 imagination 的直接兌現。

值得注意的是,Dreamer v2 同時使用一個隨機先驗來注入探索:在 imagination 中,actor 的輸出分佈會混入一個熵正則項與一個隨機先驗項,鼓勵策略去探索模型不確定的區域。這個設計把第 1 章講過的「遮蔽與噪聲」問題帶進了 imagination 迴圈內部。

為什麼「想像中的學習」能提升樣本效率#

這個問題值得單獨回答,因為它是世界模型對整個 AI 領域最重要的貢獻。

傳統的 actor-critic 有一個嚴重的浪費:每一筆真實互動(走一步、拿一次獎勵)只能用來做一次梯度更新。真實互動昂貴、有噪聲、不可重來。想像中的學習則把一次互動的價值擴大:用同一段真實軌跡,可以展開數百步的 imagined trajectory,每一步都產生一個學習訊號。

更本質的原因是梯度訊號的質量。在真實環境中,策略更新面對的是稀疏的獎勵與隨機的未來;在 imagination 中,未來是由模型生成的,因此可以計算出「如果我現在採取這個動作,未來的價值估計是什麼」。這使得 actor-critic 的學習訊號不再依賴真實環境的回饋延遲,而是直接來自模型內部的價值傳播。價值函數的傳播深度也大幅增加——真實環境的信用分配通常只能跨幾步,imagination 裡卻能跨數十步。

Dreamer v3 對這條路線做了一個重要延伸:在 Minecraft 上純粹以 imagination 訓練出一個能鑿礦、能合成工具的策略,而且可以在沒有任何真實遊戲獎勵的情況下學習某些技能。這證明了 imagination 的能力上限遠高於當時的直覺。

同時值得記錄的是 Dreamer v3 在人類示範資料上的表現:在 Minecraft 中,它能在一小段人類示範影片之後就學會鑿礦,顯示模型內部的先驗可以結合極少量示範快速啟動。這個結果印證了 1.1 提出的分工原則——感知與記憶可以先於策略被訓練,而 imagination 讓策略的學習不必等待大量真實獎勵。

imagination 也是一種資料生成器#

從更廣的角度來看,imagination 迴圈其實是一個內部的資料生成器。真實軌跡提供「接下來會發生什麼」的少量錨點,而模型生成的大量 imagined trajectories 提供密集的學習訊號。這與第 9 章「以數位孪生作為低成本訓練場」的思路是同一個機制,只是規模與應用場景不同。

這也解釋了為什麼 Dreamer 系列的影響不限於強化學習:它把「模型內部經驗」提升為一等公民,讓任何可以定義狀態轉移的領域——機器人、遊戲、藥物分子設計——都能套用同一個範式。第 4 章的自迴歸生成、第 5 章的擴散生成,都是在「生成什麼樣的內部經驗」這個維度上的延伸。

Dreamer v3(2023):穩定化技巧的集大成#

Dreamer v3 的貢獻在於把所有超參數都固定成「不需要調整」的值,並讓同一組設定跨數百個領域運作。核心技巧有三個。

symlog 雙重變換:獎勵與回報的尺度在遊戲中可能跨越數個數量級(從 0.1 到 1000),直接回歸會讓梯度爆炸。symlog 定義為:

\[ \operatorname{symlog}(x) = \operatorname{sign}(x) \left( \log(|x| + 1) \right) \]

它的逆變換是 \(\operatorname{symexp}(x) = \operatorname{sign}(x) \left( \exp(|x|) - 1 \right)\) 。關鍵在於 symlog 對回報與折疊回報(即把多步回報壓縮到一個尺度)都可以同時使用,讓不同尺度下的回報具有可比的數值意義。

percentile return 尺度化:不再假設回報的絕對值有意義,而是只保留回報在近期所有軌跡中的百分位。這讓演算法對任務獎勵尺度的變化完全免疫——不需要知道任務是「走一步得 0.01 分」還是「通關得 100 分」。

雙重拓撲(two-hot encoding):在分類分佈上回歸回報時,不用單一的 one-hot 目標,而是把目標值夾在兩個相鄰類別之間,並按距離分配權重。這讓分類分佈的回歸具有更平滑的梯度性質。

這些技巧看似瑣碎,但正是它們讓 Dreamer v3 能夠「一個設定跑遍數百個任務」。對本書而言,這個事件的意義是:世界模型從一個需要針對每個領域調參的技巧,變成了一個可以規模化部署的基礎設施。

從像素重建到純潛在空間學習#

現在來到本節的核心對照。Dreamer 的世界模型訓練目標始終包含一個觀測重建項:

\[ \mathcal{L}_{\text{obs}} = -\log p(o_t \mid h_t, z_t) \]

這個項在 Dreamer v3 中甚至仍然存在。但它真的是必要的嗎?

我們來看一個對照的損失函式——特徵預測損失:

\[ \mathcal{L}_{\text{pred}} = \left\| \phi(o_{t+1}) - \hat{\phi}(h_{t+1}, z_{t+1}) \right\|^2 \]

其中 \(\phi\) 是一個(可能凍結的)編碼器, \(\hat{\phi}\) 是模型內部對下一幀特徵的預測。兩者的差別在於:第一個要求模型能重建像素,第二个只要求模型能預測某種抽象特徵。

這個差別看起來細微,實際上極為重要。像素重建是一個極其嚴苛的目標——要重建出雲的形狀、樹葉的紋理、牆壁的污漬,模型必須在內部記住這些與決策毫無關係的細節。而特徵預測只要求模型記住「這裡有一棵樹」這種層級資訊。

更重要的是,特徵預測可以完全不需要像素。若 \(\phi\) 是一個獨立的、預先訓練好的編碼器(例如第 6 章要介紹的影像編碼器),那麼模型訓練時只需要 \((h_t, z_t, \phi(o_{t+1}))\) ,完全不需要還原 \(o_{t+1}\) 本身。在極端情況下,甚至可以把 \(o_t\) 也丟掉,讓模型完全在一個純潛在空間裡運作:輸入是編碼特徵而不是像素,模型的所有狀態、損失與 imagination 軌跡都在潛在空間中進行。

這個演進方向在 2023 年之後被越來越多地稱為 「無像素依賴」或「純潛在空間學習」。它的邏輯鏈是完整的:既然我們已經相信「狀態是 \(s_t\) 的緊湊充分統計量近似」(1.1 的結論),那麼為什麼還要堅持這個統計量必須能還原出原始像素?一旦放棄這個要求,模型就可以用更少的算力、更多的抽象層級、以及在某些情況下完全合成或半合成的資料來訓練。

而這正是 JEPA(Joint Embedding Predictive Architecture) 的核心主張。LeCun 在 2022 年提出的 JEPA 架構明確宣示:不要預測像素,預測抽象表示。第 6 章將會展開它的完整設計——包括特徵空間的崩塌問題、VICReg 與停止梯度的防禦機制,以及從 I-JEPA 到 V-JEPA 的演進。

一張對照表:三代架構的差異#

面向 Ha 2018 Dreamer v1–v3 MuZero
狀態表示 VAE 潛在 \(z_t\) RSSM 拼接 \(h_t^{\mathrm{det}} \Vert z_t\) 隱含狀態 \(s^0\) 與 \(s^k\)
狀態類型 連續、壓縮像素 確定性記憶加離散隨機 由表示函式自回歸推導
主要損失 重建加 KL、MDN 似然 重建加 KL 加回報預測 價值加策略加 unroll 一致性
觀測重建 需要 需要(v3 仍保留) 不需要
策略學習 CMA-ES 演化搜尋 在 imagination 中 actor-critic 在搜索中改進策略網路
主要用途 示範可行性 樣本效率高的策略學習 為搜索提供可用的模型

小結#

Dreamer 系列的演進可以濃縮成一條線:把狀態從「像素的壓縮」推向「決策的充分統計量」。RSSM 用確定性加隨機的拼接解決了記憶與多模態的取捨,KL balancing 保證了先驗在 imagination 中可用,離散潛在帶來更明確的語意表徵,symlog 與 percentile return 則讓這套方法能跨越數百個領域。而當我們把重建項從目標函式裡拿掉,剩下的那個核心主張——「模型只需要預測抽象特徵」——就直接指向了第 6 章的 JEPA。

但在另一條線上,有一群人走了更激進的路:連特徵預測都不做,只學一個對決策有用的隱含動力學。那是 Schrittwieser 等人的 MuZero,也是 1.4 的主題。