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