捷徑

ClipPPOLoss

class torchrl.objectives.ClipPPOLoss(*args, **kwargs)[來源]

Clipped PPO 損失。

裁剪的重要性加權損失計算如下

loss = -min( weight * advantage, min(max(weight, 1-eps), 1+eps) * advantage)

參數:
  • actor_network (ProbabilisticTensorDictSequential) – 策略運算子。

  • critic_network (ValueOperator) – 值運算子。

關鍵字引數:
  • clip_epsilon (scalar, optional) – 裁剪 PPO 損失方程式中的權重裁剪閾值。預設值:0.2

  • entropy_bonus (bool, optional) – 如果 True,將熵獎勵新增至損失,以支持探索性策略。

  • samples_mc_entropy (int, optional) – 如果從策略運算子檢索的分佈沒有熵的封閉形式公式,將使用蒙地卡羅估計。 samples_mc_entropy 將控制用於計算此估計的樣本數量。預設為 1

  • entropy_coef (scalar, optional) – 計算總損失時的熵乘數。預設為 0.01

  • critic_coef (scalar, optional) – 計算總損失時的評論家損失乘數。預設為 1.0。將 critic_coef 設定為 None,以從前向輸出中排除值損失。

  • loss_critic_type (str, optional) – 值差異的損失函數。可以是 “l1”、“l2” 或 “smooth_l1” 之一。預設為 "smooth_l1"

  • normalize_advantage (bool, optional) – 如果 True,將在使用前對優勢進行正規化。預設為 False

  • separate_losses (bool, optional) – 如果 True,策略和評論家之間的共享參數將僅在策略損失上進行訓練。預設為 False,即梯度會傳播到策略和評論家損失的共享參數。

  • advantage_key (str, optional) – [已棄用,請改用 set_keys(advantage_key=advantage_key)] 輸入 tensordict 鍵,預期優勢將寫入此鍵。預設為 "advantage"

  • value_target_key (str, optional) – [已棄用,請改用 set_keys(value_target_key=value_target_key)] 輸入 tensordict 的鍵,目標狀態值預期寫入此處。預設值為 "value_target"

  • value_key (str, optional) – [已棄用,請改用 set_keys(value_key) ] 輸入 tensordict 的鍵,狀態值預期寫入此處。預設值為 "state_value"

  • functional (bool, optional) – 是否應將模組功能化。功能化允許諸如 meta-RL 之類的功能,但會使您無法使用分散式模型 (DDP、FSDP, …),並且會產生一些成本。預設值為 True

  • reduction (str, optional) – 指定要應用於輸出的縮減方式:"none" | "mean" | "sum""none":不套用任何縮減,"mean":輸出的總和將除以輸出中的元素數量,"sum":輸出將被加總。預設值:"mean"

  • clip_value (bool or float, optional) – 如果提供一個 float,它將被用於計算一個裁剪過的值預測,裁剪程度根據輸入 tensordict 值估算,並用它來計算 value loss。裁剪的目的是限制極端值預測的影響,幫助穩定訓練並防止大的更新。但是,如果 value estimate 是由當前版本的 value estimator 執行的,它將沒有任何影響。如果提供 True,則 clip_epsilon 參數將用作裁剪閾值。如果未提供或為 False,則不會執行任何裁剪。預設值為 False

注意

如果 actor 和 value function 共享參數,可以通過僅將 value network 的 head 傳遞給 PPO loss 模組來避免多次呼叫公共模組。

>>> common = SomeModule(in_keys=["observation"], out_keys=["hidden"])
>>> actor_head = SomeActor(in_keys=["hidden"])
>>> value_head = SomeValue(in_keys=["hidden"])
>>> # first option, with 2 calls on the common module
>>> model = ActorValueOperator(common, actor_head, value_head)
>>> loss_module = ClipPPOLoss(model.get_policy_operator(), model.get_value_operator())
>>> # second option, with a single call to the common module
>>> loss_module = ClipPPOLoss(ProbabilisticTensorDictSequential(model, actor_head), value_head)

無論是否啟用 separate_losses,這都有效。

forward(tensordict: TensorDictBase = None) TensorDictBase[source]

它旨在讀取一個輸入 TensorDict 並返回另一個具有名為 "loss*" 的 loss key 的 tensordict。

將 loss 分割成組件然後可以用於讓 trainer 在整個訓練過程中記錄各種 loss 值。輸出 tensordict 中存在的其他純量也將被記錄。

參數:

tensordict – 一個輸入 tensordict,其中包含計算 loss 所需的值。

返回值:

一個新的 tensordict,沒有 batch 維度,包含各種名為 "loss*" 的 loss 純量。 損失必須以這個名稱返回,因為它們會在反向傳播之前被 trainer 讀取。

文件

存取 PyTorch 的全面開發人員文件

檢視文件

教學課程

取得針對初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得您的問題解答

檢視資源