从零实现SAC训练BipedalWalker,咨询NormalizeObservation使用方式
关于Gymnasium中NormalizeObservation与RescaleAction的用法解答
你的代码用法是正确的,这种嵌套Wrapper的方式可以让NormalizeObservation对后续所有环境交互产生的观测生效,同时RescaleAction也能正确完成动作空间的缩放。
具体逻辑说明
Gymnasium的Wrapper采用嵌套链式工作模式,每一层Wrapper会处理上一层的输入或输出:
- 当调用
env.step(action)时,RescaleAction会先将你传入的0-1区间动作,缩放回BipedalWalker原环境的[-1,1]动作空间,再传递给底层环境执行; - 环境执行后返回的原始观测,会先经过
NormalizeObservation的归一化处理(默认基于在线统计的均值和方差,将观测转换为均值0、方差1的分布),再返回给你的SAC算法,满足输入均衡的需求。
额外注意事项
NormalizeObservation默认是在线动态统计观测的均值和方差,训练过程中会持续更新。如果训练完成后要测试智能体,建议保存训练阶段统计的均值和方差,测试时固定使用这些值,避免测试阶段的新统计数据干扰结果;- 如果你需要观测严格归一化到0-1区间,
NormalizeObservation的默认输出是标准正态分布,你可以额外添加MinMaxObservationWrapper,或者在归一化后自行做线性变换; - BipedalWalker原动作空间为[-1,1],
RescaleAction(min_action=0, max_action=1)的参数设置完全适配,动作缩放逻辑正确。
内容的提问来源于stack exchange,提问作者Anas Rzq
相关产品推荐
相关产品推荐

