理解强化学习中的 returns (回报)和 rew (奖励)

在强化学习中,通常我们会经历一系列的状态-动作对,并在每个时间步接收到一个奖励。这些奖励记录在 rew 数组中。returns 是一个与奖励数组 rew 形状相同的数组,用于存储每个时间步的回报(return)。这里的回报是指从当前时间步开始到序列结束时的所有奖励的总和,但未来的奖励会被打折(discounted)。

具体来说,returns 数组中的每个元素是由 rew 数组中相同位置元素及该位置之后的所有元素计算得到的returns[t] 表示的是从时间步 t 开始累积的折扣奖励和,它考虑了从时间步 t 到序列结束时的所有奖励。折扣因子 gamma 是一个小于1的数值,通常接近1(例如0.99),它用于减少未来奖励的影响。

这种计算方式反映了强化学习中的一个核心概念:我们关心的不仅仅是即时的奖励,而是长期的累积奖励。通过计算 returns,我们能够得到一个更全面的评价,了解在某个时间步采取的动作对未来的影响

举个例子来说明这个过程:

假设我们有一个长度为4的奖励序列 rew = [r0, r1, r2, r3],折扣因子 gamma = 0.9。我们要计算每个时间步的 returns

  • 初始化 returns = [0, 0, 0, 0](与 rew 形状相同)

  • 从最后一个时间步开始向前计算 returns

    • 在时间步 t = 3(最后一个时间步),returns[3] 只包含当前的奖励 r3,因为没有未来的奖励了。所以 returns[3] = r3

    • 在时间步 t = 2returns[2] 包含当前的奖励 r2 和打折后的下一个时间步的 returns[3]。计算为 returns[2] = r2 + gamma * returns[3] = r2 + 0.9 * r3

    • 在时间步 t = 1returns[1] 包含当前的奖励 r1 和打折后的下一个时间步的 returns[2]。计算为 returns[1] = r1 + gamma * returns[2] = r1 + 0.9 * (r2 + 0.9 * r3)

    • 在时间步 t = 0returns[0] 包含当前的奖励 r0 和打折后的下一个时间步的 returns[1]。计算为 returns[0] = r0 + gamma * returns[1] = r0 + 0.9 * (r1 + 0.9 * (r2 + 0.9 * r3))

比如 rew = [1, 2, 3, 4],并且折扣因子 gamma = 0.9,那么 returns 的计算过程如下:

rew = np.array([1, 2, 3, 4])  
gamma = 0.9  
returns = np.zeros_like(rew)  
  
# 从后向前计算returns  
for t in reversed(range(len(rew))):  
    if t == len(rew) - 1:  
        returns[t] = rew[t]  
    else:  
        returns[t] = rew[t] + gamma * returns[t+1]  
  
print(returns)

输出:

[8.146, 7.94, 6.6, 4]

即从第一个时间步开始,考虑到未来的折扣奖励,总的累积奖励是8.146。从第二个时间步开始是7.94,以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值