Skip to content

CS224R L7:Offline RL——不能再互動時,Q-learning 為什麼會壞掉

2026年9月30日1 分鐘
TL;DRCS224R Spring 2026 第七講處理一個問題:手上只有一批別人收的資料、不能再跟環境互動時,要怎麼學出比資料更好的 policy。直接拿 SAC 這類 off-policy 演算法來訓練會壞掉,因為 Q-function 在資料沒出現過的動作上亂估,policy 又專挑被高估的動作。投影片給兩類解法:只在資料裡的動作上訓練 policy(filtered BC、AWR、AWAC),以及用不對稱的 expectile loss 估計比資料更好的 policy 的價值、完全不查詢資料外的動作(IQL)。兩者都能做到模仿學習做不到的事:把不同軌跡的好片段拼起來。

🌏 English version

來源年份:依據 Spring 2026 的 07_cs224r_offline_rl_2026 投影片(課表日期 2026-04-22)。配套影片是 Spring 2025 L7 錄影(補充),標題相同,但切分不同:2025 的 L7 投影片把「implicit policy constraint」和「conservative methods」(CQL)並列為兩類方法,課表也把 CQL 列為指定閱讀;2026 版的第二類改成 IQL 的 expectile 做法,指定閱讀只剩 IQL。看影片時遇到 CQL 的段落,是 2026 投影片沒有的內容。本文是 Stanford CS224R 導讀系列的第 9 篇。

前面幾講(L3 policy gradients 到 L6 Q-learning)都有一個共同假設:policy 可以一邊學、一邊到環境裡收新資料。CS224R 的第七講拿掉這個假設。現在你只有一批固定的資料,不能再互動,要怎麼學?

投影片把當天的學習目標寫成三條:

  • offline RL 的關鍵挑戰是什麼
  • 兩類 offline RL 核心技巧,以及它們為什麼有效
  • offline RL 怎麼做到比模仿學習更好

這講也是 HW3 的理論基礎,投影片在 AWAC 和 IQL 兩頁都直接寫「你會在 HW3 實作它」。

先回顧:線上 RL 的四種 model-free 演算法

投影片開頭用一張表收束前半學期:

Vanilla PGPPO 類Off-policy actor-critic(如 SAC)Q-learning
用什麼資料on-policy技術上是 off-policy,通常稱 on-policyoff-policy,有 replay bufferoff-policy,有 replay buffer
怎麼變成 off-policy不適用importance weights用 TD 擬合 Q,從 π 取樣 a用 TD 擬合 Q*
擬合哪個 value不擬合V^πQ^πQ*

最右邊兩欄已經能用舊資料了。那 offline RL 還有什麼難的?這講後半就是在回答這個問題。

為什麼需要 offline RL

線上 RL 的流程是「收資料 → 用最新或全部資料更新 policy → 再收資料」。Offline RL 只有前半:給一份靜態資料集,在上面訓練 policy,結束。

投影片列三個適用情境:

  1. 想利用別人或既有系統已經收好的資料
  2. 線上收資料有風險、不安全
  3. 重複使用以前收過的資料,不要每次重收(例如之前的實驗、專案、機器人或其他機構的資料)

投影片也提醒兩種混合做法:先 offline 預訓練再 online 微調,以及反覆做 offline 訓練的「batch online RL」。

形式上,資料來自某個未知的 behavior policy πβ(可能是多個 policy 的混合),目標卻是在學到的 policy πθ 下最大化期望獎勵。兩個分佈不一樣,這就是 distribution shift。資料來源的例子有:人類收集、手工設計的控制器、之前的 RL 訓練,或以上混合。

Stitching:offline RL 跟模仿學習差在哪

投影片用一張九個狀態的圖說明。資料裡有兩條不完整的好行為:s1 → s3 是好的,s7 → s9 也是好的,走到 s9 得 +1,走到 s6 得 −1。問題是:能不能學出一個從 s1 一路走到 s9 的 policy?

