除錯強化學習(RL)時需要考慮的事項¶
通用¶
您是否在幾個具有已知最優回報的小型玩具問題(例如,網格世界、爬山車)上驗證了您的演算法實現?¶
原因:這將暴露您實現中的任何極端錯誤。
您是否可視化了您的智慧體?¶
原因:這將揭示學習曲線無法告訴您的內容(例如,電子遊戲中的錯誤或漏洞)。
對於任何資料增強都要非常小心。¶
原因:資料增強不能像在計算機視覺中那樣應用於強化學習,因為智慧體需要根據觀測來採取行動。例如,翻轉影像可能相應地“翻轉”適當的動作。
策略 (Policy)¶
您的策略的熵是否收斂過快、過慢或發生劇烈變化?¶
原因:這可能取決於演算法,但策略的熵大致與動作的期望值成反比。
處方:調整熵獎勵的係數(例如,PPO 中的 beta)有助於解決熵收斂過快/過慢的問題。或者,如果收斂過快/過慢,減小/增大獎勵的大小也可能有幫助。熵曲線的急劇階躍變化通常是問題制定(例如,觀測或動作空間)、學習率、梯度範數或實現錯誤的下游問題。
獎勵(“向上”之外)¶
智慧體是否偏好獎勵函式的單個組成部分(例如,速度與 L2 動作幅度)?¶
原因:獎勵函式的某個組成部分可能“更容易”最佳化,因此智慧體將該行為視為區域性最優。
處方:除了調整獎勵組成部分的係數外,還可以考慮使用元件的乘積而不是總和。跟蹤每個獎勵組成部分的統計資料也可能提供見解。或者,如果某些元件被視為“輔助”的,則隨著時間的推移衰減其權重可能會有所幫助。
任務時限是否非常長?¶
原因:信用分配(即將未來的/價值獎勵歸因於過去的狀態/動作)隨著動作和相應獎勵之間的時間間隔增加而變得更加困難。在稀疏獎勵環境中,這可能導致訓練效率低下,需要與環境進行多次互動。
處方:為有助於最終目標的行為新增中間獎勵可以大大提高訓練速度(例如,在足球環境中,踢球的中間獎勵會增加智慧體發現進球有益的可能性)。但這可能會產生不良的最優解,因為利用中間獎勵可能無意中比真實獎勵更有價值,或導致不良的特異性行為。可以使用步長或基於獎勵的課程將此中間獎勵的值衰減為零。或者,如果存在許多子任務,則可以使用分層或基於選項的框架,其中為不同的子任務學習單獨的策略(例如,踢、傳、跑),然後一個更高級別的智慧體從這些低級別策略中選擇作為其動作空間。注意,這個問題也可能屬於“探索”部分,需要明確的探索機制,例如內在好奇心模組。
您的獎勵是否已標準化/歸一化?¶
探索¶
在訓練早期,價值損失是否在增加?¶
原因:通常,在初始化時,價值估計約為 0.0。在訓練早期,智慧體很可能會遇到新的、未見的外部獎勵,因為它在探索,所以價值估計將是錯誤的,損失會增加。
處方:透過內在獎勵或熵獎勵來增加探索。或者,透過新增中間獎勵使獎勵函式更密集。
在訓練早期,動作是否(大致)均勻/正態隨機?¶
原因:如果不使用先驗資訊,新初始化的網路應該接近隨機。這對於智慧體實現適當的探索很重要。
處方:檢查策略網路是否已正確初始化,並且策略熵沒有很快下降。
在單一任務中,內在獎勵是否隨著學習的進展而衰減?¶
原因:內在獎勵旨在鼓勵探索,通常是透過某種新穎性度量。隨著智慧體探索,額外探索(或重新訪問先前探索過的狀態-動作)的價值會隨著新穎性的降低而減小。理想情況下,隨著內在獎勵開始下降,外部獎勵應該開始增加。
處方:內在獎勵應進行歸一化。如果內在獎勵降至 0 但智慧體未學到任何東西,可以嘗試減慢內在模組的動態(即,降低隨機網路蒸餾的學習率或新增噪聲)。
在情節性任務中,情節性內在獎勵是否在學習過程中保持不變或增加?¶
原因:內在獎勵旨在鼓勵探索,通常是透過某種新穎性度量。在情節性任務中,由於新穎性可能不會減少,探索性行為實際上可能會改善,內在獎勵應保持不變或增加。
處方:外部獎勵當然也應該增加。如果不是這樣,這可能意味著兩個目標不一致,並且存在兩者之間的權衡。如果這種權衡是不可避免的,那麼外部獎勵需要優先於情節性獎勵。實現此目的的一些方法是使用情節性獎勵的衰減計劃,擁有單獨的探索(僅帶情節性獎勵)和利用(僅帶外部獎勵)策略,並使用探索策略為利用策略生成更多樣化的起始狀態,或使用行為克隆來引導訓練。此外,內在獎勵應進行歸一化。
環境動態¶
您能否訓練一個低熵的前向動態和/或獎勵模型(對離線 RL 也很有用)?¶
原因:下一個狀態和獎勵用於在強化學習演算法中生成價值學習的目標。如果這些非常嘈雜,那麼目標將是嘈雜的,學習可能會緩慢或不穩定。環境可能是固有的隨機的(例如,敵人的隨機生成),觀測空間的形式可能缺少變數(例如,POMDP),或者對先前狀態的依賴性可能非常鬆散甚至不存在。
處方:根據噪聲的來源,可能需要重新審視觀測的制定,以確保它包含所有必要的資訊,或者一個可以處理先前狀態序列而不是僅最後一個狀態的網路架構(例如,LSTM、Transformer),甚至可以使用分佈強化學習演算法來顯式地建模價值的分佈(而不是僅期望值)。
觀測空間¶
您的觀測是否已歸一化/標準化?¶
原因:具有相同相對尺度的輸入和輸出標靶通常更穩定,因為網路權重不需要變得非常大/小來補償。出於同樣的原因,學習速度通常更快,因為網路權重被初始化為適當的尺度,並且不需要透過梯度下降來實現。此外,如果觀測特徵之間存在極大的尺度差異(例如,[-1,+1] vs. [-1000, 1000]),那麼在權重能夠補償之前,較大的特徵可能會主導較小的特徵。
處方:如果您知道這些值的最小/最大範圍,您可以手動將其歸一化到 [0,1] 的範圍。或者,您可以使用執行均值/標準差例項歸一化(例如,TorchRL 的實現或 Gym 的實現)。均值和標準差在訓練開始時會發生劇烈變化,但隨後會隨著更多資料而緩慢收斂。如果穩定性是個問題,可以收集一個大型緩衝區,然後再進行任何更新,以計算起始均值和標準差。
動作空間¶
一個動作的效果在一個情節中是否會發生劇烈變化?¶
原因:如果一個動作在訓練的早期階段導致失敗,智慧體可能會學會永遠不執行它,這可能會阻止它完全解決任務(例如,“提交工作”動作)。
處方:問題可能應該分層制定(即,一個學習“提交工作”的智慧體)。此外,在這種情況下,足夠的探索變得非常重要。
動作空間是否維度過高?¶
原因:如果動作空間非常大(例如,推薦系統),那麼充分探索整個動作空間可能是不可行的。
處方:為了緩解這個問題,可以手動修剪動作空間,或者開發依賴於狀態的啟發式方法來遮蔽/過濾掉哪些動作可供智慧體使用(例如,在某些 Atari 遊戲中遮蔽“開火”動作,或在國際象棋中遮蔽非法移動),或者組合動作/動作序列(例如,操縱任務中的抓取和釋放動作可以是同一個動作,也是基本動作序列)。如果這不可行,則存在替代方法,例如top-p取樣,其中僅從累積機率為 p 的最高動作中取樣。
您的動作是否已歸一化/標準化?¶
原因:具有相同相對尺度的輸入和輸出標靶通常更穩定,因為網路權重不需要變得非常大/小來補償。出於同樣的原因,學習速度通常更快,因為網路權重被初始化為適當的尺度,並且不需要透過梯度下降來實現。在某些演算法中,動作可以輸入到 Q 函式中,而在另一些演算法中,梯度可以直接透過動作輸出流入策略(例如,Soft Actor-Critic 中的重引數化),因此動作的合理尺度很重要。
處方:通常會裁剪策略的動作輸出到合理的範圍。注意,這個裁剪後的動作不應該(與原始動作相反)用於訓練,因為裁剪操作不是計算圖的一部分,梯度將是不正確的。這應該被視為環境的一部分,因此策略將學會邊界區域內的動作會導致更高的獎勵。還可以使用一個壓縮函式,如 tanh。這可以是計算圖的一部分,並且為了高效地做到這一點,應該校正 log probs,就像這裡所做的那樣。記住,如果動作已歸一化,請在環境端將動作重新對映到原始動作空間。