JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

為什麼複製會崩潰:共變量偏移與 DAgger

行為克隆出的策略,活在一個它的訓練資料從未見過的世界。我們將診斷複合誤差陷阱,並用 DAgger 來修補它。

複合誤差陷阱

監督式學習假設訓練與測試資料來自同一個分布。行為克隆卻悄悄違反了這個假設。訓練時,狀態取自專家的行為;部署時,狀態卻取自學習者自己的行為——而學習者並不完美,於是它會造訪專家絕不會去的狀態。

每一個微小的動作誤差都會把代理人從專家路徑稍微推開一點。這讓它落入一個稍微陌生的狀態,其預測就稍差,於是又被推得更遠,如此循環。在序列決策問題中,每步誤差率 ε 可能讓整段長度為 T 的歷程的總期望錯誤膨脹到約 ε·T²——是二次方而非線性。一個在保留影格上看似 99% 準確的策略,仍可能直接把車開出路面。

与监督学习不同,智能体的动作会反馈回环境,因此每个动作误差都会改变下一个状态——正是这个闭环让克隆误差不断累积。

智能体—环境强化学习循环示意图:智能体执行动作,环境返回新状态和奖励,如此循环往复。

為它正名:共變量偏移

這個現象的精確名稱是共變量偏移(covariate shift):輸入分布(狀態,即共變量)在訓練與測試之間不同,但「給定狀態下的正確動作」這個條件關係維持不變。行為克隆最佳化的是錯的期望值——專家狀態分布下的平均損失——而我們真正在意的,是學習者狀態分布下的損失。

d_{\pi_\theta}(s)\;\neq\;d_{\pi^{*}}(s),\qquad \pi^{*}(a\mid s)\ \text{unchanged}

协变量偏移:学习者访问的状态分布与专家不同,而每个状态对应的正确动作保持不变。

這樣看來,修正之道在原理上顯而易見:從學習者的狀態分布取得訓練資料。但這裡有個雞生蛋的難題——我們需要學習者所造訪狀態的專家標籤,而專家自然只會造訪它自己的狀態。我們需要一個方法去問專家:「在我誤打誤撞進來的這個狀態下,你會怎麼做?」

DAgger:不斷追問專家

DAgger(Dataset Aggregation,資料集聚合)把這個迴圈閉合起來。先用當前的學習者產生軌跡,接著對它造訪過的每一個狀態,向專家詢問它原本會採取的動作。把這些新標註的狀態加進一個不斷成長的資料集再重新訓練,然後反覆進行。由於新狀態來自學習者,你終於是在「未來真正會被測試」的那個分布上訓練了。

  1. 從一個策略開始(例如先做一輪行為克隆),並令聚合資料集 D = 原始示範。
  2. 在環境中執行當前策略,蒐集它實際造訪到的狀態。
  3. 對每個造訪到的狀態,向專家詢問正確動作,並把這些 (狀態, 專家動作) 對加進 D。
  4. 在整個聚合後的 D 上重新訓練策略,接著從第 2 步重複。
D = expert_demos                       # initial aggregated dataset
policy = train_bc(D)
for i in range(num_iterations):
    states = rollout(policy)           # learner's OWN state distribution
    labels = [expert.action(s) for s in states]   # query the expert here
    D = D + list(zip(states, labels)) # AGGREGATE, never discard
    policy = train_bc(D)               # refit on everything seen so far
DAgger 把策略執行與專家查詢交錯進行;資料集只增不減,這正是「聚合」之名的由來。

代價與注意事項

DAgger 用「訓練時與專家的互動」換取資料。當專家是一個演算法時(例如你想把一個緩慢的規劃器蒸餾成快速的反應式策略),這很便宜;但當專家是人類時,代價就高昂又彆扭,因為人得為學習者闖進去的脫離情境狀態貼標籤——有時那些狀態危險、有時根本毫無道理。

DAgger 也繼承了行為克隆的上限:它最多只能追上它所查詢的專家,而一個帶雜訊或次優的專家會封死效能。儘管如此,DAgger 仍是處理共變量偏移的經典解法,也是更豐富方案的基石——這些方案把模仿與獎勵結合起來,我們會在示範引導式強化學習中看到。

\text{BC: }\;J(\pi^{*})-J(\pi)\;\lesssim\;\epsilon\,T^{2}\qquad\text{DAgger: }\;J(\pi^{*})-J(\pi)\;\lesssim\;\epsilon\,T

DAgger 为何更优:行为克隆与专家的差距会随时间跨度 T 二次增长,而 DAgger 使其保持线性。