接上篇: macos(M4)上跑强化学习 - PyTorch LunarLander-v3 Stable-Baselines3
官方文档参考:https://stable-baselines3.readthedocs.io/en/master/common/logger.html#explanation-of-logger-output
通用的图例数据基础介绍:
- Value:原始真实指标数值。(图标中与图例颜色较淡的那根线)
- Smotthed:TensorBoard 自带曲线滑动平均处理后的数值。主要用来观察整体升降趋势。(图表中和图例相同颜色的那根线)
- Step:横轴坐标,也就是从训练开始,智能体和环境一共执行了多少步 action。
- Relative:相对时间。用来横向对比不同实验训练速度快慢。
Rollout
PPO 不是走一步更新一次,而是先收集一批轨迹,再统一训练,这一批收集过程就叫一次 rollout。
其中有2个图标:如下图
rollout/ep_len_mean
本轮 rollout 收集到的所有回合,平均回合长度 (其实就是回合执行的时间,这里用步数代替了)。如下图:
rollout/ep_rew_mean
本轮 rollout 收集到的所有回合,平均回合奖励 (就是平均回合奖励的总数)。如下图:
Time
其中只有一个,就是fps。(这个不是游戏渲染帧率)每秒完成多少条环境交互 step,也就是训练数据采集阶段的运行速度。
简单来说,fps越高,收集训练样本速度越快,也就意味着训练速度越快。
Train
这里有9个表格。
train/approx_kl
Approximate KL Divergence,近似平均KL散度,代表的是更新前旧策略 和 更新后新策略 的分布差距有多大。
PPO 最核心思想:不能让策略一次性改动太大!,否则训练极易崩溃、震荡。
- 数值小:新旧策略几乎没变化,更新力度太弱,学习慢
- 数值大:新策略一次性改动过猛,很危险,容易训崩
网上有很多说法,有说0.001-0.02之间,有说0.001-0.03之间。不过没有找到详细的解析或说明。
train/clip_fraction
被 Clip 裁剪截断的样本占全部样本的比例 。
强化学习中,需要限制策略更新幅度,阻止一次性改动过大。也就意味着,更新的新策略越多,裁剪越大。所以这里有一个规律,KL 越高 → 策略改动越大 → 更多样本触发裁剪 → clip_fraction 上升。
train/clip_fraction
PPO 裁剪区间的半径 ,是初始化模型设置的参数。默认为0.2。可以开启动态自适应clip_range。
train/entropy_loss
熵损失。熵(Entropy):用来衡量策略随机性大小。
- 熵越大:动作概率分布越平均 → 智能体更喜欢随机探索
- 熵越小:策略趋向确定性,总是固定选最优动作,探索变少
train/explained_variance
解释方差(Explained Variance)专门用来评价 PPO 里 Critic 价值网络(估值网络)预测准不准 。
数值区间解读
≈ 1.0:完美!价值网络预测和真实回报几乎一致> 0:价值网络有一定预测能力(有效)≈ 0:价值网络预测效果 ≈ 和直接猜平均值差不多,基本没用< 0:最差情况!价值网络预测完全不靠谱,甚至还不如直接输出常数均值
train/learning_rate
优化器当前使用的学习率 lr。其实就是控制神经网络每一次参数更新的步幅大小。
- lr 大:参数改动幅度大,学习快,但容易震荡、训崩
- lr 小:更新平稳,不容易翻车,但收敛速度变慢
图中是固定学习率,没有开启线性衰减(lr_schedule)。开启后随着训练步数增加,学习率会持续慢慢降低 ,这条曲线会一路向下倾斜。线性衰减优势在于,开始时快速探索,后期稳定收敛,不容易崩。
train/policy_gradient_loss
策略梯度损失(Actor 网络专属损失) 。
这一步是策略更加倾向选择能拿到更高奖励的动作。只控制模型怎么选择动作。
好的表现是:缓慢持续下降,不会剧烈震荡、不会突然断崖式飙升。
强化学习的一个结论:平稳温和的迭代,经常比单次激进优化得到更好的最终结果。
train/value_loss
价值网络损失(Critic 网络专属损失) 。
这个目标是让 Critic 的估值越来越贴近真实收益 。
价值网络:评估当前状态好不好。
好的表现是:训练前期 Critic 完全不懂环境,预测偏差巨大;随着训练不断修正,估值误差持续缩小。平稳持续下降,没有突然剧烈跳涨。
train/loss
图表中这个会在policy_gradient_loss和value_loss前面。只是这里我放到了最后。
PPO 总的联合损失函数(Total Loss) 。
策略梯度损失(policy_gradient_loss,优化 Actor) + 价值网络损失(优化 Critic)+ 熵损失(entropy_loss,鼓励探索,带负号)。
强化学习中,不能像普通监督学习一样,单纯认为 loss 越低 = 模型越好!。