TRL 日志信息
由于强化学习算法历来都难以调试,因此密切关注日志记录非常重要。默认情况下,TRL PPOTrainer将大量相关信息保存到wandb或tensorboard。
初始化后,将这两个选项之一传递给PPOConfig:
在这里插入代码片
如果您想使用tensorboard
进行日志记录,请将kwarg添加project_kwargs={"logging_dir": PATH_TO_LOGS}
到PPOConfig
中。
PPO 记录
以下是数据中提供的记录指标的简要说明:
要监控的关键指标。我们希望最大化奖励,保持较低的 KL 散度,并最大化熵:
- env/reward_mean:从环境中获得的平均奖励。Alias ppo/mean_scores,它是 sed 专门监控奖励模型的。
- env/reward_std:从环境中获得的奖励的标准差。别名 ` ppo/std_scores,是 sed 专门监控奖励模型的。
- 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 算法的总损失。它是策略损失和价值函数损失的总和。
查询、响应和日志概率的统计信息: -
tokens/queries_len_mean:查询标记的平均长度。
-
tokens/queries_len_std:查询标记长度的标准偏差。
-
tokens/queries_dist:查询标记长度的直方图分布。
-
tokens/responses_len_mean:响应标记的平均长度。
-
tokens/responses_len_std:响应标记长度的标准偏差。
-
tokens/responses_dist:响应标记长度的直方图分布。(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:ratio1是一个基线值,意味着在新旧策略下采样token的概率是相同的。如果该比率太高(例如200),则意味着在新策略下采样令牌的概率比旧策略高200倍。这表明新策略与旧策略差异太大,这很可能会导致后期过度优化和崩溃训练。
-
ppo/policy/clipfrac和ppo/policy/approxkl:如果ratio太高,就会ratio被剪裁,导致高clipfrac和高approxkl。
-
objective/kl:应该保持正向,这样政策与参考政策不会相差太远。
-
objective/kl_coef:目标系数AdaptiveKLController。通常在数值不稳定之前增加。