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