Skip to content

Latest commit

 

History

History
116 lines (61 loc) · 6.01 KB

trl07_08.md

File metadata and controls

116 lines (61 loc) · 6.01 KB

日志记录

原始文本:huggingface.co/docs/trl/logging

由于强化学习算法在历史上很难调试,因此重要的是要仔细关注日志记录。默认情况下,TRL PPOTrainer 会将大量相关信息保存到wandbtensorboard中。

在初始化时,将以下两个选项之一传递给 PPOConfig:

config = PPOConfig(
    model_name=args.model_name,
    log_with=`wandb`, # or `tensorboard`
)

如果要使用 tensorboard 进行日志记录,请将project_kwargs={"logging_dir": PATH_TO_LOGS}添加到 PPOConfig 中。

PPO 日志记录

以下是提供的数据中记录的指标的简要解释:

要监视的关键指标。我们希望最大化奖励,保持低 KL 散度,并最大化熵:

  1. env/reward_mean: 从环境中获得的平均奖励。别名`ppo/mean_scores',用于专门监视奖励模型。

  2. env/reward_std: 环境获得奖励的标准差。别名``ppo/std_scores',用于专门监视奖励模型。

  3. env/reward_dist: 从环境中获得的奖励的直方图分布。

  4. objective/kl: 旧政策和新政策之间的平均 Kullback-Leibler(KL)散度。它衡量新政策偏离旧政策的程度。KL 散度用于计算目标函数中的 KL 惩罚。

  5. objective/kl_dist: objective/kl的直方图分布。

  6. objective/kl_coef: 目标函数中 Kullback-Leibler(KL)散度的系数。

  7. ppo/mean_non_score_reward: 由objective/kl * objective/kl_coef计算的KL 惩罚,作为优化的总奖励,以防止新政策偏离太远旧政策。

  8. objective/entropy: 模型策略的熵,通过-logprobs.sum(-1).mean()计算。高熵意味着模型的动作更随机,这对于探索可能是有益的。

训练统计:

  1. ppo/learning_rate: PPO 算法的学习率。

  2. ppo/policy/entropy: 模型策略的熵,通过pd = torch.nn.functional.softmax(logits, dim=-1); entropy = torch.logsumexp(logits, dim=-1) - torch.sum(pd * logits, dim=-1)计算。它衡量策略的随机性。

  3. ppo/policy/clipfrac: 在 PPO 目标中,概率比率(旧政策/新政策)超出剪切范围的比例。这可以用来监视优化过程。

  4. ppo/policy/approxkl: 旧政策和新政策之间的近似 KL 散度,由0.5 * masked_mean((logprobs - old_logprobs) ** 2, mask)测量,对应于joschu.net/blog/kl-approx.html中的k2估计器。

  5. ppo/policy/policykl: 类似于ppo/policy/approxkl,但由masked_mean(old_logprobs - logprobs, mask)测量,对应于joschu.net/blog/kl-approx.html中的k1估计器。

  6. ppo/policy/ratio: 新旧政策之间比率的直方图分布,用于计算 PPO 目标。

  7. ppo/policy/advantages_mean: GAE(广义优势估计)优势估计的平均值。优势函数衡量了一个动作相对于状态的平均动作有多好。

  8. ppo/policy/advantages: ppo/policy/advantages_mean的直方图分布。

  9. ppo/returns/mean: TD(λ)回报的平均值,通过returns = advantage + values计算,这是模型性能的另一个指标。有关更多详细信息,请参见iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/

  10. ppo/returns/var: TD(λ)回报的方差,通过returns = advantage + values计算,这是模型性能的另一个指标。

  11. ppo/val/mean:值的平均值,用于监控值函数的性能。

  12. ppo/val/var:值的方差,用于监控值函数的性能。

  13. ppo/val/var_explained:值函数的解释方差,用于监控值函数的性能。

  14. ppo/val/clipfrac:值函数预测值被剪切的比例。

  15. ppo/val/vpred:值函数的预测值。

  16. ppo/val/errorppo/val/vpred和 returns 之间的均方误差,用于监控值函数的性能。

  17. ppo/loss/policy:Proximal Policy Optimization (PPO)算法的策略损失。

  18. ppo/loss/value:PPO 算法中值函数的损失。该值量化了函数估计未来预期奖励的能力。

  19. ppo/loss/total:PPO 算法的总损失。它是策略损失和值函数损失的总和。

关于查询、响应和 logprobs 的统计数据:

  1. tokens/queries_len_mean:查询标记的平均长度。

  2. tokens/queries_len_std:查询标记长度的标准差。

  3. tokens/queries_dist:查询标记长度的直方图分布。

  4. tokens/responses_len_mean:响应标记的平均长度。

  5. tokens/responses_len_std:响应标记长度的标准差。

  6. tokens/responses_dist:响应标记长度的直方图分布。(Costa:命名不一致,应该是tokens/responses_len_dist

  7. objective/logprobs:模型采取的动作的对数概率的直方图分布。

  8. objective/ref_logprobs:参考模型采取的动作的对数概率的直方图分布。

关键数值

在训练过程中,记录了许多数值,以下是最重要的数值:

  1. env/reward_mean,env/reward_std, env/reward_dist: 奖励分布的属性来自“环境”/奖励模型

  2. ppo/mean_non_score_reward:训练过程中的平均负的 KL 惩罚(显示参考模型和新策略在步骤中批次之间的差异)。

以下是一些有用的参数,用于监控稳定性(当这些参数发散或收敛为 0 时,请尝试调整变量):

  1. ppo/loss/value:当情况不好时,它会激增/NaN。

  2. ppo/policy/ratioratio为 1 是一个基准值,意味着在新旧策略下采样标记的概率相同。如果比率太高,比如 200,这意味着在新策略下采样标记的概率比旧策略高 200 倍。这表明新策略与旧策略差异太大,可能会导致过度优化和训练后期崩溃。

  3. ppo/policy/clipfracppo/policy/approxkl:如果ratio太高,ratio将被剪切,导致clipfracapproxkl也很高。

  4. objective/kl:应保持为正值,以便策略不会远离参考策略。

  5. objective/kl_coef:与AdaptiveKLController一起的目标系数。通常在数值不稳定之前增加。