投影片丟出兩個問題:

  1. 用一般模仿學習學到的 policy 會做什麼?
  2. 用 RL 學到的 policy 應該做到什麼?答案跟 value function 用 TD 還是 Monte Carlo 學有沒有關係?

投影片給的結論是三句話:

  • 模仿學習的表現沒辦法超過收集資料的 policy
  • offline RL 可以利用獎勵資訊,超過 behavior policy
  • 好的 offline RL 方法能把好的行為**拼接(stitch)**起來

第二題投影片沒有直接寫答案。我的理解是:TD 用下一個狀態的估計值當目標,只要兩條軌跡經過同一個狀態,後段軌跡的高價值就能往回傳到前段;Monte Carlo 只加總同一條軌跡實際拿到的獎勵,傳不過去。後面 AWR 那頁寫「Monte Carlo 估計雜訊大」,IQL 則改用 TD,可以對照著讀。

為什麼不能直接拿 off-policy 演算法來用

SAC 這類 off-policy actor-critic 本來就能用 replay buffer 裡的舊資料。把 buffer 換成一份固定資料集,會發生什麼事?

關鍵在 critic 的目標值 r + γ·E_{a′~πθ}[Q(s′, a′)]。這裡的 a′ 是從正在學的 policy 取樣,很可能是資料裡從沒出現過的動作(out-of-distribution,OOD)。投影片畫了一條隨機初始化的 Q(s′, a′) 曲線,只有資料支撐範圍內被訓練過,範圍外的值是隨便的。接著就會連鎖出錯:

  • Q-function 在 OOD 動作上不可靠
  • policy 會去找 Q-function 過度樂觀的動作
  • policy 更新之後,Q 值被嚴重高估

投影片也給了另一個角度:學到的 policy 偏離 behavior policy 太遠。下一講開頭的複習補上一句關鍵差別:線上 RL 裡,新 policy 收來的資料會在之後修正這些錯誤;offline RL 沒有新資料,所以要更保守。

投影片說得很直接:怎麼減少高估,就是 offline RL 方法的核心目標。

第一類技巧:只在資料裡的動作上訓練 policy

Filtered behavior cloning

有獎勵標註的話,最簡單的做法是只模仿好的軌跡:

  1. 依 return 排序所有軌跡
  2. 只留前 k%
  3. 對留下的資料做 behavior cloning,最大化 log πθ(a | s)

投影片評它「非常原始」,所以正好拿來當比較的 baseline。HW3 的 PointMass 題也用它當對照組。

Advantage-weighted regression(AWR)

比「留或不留」更細的做法,是依每個動作有多好來加權。衡量動作好壞的工具是 L4 講過的 advantage:

θ ← argmax_θ  E_{(s,a)~D} [ log πθ(a | s) · exp(A(s, a)) ]

這仍然是模仿學習,只是每筆資料乘上一個權重。投影片附了一個旁註:可以證明這個加權目標近似於「在 KL(π‖πβ) < ε 的限制下最大化 Q」,出處是 Peters 等人的 REPS 和 Rawlik 等人的 psi-learning。換句話說,只在資料的動作上做加權模仿,等於隱含地把 policy 綁在 πβ 附近。

接下來的問題是 advantage 怎麼估。AWR(Peng 等人 2019)的做法最簡單:用 Monte Carlo 擬合 V^πβ,advantage 就是實際 return 減掉 V。完整演算法兩步:擬合 value function,再用 exp(advantage / α) 加權模仿,α 是超參數。

投影片列的優缺點:

優點缺點
簡單Monte Carlo 估計雜訊大
完全不查詢、也不在 OOD 動作上訓練估的是 πβ 的 advantage,比 πθ 弱

投影片還留了一題:如果 πβ 是確定性的,你會學到什麼?值得停下來想。

AWAC:改用 TD 估 advantage

