TRL 文档
日志记录
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
日志记录
由于强化学习算法在历史上一直难以调试,因此仔细关注日志记录非常重要。默认情况下,TRL PPOTrainer 会将大量相关信息保存到 wandb 或 tensorboard。
初始化时,将以下两个选项之一传递给 PPOConfig
training_args = PPOConfig(..., report_to="wandb") # or "tensorboard"
如果你想使用 tensorboard 进行日志记录,请将 kwarg project_kwargs={"logging_dir": PATH_TO_LOGS}
添加到 PPOConfig。
PPO 日志记录
以下是数据中提供的已记录指标的简要说明
需要监控的关键指标。我们希望最大化奖励,保持较低的 KL 散度,并最大化熵
env/reward_mean
: 从环境中获得的平均奖励。别名ppo/mean_scores
,用于专门监控奖励模型。env/reward_std
: 从环境中获得的奖励的标准差。别名ppo/std_scores
,用于专门监控奖励模型。env/reward_dist
: 从环境中获得的奖励的直方图分布。objective/kl
: 新旧策略之间的平均 Kullback-Leibler (KL) 散度。它衡量新策略偏离旧策略的程度。KL 散度用于计算目标函数中的 KL 惩罚项。objective/kl_dist
:objective/kl
的直方图分布。objective/kl_coef
: 目标函数中 Kullback-Leibler (KL) 散度的系数。ppo/mean_non_score_reward
: KL 惩罚项,由objective/kl * objective/kl_coef
计算得出,作为优化的总奖励,以防止新策略偏离旧策略太远。objective/entropy
: 模型策略的熵,由-logprobs.sum(-1).mean()
计算得出。高熵意味着模型的行为更随机,这可能有利于探索。
训练统计数据
ppo/learning_rate
: PPO 算法的学习率。ppo/policy/entropy
: 模型策略的熵,由pd = torch.nn.functional.softmax(logits, dim=-1); entropy = torch.logsumexp(logits, dim=-1) - torch.sum(pd * logits, dim=-1)
计算得出。它衡量策略的随机性。ppo/policy/clipfrac
: 概率比率(旧策略 / 新策略)在 PPO 目标函数中超出裁剪范围的比例。这可以用于监控优化过程。ppo/policy/approxkl
: 新旧策略之间的近似 KL 散度,由0.5 * masked_mean((logprobs - old_logprobs) ** 2, mask)
衡量,对应于 http://joschu.net/blog/kl-approx.html 中的 k2 估计器。ppo/policy/policykl
: 类似于ppo/policy/approxkl
,但由masked_mean(old_logprobs - logprobs, mask)
衡量,对应于 http://joschu.net/blog/kl-approx.html 中的 k1 估计器。ppo/policy/ratio
: 新旧策略之间比率的直方图分布,用于计算 PPO 目标函数。ppo/policy/advantages_mean
: GAE(广义优势估计)优势估计的平均值。优势函数衡量在给定状态下,一个动作比平均动作好多少。ppo/policy/advantages
:ppo/policy/advantages_mean
的直方图分布。ppo/returns/mean
: TD(λ) 回报的平均值,由returns = advantage + values
计算得出,是模型性能的另一个指标。有关更多详细信息,请参阅 https://iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/。ppo/returns/var
: TD(λ) 回报的方差,由returns = advantage + values
计算得出,是模型性能的另一个指标。ppo/val/mean
: 值的平均值,用于监控价值函数的性能。ppo/val/var
: 值的方差,用于监控价值函数的性能。ppo/val/var_explained
: 价值函数的解释方差,用于监控价值函数的性能。ppo/val/clipfrac
: 价值函数预测值被裁剪的比例。ppo/val/vpred
: 来自价值函数的预测值。ppo/val/error
:ppo/val/vpred
和回报之间的均方误差,用于监控价值函数的性能。ppo/loss/policy
: 近端策略优化 (PPO) 算法的策略损失。ppo/loss/value
: PPO 算法中价值函数的损失。此值量化了该函数估计预期未来奖励的程度。ppo/loss/total
: PPO 算法的总损失。它是策略损失和价值函数损失的总和。
关于 queries、responses 和 logprobs 的统计数据
tokens/queries_len_mean
: queries tokens 的平均长度。tokens/queries_len_std
: queries tokens 长度的标准差。tokens/queries_dist
: queries tokens 长度的直方图分布。tokens/responses_len_mean
: responses tokens 的平均长度。tokens/responses_len_std
: responses tokens 长度的标准差。tokens/responses_dist
: responses tokens 长度的直方图分布。(Costa:命名不一致,应为tokens/responses_len_dist
)objective/logprobs
: 模型采取的动作的对数概率的直方图分布。objective/ref_logprobs
: 参考模型采取的动作的对数概率的直方图分布。
关键值
在训练期间,会记录许多值,以下是最重要的值
env/reward_mean
,env/reward_std
,env/reward_dist
:来自“环境”/奖励模型的奖励分布的属性ppo/mean_non_score_reward
:训练期间的平均负 KL 惩罚项(显示参考模型和新策略在步骤批次之间的差异)
以下是一些有助于监控稳定性的参数(当这些参数发散或崩溃为 0 时,尝试调整变量)
ppo/loss/value
:当情况不佳时,它会飙升/NaN。ppo/policy/ratio
:ratio
为 1 是基线值,这意味着在新旧策略下采样 token 的概率相同。如果 ratio 太高,例如 200,则意味着在新策略下采样 token 的概率比旧策略高 200 倍。这表明新策略与旧策略差异太大,这可能会导致过度优化并在后期导致训练崩溃。ppo/policy/clipfrac
和ppo/policy/approxkl
:如果 ratio 太高,ratio 将会被裁剪,从而导致较高的 clipfrac 和 approxkl。objective/kl
:它应该保持为正值,以便策略不会离参考策略太远。objective/kl_coef
:使用AdaptiveKLController
的目标系数。通常在数值不稳定性之前会增加。