化學(xué)習(xí)中的稀疏獎勵難題:HER事后經(jīng)驗(yàn)回放實(shí)戰(zhàn)指南)
看到“hindsight”這個詞很多人第一反應(yīng)是英文里“事后諸葛亮”的意思。但放到強(qiáng)化學(xué)習(xí)RL這個圈子里它指向的是一個非常硬核的技術(shù)Hindsight Experience Replay事后經(jīng)驗(yàn)回放。我最初接觸這個技術(shù)是在機(jī)械臂抓取項(xiàng)目上目標(biāo)很簡單讓一個單步隨機(jī)策略永遠(yuǎn)摸不到目標(biāo)位姿的時候還能學(xué)到東西。當(dāng)時試過獎勵塑形、課程學(xué)習(xí)效果都不穩(wěn)定后來換成HER思路稀疏獎勵問題才真正被擊穿。這篇文章不打算從論文公式開始講而是圍繞“我為什么選它”、“它到底改了什么”、“實(shí)際代碼怎么寫”、“調(diào)參時踩過哪些坑”這幾個維度展開。適合正在做RL導(dǎo)航、機(jī)械臂操作、或者任何帶稀疏獎勵任務(wù)的工程師閱讀讀完你至少能判斷自己的任務(wù)適不適合上HER并且能照著代碼改出一版能跑的實(shí)驗(yàn)。1. 為什么稀疏獎勵場景需要“事后”視角1.1 稀疏獎勵的真正痛點(diǎn)不是獎勵少而是反饋信號趨近于零在傳統(tǒng)RL里我們設(shè)計reward function時最怕兩類問題獎勵太密導(dǎo)致策略被局部最優(yōu)困住或者獎勵太稀疏導(dǎo)致整個訓(xùn)練過程幾乎收不到正信號。HER針對的是第二類典型場景包括機(jī)械臂把物體推到指定坐標(biāo)、機(jī)器人走到某個門口、四足動物在復(fù)雜地形里保持平衡、甚至迷宮導(dǎo)航。拿機(jī)械臂推物體來舉例。狀態(tài)空間是關(guān)節(jié)角度加末端位置動作空間是連續(xù)變化的正弦力矩。如果目標(biāo)位置和目標(biāo)姿態(tài)組合有幾十個自由度隨機(jī)策略能一次成功的概率低到可以忽略。也就是說在整個探索過程中模型幾乎永遠(yuǎn)拿到-1的獎勵常用稀疏獎勵設(shè)定失敗-1成功0。這種情況下無論是DQN還是DDPG梯度幾乎都是噪聲因?yàn)樗袠颖镜幕貓蠖家粯泳W(wǎng)絡(luò)根本沒法區(qū)分哪個動作稍微好一點(diǎn)。我見過很多人在這里加“輔助獎勵”或者“中間態(tài)獎勵”比如距離目標(biāo)越近獎勵越大。短期看確實(shí)有效但長期有個副作用策略會傾向于“貪近”停在某個對后續(xù)動作不利的位置。這就是獎勵塑形和潛在獎勵沖突的問題。HER之所以吸引我是因?yàn)樗恍枰莫剟詈瘮?shù)而是改“經(jīng)驗(yàn)的使用方式”從數(shù)據(jù)本身挖出正樣本。1.2 事后諸葛亮為什么能成立一個生活化的類比想象你是一個剛學(xué)投籃的人。你閉著眼亂扔了100次一個都沒進(jìn)。正常教練會告訴你全是失敗記下來繼續(xù)練。但HER的教練會說雖然你這次沒進(jìn)球但球落到了籃板左側(cè)的某個位置那么我們就假裝“你的目標(biāo)就是投到籃板左側(cè)”你這次就是成功的。然后把這條“新經(jīng)驗(yàn)”記下來。下一次你又扔偏了球到了右側(cè)那就把“右側(cè)”當(dāng)作新目標(biāo)再記一條成功經(jīng)驗(yàn)。經(jīng)過很多次訓(xùn)練你雖然沒有一次真正進(jìn)球但積累了“如何把球扔到左側(cè)”、“如何把球扔到右側(cè)”的經(jīng)驗(yàn)。這些經(jīng)驗(yàn)組合起來最終能幫助你知道發(fā)力多少能影響落點(diǎn)方向偏了多少對應(yīng)了動作誤差。當(dāng)你真正想投進(jìn)籃筐時這些經(jīng)驗(yàn)比一堆“失敗-1”的記錄有用得多。從RL算法層面看HER做的事情就是把每一條transition額外復(fù)制一份把原目標(biāo) g 替換成本次軌跡“最終到達(dá)的狀態(tài)”作為偽目標(biāo) g再用 g 重新算一遍獎勵寫入回放緩沖區(qū)。整個過程不改變物理交互只改變數(shù)據(jù)標(biāo)簽本質(zhì)上是一種非常廉價又高效的數(shù)據(jù)增強(qiáng)。2. HER的核心設(shè)計邏輯與算法細(xì)節(jié)2.1 目標(biāo)條件化策略是HER成立的前提要理解HER必須先確認(rèn)你的策略是目標(biāo)條件化的也就是策略函數(shù)的輸入必須是“狀態(tài)目標(biāo)”而不是只有狀態(tài)。數(shù)學(xué)表達(dá)就是 \pi(a|s,g) 而不是 \pi(a|s)。這一點(diǎn)在很多工程實(shí)現(xiàn)中容易被忽略。如果策略不感知目標(biāo)那“把目標(biāo)換成實(shí)際到達(dá)狀態(tài)”就沒有意義因?yàn)槟P透静恢滥繕?biāo)是什么。因此HER只適用于goal-conditioned RL。具體到代碼上網(wǎng)絡(luò)輸入要拼接當(dāng)前狀態(tài) s 和目標(biāo) g。有的做法是直接把goal向量拼到state后面有的是把goal單獨(dú)過一層編碼再和state編碼融合。我在實(shí)驗(yàn)中一般的做法是直接在輸入層拼接簡單穩(wěn)定對MLP結(jié)構(gòu)來說完全夠用。如果你用CNN處理圖像狀態(tài)可以把goal編碼成一個embedding再和視覺特征concat原理是一樣的。2.2 四種目標(biāo)采樣策略哪種才是最優(yōu)解HER論文里最常被引用的就是四種種后驗(yàn)?zāi)繕?biāo)采樣方式final、future、episode、random。我基于實(shí)際效果和復(fù)現(xiàn)頻率給你排個序future對transition中的當(dāng)前時間步t從[t1, T]之間隨機(jī)采樣一個狀態(tài)作為偽目標(biāo)。這是實(shí)際項(xiàng)目里最常用的因?yàn)樗昧塑壽E后續(xù)真正的狀態(tài)演變信息和當(dāng)前狀態(tài)有時間關(guān)聯(lián)。final直接拿episode最終狀態(tài)作為所有transition的偽目標(biāo)。簡單粗暴數(shù)據(jù)利用率高適合任務(wù)成功條件比較“硬核”的場景。episode從整個episode的所有訪問狀態(tài)里隨機(jī)抽一個作為偽目標(biāo)等于future的變體但可能采樣到當(dāng)前狀態(tài)之前的狀態(tài)。random完全隨機(jī)采樣狀態(tài)效果一般除非你的狀態(tài)空間極小且密集。我的經(jīng)驗(yàn)是初始階段用futureK4每條原始transition額外生成4條偽目標(biāo)經(jīng)驗(yàn)。如果任務(wù)目標(biāo)空間很容易被覆蓋比如目標(biāo)是某個位置坐標(biāo)final也夠用如果狀態(tài)空間高維且稀疏future的優(yōu)勢更明顯。2.3 偽目標(biāo)生成是否真能提高樣本效率原理拆解原始樣本中動作a是從狀態(tài)s_t到s_{t1}的一個映射。當(dāng)目標(biāo)是g時這個transition的reward是r(s_t,a_t,g) -1失敗。但如果把目標(biāo)g s_{t1}或者軌跡末態(tài)那么這個transition變?yōu)椤霸趃條件下這個動作讓狀態(tài)轉(zhuǎn)移到了目標(biāo)”reward變成0就是一個正樣本。這樣做的效果有兩個層面。第一回放緩沖區(qū)中正樣本比例大增價值網(wǎng)絡(luò)的訓(xùn)練信號更豐富。第二策略網(wǎng)絡(luò)學(xué)習(xí)到的是“狀態(tài)轉(zhuǎn)變方向”和“偽目標(biāo)之間的相對關(guān)系”而不是只學(xué)習(xí)單一絕對目標(biāo)。因?yàn)閭文繕?biāo)們在空間上是分散的策略被迫擬合一個魯棒的、連續(xù)的映射這比只學(xué)習(xí)一個固定目標(biāo)更有泛化性。很多復(fù)現(xiàn)實(shí)驗(yàn)里HER DDPG可以把機(jī)械臂抓取的稀疏獎勵任務(wù)從幾乎不收斂變成幾百萬步內(nèi)穩(wěn)定達(dá)到80%以上成功率提升是數(shù)量級的。2.4 為什么不建議直接對Q函數(shù)做Hindsight有人會問既然事后悔悟這么好為什么不在Q-learning里直接把Q(s,a,g)也算一次技術(shù)上完全可行但有個坑Q函數(shù)訓(xùn)練依賴TD誤差如果你在同一個transition里用多個不同目標(biāo)去更新同一個Q網(wǎng)絡(luò)會讓目標(biāo)值變得互相矛盾最終網(wǎng)絡(luò)會試圖“平衡所有目標(biāo)”導(dǎo)致每個目標(biāo)都學(xué)不好。HER的做法是分開存儲、分開采樣每個偽目標(biāo)經(jīng)驗(yàn)對應(yīng)獨(dú)立的transition記錄相當(dāng)于變相擴(kuò)大了數(shù)據(jù)集而不是改動同一個Q樣本的標(biāo)簽。這一點(diǎn)務(wù)必理解清楚。3. 從零實(shí)現(xiàn)HER以DDPG為基準(zhǔn)的完整實(shí)操3.1 環(huán)境與基線選擇我建議第一次做HER不要一上來就上復(fù)雜仿真器先用OpenAI Gym的FetchReach-v1或者自定義的PointMass環(huán)境做驗(yàn)證。環(huán)境接口簡單而且目標(biāo)本來就是從狀態(tài)里抽出來的非常適合檢查HER邏輯是否正確。我自己一般習(xí)慣寫一個簡單的二維點(diǎn)機(jī)器人環(huán)境狀態(tài)是位置坐標(biāo)目標(biāo)是某個點(diǎn)坐標(biāo)只有到達(dá)目標(biāo)半徑內(nèi)才給0獎勵否則-1。這種環(huán)境下普通DDPG幾乎不會收斂但加HER以后大概50萬步就能看到明顯學(xué)習(xí)曲線。算法方面搭配HER最合適的是off-policy、基于價值的算法比如DDPG、TD3、SAC。不能搭配普通REINFORCE這類on-policy方法因?yàn)镠ER需要大型回放緩沖區(qū)重新采樣on-policy的樣本分布假設(shè)會被破壞。下面我以DDPG為基準(zhǔn)框架給出核心實(shí)現(xiàn)思路。3.2 關(guān)鍵代碼結(jié)構(gòu)與relabel邏輯實(shí)現(xiàn)HER的關(guān)鍵點(diǎn)主要有三個存儲原始transition時記錄完整狀態(tài)序列、采樣時按批處理生成偽目標(biāo)、訓(xùn)練時同時更新actor和critic。偽代碼如下# 假設(shè)有一個episode_data保存了整個軌跡的所有狀態(tài)和動作 def store_episode(replay_buffer, episode_data, env, her_sampling_strategyfuture, k4): states, actions, rewards, next_states, goals episode_data T len(states) for t in range(T): # 原始經(jīng)驗(yàn) replay_buffer.add( states[t], actions[t], rewards[t], next_states[t], goals[t], False ) # 額外生成K個偽目標(biāo)經(jīng)驗(yàn) for _ in range(k): if her_sampling_strategy final: g_prime states[-1][:goal_dim] elif her_sampling_strategy future: future_idx np.random.randint(t 1, T 1) g_prime states[min(future_idx, T-1)][:goal_dim] elif her_sampling_strategy episode: any_idx np.random.randint(0, T) g_prime states[any_idx][:goal_dim] # 用g_prime重新計算reward new_reward env.compute_reward(states[t], actions[t], g_prime) # 把偽目標(biāo)經(jīng)驗(yàn)加入buffer replay_buffer.add( states[t], actions[t], new_reward, next_states[t], g_prime, False )這段代碼里有個容易被忽略的細(xì)節(jié)new_reward 必須用環(huán)境的真實(shí)獎勵函數(shù)計算而不是簡單寫成0。因?yàn)橛行┉h(huán)境里獎勵和動作有關(guān)或者有多目標(biāo)同時生效直接寫死0會讓偽目標(biāo)經(jīng)驗(yàn)不準(zhǔn)確。3.3 網(wǎng)絡(luò)結(jié)構(gòu)、超參數(shù)與訓(xùn)練循環(huán)DDPG的actor輸入是concat(state, goal)輸出是連續(xù)動作critic輸入是concat(state, goal, action)輸出Q值。隱藏層一般用256x256或者400x300激活函數(shù)用ReLU輸出層用tanh把動作限制到[-1,1]。HER本身不增加網(wǎng)絡(luò)復(fù)雜度但會影響緩沖區(qū)大小需求建議replay buffer容量至少50萬條transition如果偽目標(biāo)K4相當(dāng)于每條真實(shí)樣本衍生出5條存儲所以內(nèi)存和磁盤IO要提前評估。我常用的超參數(shù)組合是參數(shù)名數(shù)值說明actor學(xué)習(xí)率1e-3偏低一點(diǎn)配合目標(biāo)網(wǎng)絡(luò)軟更新critic學(xué)習(xí)率1e-3和actor保持同一量級gamma0.98稀疏獎勵任務(wù)不要太接近1容易高估polyaktau0.05目標(biāo)網(wǎng)絡(luò)軟更新系數(shù)replay buffer1e6盡量大HER數(shù)據(jù)量很大batch size256不能太小否則偽目標(biāo)訓(xùn)練不穩(wěn)定K偽目標(biāo)個數(shù)4論文推薦范圍2-84是默認(rèn)值exploration noise0.2OU噪聲或高斯噪聲都行訓(xùn)練循環(huán)本身和普通DDPG完全一樣采樣一個動作和環(huán)境交互存經(jīng)驗(yàn)每步從buffer里采樣batch更新critic和actor。唯一注意點(diǎn)由于每條episode會被展開成多條額外經(jīng)驗(yàn)所以”訓(xùn)練步數(shù)“和”環(huán)境交互步數(shù)“不一樣畫曲線時一定以環(huán)境步數(shù)為橫軸不要以更新步數(shù)為橫軸否則曲線對比沒有意義。3.4 對比實(shí)驗(yàn)設(shè)計與結(jié)果觀察我在二維PointMass環(huán)境上跑過三組實(shí)驗(yàn)普通DDPG、帶密集獎勵的DDPG、HERDDPG。結(jié)果很明顯普通稀疏獎勵DDPG訓(xùn)練到200萬步成功率仍是0密集獎勵DDPG大約在150萬步接近80%但策略路徑非常繞HERDDPG在60萬步就沖到90%以上并且軌跡更直接。更值得關(guān)注的是HER版本即使不刻意調(diào)優(yōu)Q值的收斂曲線也平滑得多。原因就在于偽目標(biāo)經(jīng)驗(yàn)提供了大量“成功”transitioncritic不用在負(fù)樣本堆里去猜Q值梯度信號自然更干凈。如果你做實(shí)驗(yàn)時看到critic loss抖動劇烈多半是偽目標(biāo)獎勵計算和真實(shí)獎勵不一致建議先檢查env.compute_reward是否直接能用。4. HER實(shí)戰(zhàn)中的常見問題與調(diào)試實(shí)錄4.1 為什么HER在我這個任務(wù)上完全不work這個坑我踩過不止一次。如果你的任務(wù)是“必須在特定位置觸發(fā)特定事件才算成功”而且這個事件和狀態(tài)位置之間沒有連續(xù)過渡例如開門、按按鈕、松開夾具那么單純用HER效果會很差。原因是偽目標(biāo)必須從狀態(tài)里顯式提取而狀態(tài)里沒有關(guān)于“門是否打開”的連續(xù)信息時替換目標(biāo)后獎勵仍然全是-1。解決思路有兩類。第一擴(kuò)充狀態(tài)表征把任務(wù)相關(guān)的關(guān)鍵變量門角度、按鈕位移、物體是否被夾住也拼到 goal 和 state 里。第二用層級化思路上層任務(wù)是開關(guān)門下層任務(wù)用HER學(xué)“到達(dá)門前任意位置”。這實(shí)際上把單一pseudo-goal任務(wù)拆成了兩個更簡單的goal-conditioned子任務(wù)。實(shí)際項(xiàng)目中我會建議兩種都做因?yàn)榧词箶U(kuò)展?fàn)顟B(tài)也存在狀態(tài)空間中的某些維度不連續(xù)的問題。4.2 K值到底怎么選盲目堆大沒用很多人以為K4不夠直接調(diào)到K16或者K32。理論上K越大數(shù)據(jù)越多但有三個副作用內(nèi)存消耗線性上漲、訓(xùn)練需要更多Step才能覆蓋所有偽目標(biāo)經(jīng)驗(yàn)、偽目標(biāo)過于密集會導(dǎo)致相鄰樣本高度相關(guān)反而降低多樣性。我在機(jī)械臂推物體任務(wù)中做過對比K4和K8最終成功率差不多K8訓(xùn)練步數(shù)略長K16開始出現(xiàn)輕微性能回退。所以我不建議調(diào)大K更推薦在固定K4的基礎(chǔ)上把future采樣窗口限制在[t1, min(t50, T)]附近讓偽目標(biāo)不要離當(dāng)前狀態(tài)太遠(yuǎn)這樣學(xué)習(xí)更穩(wěn)定。如果你在長期episode里發(fā)現(xiàn)future策略退化可以考慮把采樣范圍縮小。4.3 HER和獎勵塑形能一起用嗎利弊要分清可以但要有心理預(yù)期。如果你的獎勵函數(shù)已經(jīng)過度塑形HER的偽目標(biāo)獎勵也按照同樣的密集獎勵函數(shù)計算會出現(xiàn)一種情況偽目標(biāo)經(jīng)驗(yàn)里的獎勵是正的但實(shí)際目標(biāo)的獎勵是負(fù)的兩個分支在學(xué)習(xí)時互相打架。我自己傾向于要么純稀疏堅決不塑形靠HER擴(kuò)展信號要么在HER基礎(chǔ)上只對“是否接近目標(biāo)”做非常輕微的引導(dǎo)比如比例乘0.1。這樣折中可以在導(dǎo)航類任務(wù)中更快起步又不至于讓策略被局部獎勵吸引。有一個實(shí)用技巧把塑形獎勵部分從compute_reward里拆出來HER的偽目標(biāo)計算只基于稀疏成功判斷而真實(shí)經(jīng)驗(yàn)里的獎勵用塑形后的完整獎勵。這樣偽目標(biāo)經(jīng)驗(yàn)專注于“方向知識”真實(shí)經(jīng)驗(yàn)專注于“精細(xì)操控”兩者不沖突。大部分情況效果意外地好。4.4 聯(lián)合SAC或TD3時要調(diào)整什么我用SAC代替DDPG做HER時發(fā)現(xiàn)SAC的熵系數(shù)自動調(diào)節(jié)會和HER產(chǎn)生有趣的交互因?yàn)閭文繕?biāo)經(jīng)驗(yàn)里正樣本比例高策略熵下降更快容易過早確定。解決辦法是固定target_entropy為一個較小的負(fù)數(shù)比如-2或者在偽目標(biāo)經(jīng)驗(yàn)采樣時降低其優(yōu)先權(quán)重。TD3相對穩(wěn)一點(diǎn)但它的雙向延遲更新對批量較大如1024時性能會下降我測試過batch_size 256比1024更好用。另外如果使用優(yōu)先級回放PER不要直接拿TD error作為偽目標(biāo)經(jīng)驗(yàn)的優(yōu)先級因?yàn)閭文繕?biāo)經(jīng)驗(yàn)天然會有更低的TD error但這不代表它更重要只是目標(biāo)被改了而已。我踩過這個坑加PER后HER反而變差了。你可以在優(yōu)先級的權(quán)重里加入一個“是否屬于偽目標(biāo)經(jīng)驗(yàn)”的懲罰因子讓HER經(jīng)驗(yàn)和真實(shí)經(jīng)驗(yàn)在采樣概率上保持平衡。4.5 真實(shí)機(jī)器人部署時的額外提醒仿真里HER跑通后遷移到真實(shí)機(jī)器人需要多考慮一層偽目標(biāo)是從狀態(tài)中直接提取的但真實(shí)環(huán)境中狀態(tài)由傳感器估計存在誤差。比如機(jī)械臂視覺定位的物體坐標(biāo)可能偏差1-2厘米而HER會把“實(shí)際到達(dá)位置”當(dāng)目標(biāo)來學(xué)習(xí)這等于在訓(xùn)練時引入了系統(tǒng)性偏置。我的做法是先在仿真中對觀測和goal加高斯噪聲讓噪聲幅度和真機(jī)傳感器一致然后再訓(xùn)練。同時部署階段加一個位姿校正環(huán)節(jié)當(dāng)策略接近目標(biāo)區(qū)域后切換到視覺伺服。HER負(fù)責(zé)粗放式到達(dá)視覺伺服負(fù)責(zé)精確式對齊兩個階段參數(shù)不共享效果比單靠HER精細(xì)到位穩(wěn)定得多。5. HER的進(jìn)階方向與擴(kuò)展思路5.1 從終點(diǎn)回放走向子目標(biāo)生成如果任務(wù)特別長比如多階段的廚房操作HER的final策略就力不從心因?yàn)樽罱K狀態(tài)距離中間態(tài)太遠(yuǎn)偽目標(biāo)缺乏鏈條感?,F(xiàn)在更前沿的做法是自動生成子目標(biāo)序列比如Curriculum HindsightCHER它會在訓(xùn)練過程中調(diào)整偽目標(biāo)的難度從容易達(dá)成的中間態(tài)逐步過渡到更難的目標(biāo)?;蛘哂肰IME這類互信息方法主動選擇“有信息量”的狀態(tài)作為偽目標(biāo)減少低效回放。如果你只是業(yè)務(wù)項(xiàng)目不需要追求論文創(chuàng)新建議先用final和future兩種策略組合在同一個episode里按比例混合采樣。比如每個transition同時生成1條final偽目標(biāo)和3條future偽目標(biāo)。兩個目標(biāo)相互補(bǔ)充長任務(wù)和短任務(wù)都兼顧訓(xùn)練穩(wěn)定度比單一策略好。5.2 HER的思想也能用于模仿學(xué)習(xí)和逆強(qiáng)化學(xué)習(xí)HER并不僅限強(qiáng)化學(xué)習(xí)。在模仿學(xué)習(xí)里如果演示數(shù)據(jù)不夠可以從失敗軌跡中提取“達(dá)成某狀態(tài)”的經(jīng)驗(yàn)生成偽演示來擴(kuò)充數(shù)據(jù)集這本質(zhì)是Hindsight Imitation Learning。逆強(qiáng)化學(xué)習(xí)里HER的偽目標(biāo)可以提供更多可能的reward候選加快獎勵函數(shù)的推斷。我現(xiàn)在做機(jī)器人操作任務(wù)時會把HER當(dāng)成一個“數(shù)據(jù)擴(kuò)增器”而不只是一個RL插件。哪怕最終算法不用RL比如直接學(xué)一個行為克隆模型我也會在預(yù)處理階段把近成功軌跡進(jìn)行Hindsight偽目標(biāo)擴(kuò)增模型學(xué)到不同目標(biāo)相對輸入的泛化性明顯提升。這一招在工業(yè)項(xiàng)目的視覺抓取分揀里驗(yàn)證過泛化性能提升約15%到30%。5.3 工程層面的一些建議工程實(shí)現(xiàn)上HER的數(shù)據(jù)管道很容易成為瓶頸。因?yàn)槊織ltransition要復(fù)制K份數(shù)據(jù)量暴漲如果用Python里普通列表存儲訓(xùn)練到一半內(nèi)存容易爆。我建議在項(xiàng)目早期就使用支持高效采樣的數(shù)據(jù)結(jié)構(gòu)比如環(huán)形緩沖區(qū)加numpy數(shù)組存儲把transition編碼成固定長度向量偽目標(biāo)在采樣時動態(tài)生成而不是物理復(fù)制一遍存入buffer。這樣既省內(nèi)存又能在訓(xùn)練中靈活調(diào)整采樣策略。訓(xùn)練可視化方面除了記錄成功率之外還要記錄“偽目標(biāo)經(jīng)驗(yàn)中正樣本比例”和“偽目標(biāo)目標(biāo)與真實(shí)目標(biāo)的距離分布”。這兩個量能直觀反映HER是否在有效工作。如果正樣本比例持續(xù)提高說明策略在進(jìn)步如果距離分布一直集中在很遠(yuǎn)的地方說明偽目標(biāo)采樣策略可能需要調(diào)整或者狀態(tài)空間目標(biāo)覆蓋不夠。6. 寫在最后的一點(diǎn)個人體會經(jīng)過多個項(xiàng)目反復(fù)使用后我的體會是HER并不復(fù)雜但它要求你對“目標(biāo)在狀態(tài)空間中如何表達(dá)”有清晰的認(rèn)識。很多時候效果不好不是因?yàn)镠ER不行而是因?yàn)槟繕?biāo)空間設(shè)計得不夠好。目標(biāo)是指數(shù)坐標(biāo)還是類別標(biāo)簽是否連續(xù)是否可以從當(dāng)前狀態(tài)直接推導(dǎo)出來這些設(shè)計決策往往比算法選擇更影響最終結(jié)果。我自己現(xiàn)在會在實(shí)現(xiàn)HER之前先花時間畫一張圖和表格把所有可能的“事后目標(biāo)”來源列出來評估它們的信息量和難度分布再決定具體怎么落地。這個過程雖然看起來簡單但能省下后面無數(shù)調(diào)參時間。