解析)
做強化學習的朋友應該都有過這種經(jīng)歷一個任務拿單層策略端到端去訓狀態(tài)空間稍微大一點、回報稍微稀疏一點訓練曲線就趴在地上不動。這時候最直覺的想法就是把任務拆成幾個子目標讓智能體先學會一步步逼近中間狀態(tài)再完成最終目標。分層強化學習Hierarchical Reinforcement Learning, HRL就是沿著這個思路走的而繞不開的一篇工作是 NeurIPS 2018 上的 HIRO——Data-Efficient Hierarchical Reinforcement Learning全稱是 Hierarchical Reinforcement Learning with Off-policy Correction。HIRO 要解決的痛點很明確以往分層方案雖然思路優(yōu)雅但訓練起來又慢又不穩(wěn)。原因也不難理解——高層策略在學低層策略也在學兩者共享一條因果鏈導致經(jīng)驗數(shù)據(jù)存在嚴重的非平穩(wěn)性老樣本一轉(zhuǎn)眼就過期了。HIRO 用兩招把這個問題按下去目標再標記goal relabeling和 off-policy correction讓高層策略可以放心地復用過去收集的離線數(shù)據(jù)從而把數(shù)據(jù)效率拉到和普通 off-policy 方法一個水平。這篇文章適合三類讀者想系統(tǒng)搞懂分層強化學習原理的研究者想在連續(xù)控制任務里復現(xiàn) HIRO 的工程師以及正在做長時域、稀疏獎勵任務苦于端到端策略訓不動的同學。我會把算法拆開講清楚再把我復現(xiàn)和調(diào)參過程中踩過的坑一并整理出來。1. 項目概覽HIRO 到底在解決什么問題1.1 端到端強化學習的瓶頸在哪里先用一個生活化的類比。假設你要開車去一個陌生城市全程不做規(guī)劃只靠一個“總策略”每一步都決策方向盤打多少度、油門踩多深。這個總策略既要知道高速怎么走又要知道下了高速進城區(qū)后怎么繞小路還得知道在小區(qū)門口怎么找車位。每一步的決策都背負著“離最終終點還差多遠”的信用分配壓力任何一個環(huán)節(jié)出錯整個軌跡的回報都會崩掉。強化學習里的信用分配問題就是這么回事。在長時域任務里一個稀疏的外部獎勵往往只在幾百甚至上千步之后出現(xiàn)單層策略很難判斷究竟是哪一步導致了這個結(jié)果。分層思想說白了就是把一個長任務拆成多個短任務高層策略負責低頻的大方向決策比如“下一個目標點是哪個位置”低層策略負責高頻的具體動作執(zhí)行比如“用四足在 10 步內(nèi)跑到那個位置”。每一層的決策時域變短了信用分配的壓力也就小了。這是 HRL 的核心動機但“拆”完并不意味著能訓好。真正的問題在于兩層策略同時訓練時高層策略看到的環(huán)境動態(tài)其實是被低層策略決定的。低層在變強高層眼里的世界就在變于是以前存下來的經(jīng)驗拿出來訓練時可能完全失真。這種非平穩(wěn)性是分層強化學習最大的攔路虎。1.2 老一代分層方法的致命傷早期分層強化學習里最典型的代表是 Feudal Networks 這類“封建式”結(jié)構(gòu)高層給低層下達一個目標低層以目標為條件學習技能同時高層通過端到端的梯度回傳獲得反饋。聽起來合理實際跑起來有幾個硬傷。第一個傷是梯度不穩(wěn)定。高層給低層的離散目標通常不可微或者低層策略本身是個復雜策略梯度穿過低層網(wǎng)絡回傳到高層時幾乎全是噪聲訓練極難穩(wěn)定。第二個傷是數(shù)據(jù)效率。很多早期分層方法使用 on-policy 算法比如策略梯度類每次更新完策略就得重新采樣。分層之后高層決策頻率低、單條軌跡跨度大重新采樣的成本遠高于普通任務樣本效率低到難以接受。第三個傷是非平穩(wěn)性導致的經(jīng)驗污染。低層策略一更新高層之前存好的轉(zhuǎn)移樣本里“同樣的狀態(tài)、同樣的高層動作目標”對應的結(jié)果就變了。假如高層某次在狀態(tài) s 下達目標 g舊低層花了 30 步還沒夠到新低層可能 8 步就完成了。舊樣本里記錄的回報和后續(xù)狀態(tài)對當前的低層來說完全不可信。HIRO 的思路就是沖著這幾個傷去的低層和高層都用 off-policy 算法來訓練保證數(shù)據(jù)效率再通過目標再標記和 off-policy correction 讓舊樣本在新低層下“重新變得可信”。這一套組合在當時的 HRL 領(lǐng)域確實是降維打擊級別的設計。2. 核心機制拆解兩層策略與目標再標記2.1 高層策略與低層策略的分工HIRO 采用的是兩層結(jié)構(gòu)模型整體是一個 off-policy 框架原論文使用的是 DDPG 類算法后續(xù)復現(xiàn)多用 TD3 來提升穩(wěn)定性。你可以把高層策略理解成一個“項目經(jīng)理”低層策略理解成“執(zhí)行團隊”。高層策略每 c 步才做一次決策輸出一個目標 g_t。這個目標不是某個離散選項而是狀態(tài)空間里的一個偏移向量。低層策略則每個時間步都做動作決策它的輸入是當前狀態(tài)和來自高層目標拼接而成的向量輸出是具體的動作。低層每走一步環(huán)境會給一個真實的獎勵 r_t但低層并不直接用這個外部獎勵來學它還有一個自己的內(nèi)在獎勵r_low -‖s_{t1} - (s_t g_t)‖?這個公式的意思是低層的目標就是讓“當前狀態(tài)加上目標偏移后”的位置與實際到達的下一個狀態(tài)盡可能接近。換句話說低層學的不是“最大化環(huán)境回報”而是“老老實實執(zhí)行高層下達的位移指令”。環(huán)境回報則累加起來交給高層高層學的是“下達什么樣的目標序列能讓一段時間的累計環(huán)境回報最大”。我們常說的“信用分配”在這里被物理隔開了低層只對“是否到達目標”負責高層只對“目標選得好不好”負責。外部獎勵極其稀疏也沒關(guān)系因為低層有內(nèi)在獎勵做密集信號高層有目標再標記和 correction 提供學習信號。2.2 相對目標表示容易被低估的關(guān)鍵設計HIRO 里最容易被初學者忽略的細節(jié)是目標表示成“相對偏移”而不是“絕對坐標”。我自己第一次復現(xiàn)的時候偷懶用了絕對坐標結(jié)果低層策略在訓練集覆蓋的區(qū)域內(nèi)表現(xiàn)尚可一旦起點換到?jīng)]見過的位置立刻失靈。原因很好理解絕對目標等于讓低層記住“從各個位置到各個目標點”的行為映射這個映射嚴重依賴起點位置泛化性極差。而相對目標只要求低層學會一件事——“從當前位置出發(fā)向指定方向移動指定距離”。這本質(zhì)上是一種平移不變性低層學到的技能可以無縫遷移到任何起點。這個設計帶來的收益很大低層策略的泛化能力變強了高層也不需要為每個起點重新規(guī)劃樣本效率自然就上去了。如果你在自己的項目里復現(xiàn) HIRO我強烈建議保留這個“相對目標”設定不要亂改。2.3 目標再標記從 HER 借來的“事后諸葛”HIRO 的第二個重要機制是目標再標記goal relabeling這個思想源自 Hindsight Experience ReplayHER。HER 的核心邏輯很樸素一個智能體沒完成任務不等于這段經(jīng)驗沒用。把目標改寫成“它實際上到達的位置”這段經(jīng)驗就從“失敗的嘗試”變成了“成功執(zhí)行目標的正樣本”。在 HIRO 里再標記發(fā)生在兩個層級。低層做 HER 式的再標記很容易理解每個低層轉(zhuǎn)移樣本 (s_t, g_t, a_t, s_{t1}) 都可以把目標替換成未來某個時刻的實際狀態(tài)偏移 s_{tk} - s_t然后重新計算內(nèi)在獎勵。這樣低層就能從大量“沒到達目標”的軌跡中學到“其實也可以到達某種狀態(tài)”的技能。高層的再標記稍微復雜一點。高層的一個轉(zhuǎn)移樣本是 (s_t, g_t, R_t, s_{tc})其中 R_t 是這 c 步內(nèi)的外部獎勵之和。如果高層目標沒達成我們可以把高層目標改寫成實際完成的位移 s_{tc} - s_t這個思想沒問題。但麻煩在于這段樣本是舊低層跑出來的改完目標之后樣本代表的“在這個目標下的環(huán)境動態(tài)”是否還適用于當前低層這就引入了 off-policy correction也是 HIRO 全名里那個“Off-policy Correction”的真正含義。3. off-policy correction整個算法的靈魂3.1 為什么高層策略不能直接離線訓練要理解 off-policy correction得先理解“為什么高層的離線樣本會被污染”。假設你是一個項目經(jīng)理你手下有一個團隊。你用團隊過去的產(chǎn)出記錄來訓練自己“怎么分派任務”。問題是團隊能力在持續(xù)成長同樣的任務上個月要干一周這個月三天就干完了。如果你還用上個月的記錄來判斷“哪個任務難、哪個任務好做”你的決策完全就被誤導了。在 HIRO 里高層就是項目經(jīng)理低層就是團隊。高層的一條轉(zhuǎn)移樣本記錄著“在某個狀態(tài) s_t 下達目標 g_t之后得到回報 R_t到達狀態(tài) s_{tc}”。但這整段經(jīng)歷是在舊低層下發(fā)生的。低層更新之后同樣的 (s_t, g_t) 會走出完全不同的軌跡舊樣本里的 R_t 和 s_{tc} 都不可信。如果高層照單全收地學相當于拿過期數(shù)據(jù)做現(xiàn)在決策訓練必然不穩(wěn)。有人會說那高層就用 on-policy 重新采樣唄。聽起來簡單但分層結(jié)構(gòu)里高層采樣一條軌跡的成本是普通方法的 c 倍數(shù)據(jù)效率會急劇下降。HIRO 的野心就是要保住 off-policy 的數(shù)據(jù)效率所以必須給舊樣本做“消毒處理”——這就是 correction 的由來。3.2 糾正目標的數(shù)學直覺off-policy correction 要做的事可以一句話概括找到一個“替身目標”g_t使得在當前低層策略 π_low 下用 g_t 去執(zhí)行這條軌跡上的狀態(tài)序列最有可能復現(xiàn)出當時真實采到的那些低層動作。形式化地看高層舊樣本里存的不只是狀態(tài)和高層目標還應該包括這個 c 步片段內(nèi)低層的動作序列 a_t, a_{t1}, ..., a_{tc-1}。我們要最大化下面這個似然gt argmax{g} Σ_{it}^{tc-1} log π_low(a_i | s_i, g)這個優(yōu)化的含義很妙原始目標 g_t 下達后舊低層通過一系列動作走出了某個結(jié)果?,F(xiàn)在我們想知道“如果讓當前的低層來走下達怎樣的目標才能讓它走出一樣的動作序列”找到這個 g_t 之后這條樣本就可以被視作“當前低層下從 s_t 執(zhí)行動作 g_t 得到回報 R_t ”于是它重新成為一個可信的轉(zhuǎn)移樣本高層可以放心拿去更新 Q 函數(shù)。實際操作中這個優(yōu)化不需要精確求解通常做 K 步梯度上升就夠了。初始值直接用原始目標 g_t因為舊目標距離最優(yōu)替身目標通常不遠。這樣既有足夠精度又不會帶來額外的大計算量。原論文里的典型配置是 10 步左右我看到的大多數(shù)高質(zhì)量復現(xiàn)也沿用這個值。3.3 更新流程與實現(xiàn)要點把這一套流程落到代碼層面高層策略的每一次更新大致長這樣# 從高層經(jīng)驗池采樣一批轉(zhuǎn)移 for each sample (s_t, g_t, a_t:tc-1, s_t:tc, R_t) in batch: # 1. off-policy correction用梯度上升找到替身目標 g_prime g_t for k in range(10): g_prime g_prime lr_g * grad_g sum_i log π_low(a_i | s_i, g_prime) # 2. 用替身目標重新計算高層 TD 目標 g_next high_policy(s_{tc}) # 下一段的高層目標 y R_t gamma^c * Q_target(s_{tc}, g_next) # 3. 最小化 TD error 更新高層 critic # 4. 用 DDPG/TD3 策略梯度更新高層 actor這里有幾個實現(xiàn)細節(jié)非常關(guān)鍵缺一個算法都會崩第一高層經(jīng)驗池必須額外保存 c 步內(nèi)的低層狀態(tài)序列和動作序列因為 correction 計算需要它們。如果你只存 (s_t, g_t, R_t, s_{tc})那 correction 根本無從做起。我見過好幾個開源實現(xiàn)死在這一點上。第二correction 的目標函數(shù)用的是當前低層策略的似然。低層如果是 DDPG 類帶高斯探索噪聲的確定性策略似然可以從策略輸出的動作均值和固定方差里算出來。如果用隨機策略比如高斯策略直接取 log π_low 即可。第三correction 更新的學習率和步數(shù)要保守一點。目標空間是高維狀態(tài)空間的時候梯度上升太激進容易跑到似然很低的區(qū)域反而破壞了樣本的有效性。我的經(jīng)驗是先固定步數(shù) 10 步、學習率取 1e-2 量級再根據(jù)訓練曲線微調(diào)。4. 訓練流程、超參數(shù)與實驗效果4.1 完整訓練管線走一遍HIRO 的完整訓練流程拆開來大概是這樣的一個循環(huán)用當前高層策略采樣一個目標 g_t并把這個目標交給低層。低層在內(nèi)在獎勵的驅(qū)動下連續(xù)執(zhí)行 c 步期間每一步的狀態(tài) s_i、動作 a_i、內(nèi)在獎勵都記錄到低層經(jīng)驗池。c 步結(jié)束后把這一整段作為一個高層轉(zhuǎn)移樣本聚合 (s_t, g_t, 外部獎勵累加和 R_t, s_{tc}, 低層狀態(tài)序列, 低層動作序列)存入高層經(jīng)驗池。定期從高層經(jīng)驗池采樣先做 off-policy correction 得到替身目標再更新高層 Q 函數(shù)和高層策略。定期從低層經(jīng)驗池采樣對目標做 HER 式再標記重新計算內(nèi)在獎勵然后更新低層策略。軟更新兩個層級的 target 網(wǎng)絡。這里有一個容易被忽略的點低層不能只依賴高層現(xiàn)場下達的目標來訓練。如果高層目前還沒學會給好目標低層接觸到的目標分布就很局限技能學不全面。所以 HIRO 給低層做 HER 式再標記時目標來源是“未來訪問到的狀態(tài)偏移”這等于讓低層自己也能從失敗片段里挖出正樣本。高層和低層在訓練早期實際上是互相攙扶著走的。4.2 關(guān)鍵超參數(shù)參考表我把自己復現(xiàn)時驗證過的一組穩(wěn)定配置整理成表大家可以直接當 baseline 用超參數(shù)推薦值說明高層決策間隔 c10低層執(zhí)行子目標的時間窗口太小失去分層意義太大高層學習慢低層內(nèi)在獎勵-‖s_{t1} - (s_t g_t)‖?也可以用平方距離但歐氏距離更常見off-policy correction 步數(shù)10梯度上升迭代次數(shù)correction 學習率1e-2 量級太高替身目標跑飛太低糾正不充分高層經(jīng)驗池容量2e5 或更大需要存低層狀態(tài)/動作序列內(nèi)存開銷大低層經(jīng)驗池容量2e5常規(guī) off-policy 配置批大小128兩層通用底層算法DDPG 或 TD3復現(xiàn)建議直接上 TD3穩(wěn)定性好很多目標噪聲采樣目標時加高斯噪聲提升低層對不同目標的魯棒性這里額外說一句高層經(jīng)驗池因為要附帶 c 步的低層序列內(nèi)存占用會明顯膨脹。如果你在受限環(huán)境下訓練要么把 c 調(diào)小一點要么對低層狀態(tài)/動作序列做降采樣存儲否則跑久了內(nèi)存容易吃緊。4.3 數(shù)據(jù)效率與泛化能力表現(xiàn)原論文選擇的實驗任務非常有代表性基本都是端到端單層策略很難啃下來的長時域稀疏回報任務。我用“類似 MuJoCo 的四足機器人仿真環(huán)境”來概括會比較穩(wěn)妥典型任務包括三類一類是點目標導航類任務。智能體要在一片區(qū)域里走到特定的目標點。單層策略面對這種“看不到獎勵、直到最后一刻才給反饋”的任務基本束手無策HIRO 拆分出高層導航和低層行走技能之后成功率能拉到接近滿值而且訓練步數(shù)比 on-policy 分層方法少一個數(shù)量級。一類是推動類任務。智能體要推動一個物體到指定位置。這類任務難在接觸動力學和稀疏獎勵同時存在低層必須先學會“靠近物體”這個技能高層再學會“往哪里推”。還有一類是墜落起身類任務。智能體要先學會從一個不利姿態(tài)恢復穩(wěn)定再完成后續(xù)目標這考驗分層結(jié)構(gòu)的子技能復用能力。和當時的各種 baseline 對比下來HIRO 的優(yōu)勢集中在兩點一是同等訓練步數(shù)下成功率明顯更高二是它能做到普通 off-policy 算法完全無法完成的長 horizon 任務。這也驗證了“分層 off-policy correction”的組合確實同時拿到了端到端方法的數(shù)據(jù)效率以及分層方法的任務上限。5. 復現(xiàn)實踐踩坑記錄與調(diào)參心得5.1 常見問題速查表我把復現(xiàn) HIRO 過程中以及幫別人排查代碼時最常遇到的幾個問題整理成一張速查表癥狀和解決方案一一對應癥狀根因解決方案高層 Q 值發(fā)散訓練曲線劇烈抖動高層經(jīng)驗池沒存低層動作序列correction 做不了或做錯確認轉(zhuǎn)移樣本包含完整 c 步低層狀態(tài)和動作低層始終學不會到達目標內(nèi)在獎勵收斂慢目標用了絕對坐標而非相對偏移改成當前狀態(tài)的位移偏移恢復平移不變性高層訓練過程中性能突然掉檔低層被硬更新直接復制權(quán)重導致經(jīng)驗批量過期低層走軟更新Polyak 平均降低非平穩(wěn)性correction 后的替身目標偏離原始目標太多梯度上升步數(shù)過長或?qū)W習率過大步數(shù)降到 10 以內(nèi)學習率降到 1e-2 以下低層總在目標附近振蕩無法精確停住內(nèi)在獎勵的尺度太小被探索噪聲淹沒調(diào)大內(nèi)在獎勵系數(shù)或者改用平方距離增強梯度信號訓練初期高層獎勵一直為 0外部獎勵稀疏高層樣本幾乎全是“失敗樣本”確認再標記邏輯打開了高層也要有 hindsight 樣本幀率明顯變慢高層經(jīng)驗池內(nèi)存爆炸檢查是否把低層序列全量存了考慮降采樣5.2 調(diào)參時的幾條實操心得多輪復現(xiàn)下來我有幾個比較深的體會寫在這里供參考。第一先單獨驗證低層的 goal-conditioned 能力再開高層。我見過太多人一上來就把兩層一起訓出了問題根本不知道是哪一層的鍋。正確姿勢是先用隨機目標分布單獨訓低層觀察低層能否在 c 步內(nèi)平均到達目標附近如果這個基礎(chǔ)能力不成立高層再怎么訓都是空中樓閣。第二損失函數(shù)方面要多看兩個指標低層的平均到達距離以及高層的平均替身目標偏移量。前者反映低層技能水平后者反映樣本被糾正的幅度。如果替身目標經(jīng)常偏離原始目標一大截說明低層策略變化太快或者目標維度不匹配要及時降學習率。第三c 值不是越大越好。有人以為 c 大一點高層決策壓力小實際上 c 越大高層每個決策對應的信用分配跨度越長Q 函數(shù)的估計方差也越大。我一般先試 c10如果低層動作跨度確實很短再考慮 c20。反過來如果低層在 c 步內(nèi)根本達不到目標說明 c 太小了要放大。第四探索設計要克制。高層目標采樣時加一點高斯噪聲是有益的能讓低層在不同的目標條件下多接觸邊界情況但噪聲方差太大會讓低層策略的目標分布過于分散反而學不出穩(wěn)定技能。我習慣在訓練后期逐步退火目標噪聲。第五優(yōu)先用 TD3 而不是 DDPG 做底層框架。HIRO 原文用的是 DDPG但 DDPG 的 Q 值過估計問題在兩層結(jié)構(gòu)里會被放大——高層一個錯誤估計會連鎖污染低層的目標分布。TD3 的雙 Q 網(wǎng)絡和延遲更新機制能省掉你大量調(diào)批評者網(wǎng)絡的時間。6. 對后續(xù)研究的影響與適用邊界6.1 分層強化學習此后的一條主線HIRO 在 2018 年之后成了分層強化學習領(lǐng)域繞不開的參照系原因不只是它效果好而是它把“分層時非平穩(wěn)性怎么處理”這個問題講清楚了并且給出了一套可操作的 recipe目標再標記 off-policy correction。后來很多改進工作都是在它的骨架上做的。一個直接的方向是改進目標生成機制。HIRO 的高層目標就是狀態(tài)空間里的隨機偏移并沒有太多“語義”在里面后續(xù)工作開始研究怎么讓高層自己發(fā)現(xiàn)更有意義的子目標比如基于狀態(tài)訪問頻率、基于互信息、或者基于到達難度讓低層學到的技能更結(jié)構(gòu)化。另一個方向是把“固定 c 步切換目標”改成“低層主動判斷目標是否完成”。hiro 里無論目標達沒達到c 步到了就切換這其實有點浪費。很多后續(xù)工作采用 option 式的設計讓低層通過內(nèi)部終止條件來決定何時向高層請求新目標。好處是執(zhí)行效率更高代價是終止條件的學習同樣會帶來非平穩(wěn)性和 off-policy correction 的結(jié)合并不像想象中那么順。還有一個現(xiàn)實方向是把這套方法遷移到真實機器人上。HIRO 本身是在 MuJoCo 這類仿真環(huán)境里驗證的真實機器人面對的狀態(tài)估計誤差、執(zhí)行噪聲和延遲會讓修正目標優(yōu)化的穩(wěn)定性打折扣。不過它“相對目標 低層技能復用”的框架和真實機器人常用的運動原語思想很契合所以后續(xù)的 Sim-to-Real 分層工作里經(jīng)常能看到 HIRO 的影子。6.2 HIRO 的適用條件與已知局限再好的方法也有邊界HIRO 的幾個局限值得擺在明面上說。首先目標是“狀態(tài)空間里的一個偏移”這要求任務的目標必須能用狀態(tài)空間直接表達。如果子目標不是狀態(tài)上的“到達某個位置”而是“把門推開”這種包含接觸變化的目標HIRO 的目標表示就不夠用了。碰上這類任務你需要先想清楚目標空間的重新定義否則別急著套框架。其次HIRO 默認低層是一個目標條件策略技能是“短時域內(nèi)朝著目標靠近”。對需要多技能切換的長任務比如“先推開障礙再搬運最后組裝”單層 goal-conditioned 低層會顯得力不從心。真正復雜的多技能組合需要更高層次的結(jié)構(gòu)比如技能庫 調(diào)度層配合 HIRO 這種 correction 機制才行。再有off-policy correction 依賴一個“能夠計算低層策略似然”的設定。離散動作空間里似然好算連續(xù)動作空間只要用高斯噪聲策略也好算但碰上隨機策略的熵非常大、或者低層是模型無關(guān)的采樣式策略不輸出顯式分布correction 的目標函數(shù)就會變得不穩(wěn)。這不是致命傷但意味著你需要在概率模型上做一些額外設計。最后數(shù)據(jù)效率高是相對而言的。HIRO 能啃下端到端方法做不了的長時域任務但訓練步數(shù)往往還是百萬級起步。如果你的任務本身可以在幾千步內(nèi)靠單層策略輕松解決那就沒必要上分層徒增復雜度。我個人在實際復現(xiàn)和調(diào)參過程中的體會是HIRO 是一個“思路極度克制”的算法。它沒有引入復雜的技能庫沒有引入額外的模塊化網(wǎng)絡就是靠目標再標記和 off-policy correction 這兩個機制把分層訓練中最要命的非平穩(wěn)性解決了。這種“用最小的機制解決核心問題”的設計哲學比它刷出的實驗數(shù)據(jù)更值得學習。如果你們手里也有一個長時域、稀疏獎勵的任務我的建議是先問自己三個問題子目標能不能定義成狀態(tài)空間里的偏移低層能不能用一段連續(xù)的、目標條件的動作技能來實現(xiàn)子目標外部獎勵是不是至少在子目標完成時有局部反饋如果三個答案都是肯定的HIRO 這套框架值得你花一周時間跑一版 baseline。如果子目標本身很難定義成“狀態(tài) 偏移”的形式那問題就不在分層方法上而在目標定義上。先把目標的表達問題解決再從 HIRO 里借 correction 的思路往往比強行套框架有效得多。