TRL 文件
日誌記錄
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
日誌記錄
由於強化學習演算法在歷史上一直難以除錯,因此特別注意日誌記錄非常重要。預設情況下,TRL 的訓練器,如 PPOTrainer 和 GRPOTrainer,會將大量相關資訊儲存到支援的實驗跟蹤器中,例如 Weights & Biases (wandb) 或 TensorBoard。
初始化時,將 report_to
引數傳遞給相應的配置物件(例如,PPOConfig 用於 PPOTrainer
,或 GRPOConfig 用於 GRPOTrainer
)。
# For PPOTrainer
ppo_config = PPOConfig(
# ...,
report_to="wandb" # or "tensorboard"
)
# For GRPOTrainer
grpc_config = GRPOConfig(
# ...,
report_to="wandb" # or "tensorboard"
)
如果你想使用 TensorBoard 記錄日誌,你可能還需要指定日誌目錄,例如,透過向配置物件(如 PPOConfig
或 GRPOConfig
)新增 logging_dir=PATH_TO_LOGS
。
PPO 日誌記錄
以下是對資料中記錄的指標的簡要解釋
eps
: 跟蹤每秒的片段(episode)數。objective/kl
: 當前策略和參考策略之間的平均庫爾貝克-萊布勒(KL)散度。objective/entropy
: 策略的平均熵,表示策略選擇動作的隨機性。objective/non_score_reward
: 來自非分數相關來源的平均獎勵,基本上是beta * kl.sum(1)
,其中beta
是 KL 懲罰係數,kl
是每個詞元的 KL 散度。objective/rlhf_reward
: 平均 RLHF 獎勵,即score - non_score_reward
。objective/scores
: 由獎勵模型/環境返回的平均分數。policy/approxkl_avg
: 連續 PPO 策略之間的平均近似 KL 散度。請注意,這與objective/kl
不同。policy/clipfrac_avg
: 被裁剪的策略更新的平均比例,表示策略更新被限制以防止大幅度變化的頻率。loss/policy_avg
: 平均策略損失,表示策略的表現如何。loss/value_avg
: 平均價值損失,表示預測價值與實際獎勵之間的差異。val/clipfrac_avg
: 被裁剪的價值函式更新的平均比例,類似於policy/clipfrac_avg
,但針對的是價值函式。policy/entropy_avg
: 訓練期間策略的平均熵,表示策略動作的多樣性。val/ratio
: 當前策略機率與舊策略機率的平均比率,提供了策略變化程度的度量。val/ratio_var
:val/ratio
的方差,表示策略變化的可變性。val/num_eos_tokens
: 生成的序列結束(EOS)詞元的數量,可以表示完整響應的數量。lr
: 最佳化器當前使用的學習率。episode
: 訓練過程中的當前回合數。
關鍵值
在訓練過程中會記錄許多值,以下是最重要的幾個
objective/scores
: 由獎勵模型/環境返回的平均分數。objective/rlhf_reward
: 平均 RLHF 獎勵。這是 RLHF 訓練的最終目標。如果訓練按預期進行,該指標應持續上升。objective/non_score_reward
: 來自非分數相關來源(例如 KL 懲罰)的平均獎勵。
以下是一些有助於監控穩定性的引數(當這些引數發散或崩潰到 0 時,請嘗試調整變數)
loss/value_avg
: 平均價值損失。當訓練不順利時,它會飆升或變為 NaN。val/ratio
: 當前策略機率與舊策略機率的平均比率。這個數字應該在 1.0 左右浮動。如果這個ratio
太高(例如 2.0 或 1000.0)或太小(例如 0.1),則意味著連續策略之間的更新過於劇烈。policy/clipfrac_avg
和policy/approxkl_avg
: 如果val/ratio
太高,ratio
將被裁剪,導致policy/clipfrac_avg
和policy/approxkl_avg
也變高。objective/kl
: 平均 KL 散度。它應該保持正值,並且理想情況下不要太大,以使策略不會偏離參考策略太遠。
GRPO 日誌記錄
以下是對 GRPO 訓練器資料中記錄的指標的簡要解釋
num_tokens
: 迄今為止在訓練過程中處理的輸入令牌總數。
補全
completions/mean_length
: 所有生成的補全的平均長度(包括那些未以 EOS 令牌結尾的)。completions/min_length
: 所有生成的補全中的最小長度。completions/max_length
: 所有生成的補全中的最大長度。completions/clipped_ratio
: 在達到最大生成長度之前未以 EOS 令牌結尾的補全的比例(即它們被截斷了)。completions/mean_terminated_length
: 僅那些成功以 EOS 令牌結尾的補全的平均長度。completions/min_terminated_length
: 以 EOS 令牌結尾的補全中的最小長度。completions/max_terminated_length
: 以 EOS 令牌結尾的補全中的最大長度。
獎勵
rewards/{reward_func_name}/mean
: 從特定的、命名的獎勵函式獲得的平均獎勵(例如,rewards/my_custom_reward/mean
)。這將為每個使用的獎勵函式記錄。rewards/{reward_func_name}/std
: 來自特定的、命名的獎勵函式的獎勵的標準差。reward
: 經過分組歸一化(優勢)後,(可能加權且如果args.scale_rewards
為 true 則歸一化)獎勵的總體平均值。reward_std
: 在分組歸一化以計算優勢*之前*的(可能加權的)獎勵的標準差。
策略和損失指標
kl
: 當前策略與參考策略之間的平均庫爾貝克-萊布勒(KL)散度。僅當beta
(GRPOConfig
中的 KL 係數)不為零時記錄此項。entropy
: 在生成的補全中,令牌預測的平均熵。- 如果使用 Liger GRPOLoss (
use_liger_loss: True
inGRPOConfig
)clip_ratio
: 策略更新中,機率比率根據 GRPO 損失的 epsilon 邊界被裁剪的比例。
- 如果使用標準 GRPOLoss (
use_liger_loss: False
)clip_ratio/low_mean
: 機率比率r_t(θ)
在下界1 - epsilon_low
被裁剪的例項的平均比例(當優勢為負且比率低於該界限時發生)。clip_ratio/low_min
: 在批次/程序中觀察到的clip_ratio/low_mean
的最小比例。clip_ratio/high_mean
: 機率比率r_t(θ)
在上界1 + epsilon_high
被裁剪的例項的平均比例(當優勢為正且比率高於該界限時發生)。clip_ratio/high_max
: 在批次/程序中觀察到的clip_ratio/high_mean
的最大比例。clip_ratio/region_mean
: 機率比率在下界或上界被裁剪的例項的平均比例。
關鍵 GRPO 值
在 GRPO 訓練期間,監控這些值以瞭解效能和穩定性
reward
: 這是主要目標。它反映了策略正在實現的(分組歸一化的)獎勵。在成功的訓練中,它通常應該增加。kl
: 如果beta > 0
,它會跟蹤與參考模型的差異。密切關注它以確保策略不會偏離太遠,這可能導致不穩定。clip_ratio/*
(Liger 損失的clip_ratio
或標準損失的更詳細的clip_ratio/...
指標): 這些指標表明策略更新被 GRPO 裁剪機制約束的頻率。非常高的值可能表明策略試圖進行過於劇烈的改變(可能是由於大的優勢或過高的學習率),或者 epsilon 裁剪範圍過於嚴格。completions/clipped_ratio
: 這裡的高比率表明模型經常生成被max_completion_length
截斷的補全,而不是自然地以 EOS 令牌結束。這可能表明在學習序列終止方面存在問題,或者max_completion_length
太短。rewards/{reward_func_name}/mean
: 監控單個獎勵函式的平均值可以幫助診斷模型正在學習或在哪些期望行為方面遇到困難,特別是在使用多個獎勵源時。entropy
: 衡量策略在其動作選擇中的不確定性,較高的熵表明更多的探索。熵的崩潰意味著策略變得過於自信和確定性,通常為時過早。這會透過減少探索和使更新過於偏頗來阻礙學習。穩定但非零的熵通常是策略保持靈活性並繼續探索的標誌。