要估目前 policy πθ 的 advantage,可以改用 TD 擬合 Q^πθ,advantage 是 Q(s, a) − E_{ā~πθ}[Q(s, ā)],再用它做 AWR 式的更新。投影片把這叫做「advantage-weighted actor-critic」,也就是 AWAC。

優點缺點
得到的是目前 policy πθ 的 Q,不是 πβ 的TD 目標要查詢 OOD 動作的 Q 值
policy 仍然只在資料的動作上訓練

投影片在這裡也提到一個替代寫法:TD 目標裡的 a′ 改從資料取樣(a′ ~ D)。於是逼出這講的關鍵問題:能不能估計比 πβ 更好的 policy 的 advantage,同時完全不查詢 OOD 動作?

第二類技巧:不查詢 OOD 動作,也能估更好的價值

想法:不對稱的損失

如果 TD 目標裡的 a′ 從資料取樣,得到的是 Q^πβ,也就是 behavior policy 的價值。投影片畫了一張 V(s) 的直方圖:同一個狀態下,資料裡不同動作的 Q 值有高有低。一般的 L2 損失會學到平均值 E_{a~πβ}[Q(s, a)];我們想要的是「資料支撐範圍內最好的 policy」的價值,也就是分佈偏高的那一端。

工具是 expectile regression。它把 L2 損失改成不對稱:誤差在一側乘 λ,另一側乘 1 − λ。調整 λ,估計值就會往分佈的高端或低端移,而不是停在平均值。

IQL 的完整演算法

投影片列的 Implicit Q-Learning(Kostrikov、Nair、Levine,ICLR 2022)是三步:

  1. 擬合 V:對 V(s) − Q̂(s, a) 用 expectile loss,λ 取小於 0.5 的值
  2. 更新 Q:一般的 MSE,目標是 r + γ·V̂(s′)
  3. 抽出 policy:用 AWR,權重是 exp((Q̂(s, a) − V̂(s)) / α)

注意符號方向。 投影片把損失寫在 V − Q 上,所以取「小的 λ」;IQL 原論文和 HW3 PDF 把損失寫在 Q − V 上,取的是大於 0.5 的值。兩種寫法都是要 V 落在偏高的 expectile,做 HW3 時別被方向搞混。

投影片列的優點:

  • 完全不需要查詢 OOD 動作
  • policy 仍然只在資料的動作上訓練
  • actor 和 critic 的訓練解耦,計算上很快

名字的由來也寫在投影片上:policy improvement 是隱含在 expectile 裡完成的,所以叫 implicit Q-learning。

整理:這講的三個技巧

投影片最後一頁的總結:

  • 為什麼要 offline RL:線上資料很貴,重用 offline 資料是好事
  • 關鍵挑戰:πβ 和 πθ 之間的分佈差異,導致 Q 值被高估
  • 技巧:
    1. filtered 或 weighted 模仿學習是簡單的 baseline
    2. 只在資料的動作上監督,隱含地把 policy 限制在 πβ 附近
    3. 用不對稱損失估計比 πβ 更好的 policy 的價值
  • Trajectory stitching 讓 offline RL 能勝過模仿學習

下一講開頭會再用一頁複習這兩個關鍵想法,並舉一個機器人 post-training 的實際例子。

今晚可以做的事

拿紙畫出投影片那張九狀態圖,假設資料只有兩條軌跡:s1 → s2 → s3 → s4 → s6(得 −1)和 s7 → s8 → s3 → s5 → s9(得 +1)。這兩條軌跡是我為了練習自己編的,不是投影片上的原始資料。分別用 Monte Carlo 和 TD 算一次 V(s3)、V(s2),看看哪一種會讓「從 s1 出發」的 policy 知道該往 s9 走。算完再回頭讀 filtered BC 那段:只留 return 最高的軌跡,它會學到什麼?

延伸閱讀

系列導覽:上一篇 HW2:線上 RL|下一篇 L8:獎勵從哪裡來|系列總覽

參考資料