returns
(回报):- 表示从某个时间点开始,智能体在未来能够获得的累计折扣奖励的总和。
- 用于评估某个状态或动作的好坏,帮助智能体了解其在环境中执行动作后可能获得的长期收益。
deltas
(TD误差):- 表示实际获得的奖励与预期奖励之间的差异。
- 用于更新值函数(如Critic网络),使其更准确地预测未来的回报。
- 有助于调整策略,因为策略的目标是最大化预期回报。
advantages
(优势):- 表示采取某个特定动作相对于平均动作或基线动作的优势。
- 优势为正意味着该动作比平均动作好,为负则意味着比平均动作差。
- 用于指导策略的更新,使得好的动作被更频繁地选择,而坏的动作被避免。
returns[i] = rewards[i] + gamma * prev_return * masks[i]
deltas[i] = rewards[i] + gamma * prev_value * masks[i] - values[i]
advantages[i] = deltas[i] + gamma * lamda * prev_advantage * masks[i]
假设有一个简单的环境,智能体在三个时间步中获得以下奖励:r1 = 1
, r2 = 0
, r3 = -1
,折扣因子 gamma = 0.9
,GAE参数 lambda = 0.5
,所有终止状态的masks
值为0,非终止状态为1。假设Critic网络预测的状态值分别为:v1 = 0.5
, v2 = 0.4
, v3 = -0.5
。
- 计算
returns
:return_3 = r3 = -1
(因为是终止状态,所以没有其他未来回报)return_2 = r2 + gamma * return_3 = 0 + 0.9 * (-1) = -0.9
return_1 = r1 + gamma * return_2 = 1 + 0.9 * (-0.9) = 0.19
- 计算
deltas
:delta_3 = r3 - v3 = -1 - (-0.5) = -0.5
delta_2 = r2 + gamma * v3 - v2 = 0 + 0.9 * (-0.5) - 0.4 = -0.85
delta_1 = r1 + gamma * v2 - v1 = 1 + 0.9 * 0.4 - 0.5 = 0.86
- 计算
advantages
(使用GAE方法):advantage_3 = delta_3 = -0.5
(因为是终止状态,所以没有其他未来优势)advantage_2 = delta_2 + gamma * lambda * advantage_3 = -0.85 + 0.9 * 0.5 * (-0.5) = -1.075
advantage_1 = delta_1 + gamma * lambda * advantage_2 = 0.86 + 0.9 * 0.5 * (-1.075) = 0.32125