在采样时,如果最后一步的状态不是即将终止的状态。
由于lastgea = 0,因此获取不到下一步的 gae。
这可能不会造成太大影响。
mb_returns = np.zeros_like(mb_rewards) mb_advs = np.zeros_like(mb_rewards) lastgaelam = 0 for t in reversed(range(nsteps)): if t == nsteps - 1: nextnonterminal = 1.0 - dones # dones nextvalues = last_values else: nextnonterminal = 1.0 - mb_dones[t+1] nextvalues = mb_values[t+1] delta = mb_rewards[t] + gamma * nextvalues * nextnonterminal - mb_values[t] mb_advs[t] = lastgaelam = delta + gamma * lam * nextnonterminal * lastgaelam mb_returns = mb_advs + mb_values
另一种方法是将终止之后的数据全部丢掉,保证数据大于 n_train * mini_batch 时,进行训练。
GAE 增加了 Adv 的变动。
墨之科技,版权所有 © Copyright 2017-2027
湘ICP备14012786号 邮箱:ai@inksci.com