You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PPO模型TensorBoard表现与实际推理结果不符问题咨询

股票交易强化学习模型训练与推理表现不一致问题

环境与模型设置

  • 自定义多股票交易环境,每个episode固定11步
  • 观测数据格式:
    [[price_tminus2,price_diff_tminus3_&_tminus2],[price_tminus1,price_diff_tminus2_&_tminus1],
    [price_t,price_diff_tminus1_&_t]]
    
  • 调用env.reset()时生成由[action, volume]对组成的离散动作列表(后续计划转为连续动作),模型通过选择索引执行对应行为

问题现象

TensorBoard显示训练阶段平均episode奖励已收敛至该episode的最大可能值,但使用model.predict()单步推理验证单episode时,表现极差,奖励结果与训练时完全不符。

推理验证代码

eval_env = gym.make('stockbuyselln-v0', df=df_sin, frame_bound=(5,16), window_size=3, initCash=1)
obs = np.array(eval_env.reset())
while True: 
    obs = eval_env.get_observation()
    action, _states = PPO_model.predict(obs)
    obs, rewards, done, truncated, info = eval_env.step(action)
    if done:
        # print("info", info)
        break
plt.figure(figsize=(15,6))
eval_env.render_all()
plt.show()

可能的原因及排查方向

  • 观测数据预处理不匹配:训练时若对观测数据做了归一化、标准化或其他预处理,推理时必须执行完全相同的操作。如果推理时直接使用原始观测值,模型输入分布与训练时差异过大,会导致表现暴跌。检查训练 pipeline 中是否有对obs的缩放、归一化步骤,推理代码是否遗漏。
  • 环境初始化参数不一致:训练环境与推理环境的核心参数(如frame_bound、window_size、初始资金initCash)必须完全一致。代码中推理环境用了frame_bound=(5,16),需确认训练时是否使用了相同的数据区间,避免因数据分布不同导致模型失效。
  • 推理模式错误:PPO模型训练时会通过随机采样动作进行探索,但推理时需切换到确定性模式。调用model.predict()时需传入deterministic=True参数(即PPO_model.predict(obs, deterministic=True)),否则推理时模型仍会随机选择动作,导致表现不稳定。
  • 步序逻辑错误:当前推理代码中,reset()返回的初始观测被丢弃,转而调用eval_env.get_observation()获取观测,这可能导致第一步动作基于错误的初始状态。正确流程应为:obs = eval_env.reset()后直接用该obs预测动作,无需额外调用get_observation()。
  • 奖励计算逻辑不一致:确认训练环境与推理环境的奖励计算函数完全相同,是否存在训练时使用了奖励 shaping 但推理时未同步的情况。
  • 离散动作列表生成差异:检查env.reset()生成的离散动作列表在训练和推理时是否完全一致,避免模型选择的索引对应不同的[action, volume]对,导致执行错误行为。

内容的提问来源于stack exchange,提问作者José Luis Neves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:50:29