离线强化学习的乐观观点

Posted 雨夜的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了离线强化学习的乐观观点相关的知识,希望对你有一定的参考价值。

“离策略学习的潜力仍然诱人,实现它的最佳方式仍然是个谜。” — Sutton & Barto

大多数强化学习(RL) 算法都假设代理会主动与在线环境交互,以从自己收集的经验中学习。这些算法很难应用于复杂的现实世界问题(例如机器人和自动驾驶),因为从现实世界收集的大量数据可能会导致样本效率极低并导致意外 行为。,而那些在模拟中操作的人需要具有挑战性的高保真模拟器。然而,对于许多现实世界的 RL 应用,已经存在大量先前 收集的 交互数据,这些数据可用于使 RL 能够解决这些问题,并通过结合不同的先前经验实现更好的泛化。

使用离线 RL可以有效地使用现有的交互数据,这是完全关闭策略RL 设置,其中从记录经验的固定数据集训练代理,无需与环境进行任何进一步交互。离线 RL 可以帮助 (1) 使用现有数据预训练 RL 代理,(2) 根据它们利用固定交互数据集的能力对 RL 算法进行经验评估,以及 (3) 提供现实世界的影响。然而,离线强化学习被认为具有挑战性,因为在线交互和任何固定的记录交互数据集之间的分布不匹配,即,当学习到的代理采取不同于数据收集代理的行动时,我们不知道应该提供的奖励.

在“离线 RL 的乐观观点”中,我们基于DQN代理的记录经验,为Atari 2600 游戏的离线 RL 提出了一个简单的实验设置。我们证明可以使用标准的离策略 RL 算法训练具有高于数据收集代理的高回报的代理,而无需明确纠正任何分布不匹配。我们还开发了一种强大的 RL 算法,称为随机集成混合 (REM),它在离线 RL 上显示出有希望的结果。总的来说,我们提出了一个乐观的观点,即在足够大和多样化的离线数据集上训练的稳健 RL 算法可以带来高质量的行为,加强新兴的数据驱动 RL范式。为了促进离线 RL 方法的开发和评估,我们还公开发布了DQN 重放数据集并开源了我们的代码。更多细节可以在offline-rl.github.io找到。

Off-policy 和离线强化学习入门

我们总结了以下强化学习的各种方法:

在线、off-policy RL 代理(例如DQN)仅通过观察游戏屏幕就可以在Atari 2600 游戏上实现人类级别的性能,而无需对游戏有任何明确的了解。DQN 根据最大可实现的未来奖励(即 Q 值)来估计在给定环境状态下操作的有效性。此外,最近的分布式 RL代理,例如QR-DQN,对可能的未来奖励的整个分布进行建模,而不是对每个状态-动作对的单个预期值进行建模。DQN 和 QR-DQN 等代理被认为是“在线的””,因为它们在优化策略(代理在给定状态下的行为)和使用该策略收集更多数据之间交替进行。

原则上,off-policy RL 代理可以从任何策略收集的数据中学习,而不仅仅是被优化的策略。然而,在离线RL 设置中,最近的 工作 提出了一种令人沮丧的观点,即标准的离策略代理会发散或以其他方式产生较差的性能。为了解决这个问题,之前的工作提出了通过规范学习策略以保持接近离线交互数据集的补救措施。离线强化学习的 DQN 重放数据集 在这项工作中,我们重新审视离线

RL 首先创建 DQN 重放数据集。该数据集是使用在 60 个Atari 2600 游戏上训练的DQN代理生成的,每个 2 亿帧,同时使用粘性动作(执行代理之前的动作而不是当前动作的概率为 25%)使问题更具挑战性。对于 60 场比赛中的每场比赛,我们训练 5 个具有不同随机初始化的 DQN 代理,并将训练期间遇到的所有(状态、动作、奖励、下一状态)元组存储到每场比赛的 5 个重放数据集中,从而得到总共 300 个数据集.

然后,DQN 重放数据集可用于训练离线RL 代理,而无需在训练期间与环境进行任何交互。每个游戏回放数据集大约比ImageNet大 3.5 倍,并且包括来自在线 DQN 优化过程中看到的所有中间策略的样本。

在 DQN 重放数据集上训练离线代理

我们在 DQN 重放数据集上训练了 DQN 和分布式QR-DQN 的离线变体。虽然离线数据集包含由DQN剂改善随着时间的训练进展经验数据,我们比较了表现最好的在线DQN剂下线代理商培训后获得的性能(即,一完全训练的DQN)。对于每场比赛,我们评估了训练的 5 个离线代理(每个数据集一个),使用在线回报,报告最佳平均性能。

除了少数游戏外,离线 DQN 在所有游戏中都比经过完全训练的在线 DQN 表现差,在这些游戏中,它在相同数量的数据下获得更高的分数。另一方面,离线 QR-DQN 在大多数游戏中优于离线 DQN 和完全训练的 DQN。这些结果表明,可以使用标准的深度强化学习算法离线优化强代理。此外,离线 QR-DQN 和 DQN 性能之间的差异表明它们利用离线数据的能力存在差异。

介绍两个强大的离线 RL 代理

在在线 RL 中,代理选择它认为会带来高回报的动作,然后接收纠正反馈。由于无法在离线 RL 中收集额外数据,因此必须使用固定数据集进行泛化推理。利用监督学习中使用模型集合来改进泛化的方法,我们提出了两个新的离线 RL 代理:* Ensemble-DQN是DQN的简单扩展,它训练多个Q 值估计并将它们平均以进行评估。

  • 随机集成混合 (REM)是受Dropout启发而易于实现的 DQN 扩展。REM 背后的关键直觉是,如果可以访问多个Q值估计,那么Q值估计的加权组合也是Q值的估计。因此,在每个训练步骤中,REM 随机组合多个 Q 值估计并使用该随机组合进行稳健训练。

  • 为了更有效地利用 DQN 重放数据集,我们训练离线代理的训练迭代次数是在线 DQN 的五倍,并在下面报告它们的性能。离线 REM 优于离线 DQN 和离线 QR-DQN。与经过充分训练的在线C51(一种强大的分发代理)的比较表明,离线 REM 的收益大于 C51 的收益。

    使用 Atari 上的标准训练协议,在线 REM 的性能与标准在线 RL 设置中的 QR-DQN 相当。这表明我们可以使用从 DQN 重放数据集和离线 RL 设置中获得的见解来构建有效的在线 RL 方法。

    在离线RL重要因素:结果比较

    这些结果之间的差异之前 的工作 是 报告在脱机设置标准RL代理的故障可以归因于以下几个因素:

  • 离线数据集大小。我们使用通过随机子采样整个 DQN 重放数据集获得的减少数据训练离线 QR-DQN 和 REM,保持相同的数据分布。类似于监督学习,性能往往会随着数据规模的增加而增加。仅占整个数据集的 10%,REM 和 QR-DQN 就大致恢复了经过充分训练的 DQN 的性能。

  • 离线数据集组合。我们在 DQN 重播数据集中每场比赛的前 2000 万帧上训练离线 RL 代理。离线 REM 和 QR-DQN 在这个质量较低的数据集中优于最佳策略,表明标准 RL 代理在具有足够多样化数据集的离线设置中运行良好。

  • 离线算法选择。有人声称,当离线训练时,标准的离策略代理在连续控制任务上是无效的。然而,我们发现最近的连续控制代理,例如TD3,在对大型和多样化的离线数据集进行训练时,其性能与复杂的离线代理相当。

    未来的工作。我们的结果强调,在从从大量不同策略的大量混合中收集的离线数据中学习时,需要对神经网络的泛化作用进行严格的表征。通过子采样DQN 重放(例如,第一个/最后一个k百万帧)使用各种数据收集策略对离线 RL 进行基准测试是另一个重要方向。我们目前采用在线策略评估,但是,“真正的”离线 RL 需要离线策略评估以进行超参数调整和提前停止。最后,基于模型的 RL和自监督学习方法也适用于离线 RL。


    强化学习中,Q-Learning与Sarsa的差别有多大?

    本文首发于:行者AI

    我相信,从某种意义上讲,强化学习是人工智能的未来。 —— 强化学习之父,Richard Sutton

    简单来说就是,智能体通过强化学习,可以知道自己在什么状态下,应该采取什么样的动作使得自身获得最大奖励。强化学习分为在线学习和离线学习,本文以Q-learning(离线)和Sarsa(在线)出发,浅谈两者异同。

    1. 简述Q-learning

    Q-Learning是强化学习算法中Value-based中的一种算法,Q即为Q(s,a)就是在某一时刻的s状态下(s∈S),采取动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

    更简单的理解就是我们基于状态s利用 ε − g r e e d y \\varepsilon-greedy εgreedy​​​法进行贪婪选择出动作a,然后执行动作a,得出下一状态s’以及reward r

    Q ( s , a ) = Q ( s , a ) + α ∗ ( r + γ ∗ m a x ( Q ( s ′ , a ∗ ) ) − Q ( s , a ) ) Q(s,a) = Q(s,a) + α*(r+γ*max(Q(s',a^*))-Q(s,a)) Q(s,a)=Q(s,a)+α(r+γmax(Q(s,a))Q(s,a))

    其中:s代表当前状态,a表示当前的行为,α是学习率,r是奖励值,a*表示当前可选行为集,γ是折扣率,也就是当前奖励的价值权重。

    在此附上主要代码:

    # 更新S
    def chose_direction(s, q_table):
        if np.random.uniform() > EPSILON or q_table.iloc[s, :].all() == 0:
            direction = np.random.choice(ACTIONS)
        else:
            direction = ACTIONS[q_table.iloc[s, :].argmax()]
        return direction
    
    # 学习过程
    s = 0
    is_terminal = False
    step_count = 0
    while not is_terminal:
        a = chose_direction(s, q_table)
        s_, r = update(s, a)
        q_predict = q_table.loc[s, a]
        if s_ != "terminal":
            q_target = r + GAMA*q_table.iloc[s_, :].max()
        else:
            q_target = r
            is_terminal = True
        q_table.loc[s, a] += ALPHA*(q_target-q_predict)
        a = s_
    

    2. 简述Sarsa

    Sarsa决策部分和Q-Learning一模一样,都是采用Q表的方式进行决策,我们会在Q表中挑选values比较大的动作实施在环境中来换取奖赏。但是Sarsa的更新是不一样的。‘sarsa’五个字母的含义即s(当前在状态),a(当前行为),r(奖励),s(下一步状态),a(下一步行为),也就是说我们在进行这一步操作时已经想到当前s对应的a,并且想好了下一个s’和a’。Sarsa的公式如下:

    Q ( s , a ) = Q ( s , a ) + α ∗ ( r + γ ∗ Q ( s ′ , a ′ ) − Q ( s , a ) ) Q(s,a) = Q(s,a) + α*(r+γ*Q(s',a')-Q(s,a)) Q(s,a)=Q(s,a)+α(r+γQ(s,a)Q(s,a))

    以下是Sarsa更新的主要代码:

    s = 0
    is_terminal = False
    step_count = 0
    a = chose_direction(s, q_table)
    while not is_terminal:
        s_, r = update(s, s)
        q_predict = q_table.loc[s, a]
        if s != "terminal" and s_ != "terminal":
            a_ = chose_direction(s_, q_table)
            q_target = r + GAMA*q_table.loc[s_, a_]
        else:
            q_target = r
            is_terminal = True
        q_table.loc[s,a] += ALPHA*(q_target-q_predict)
        s = s_
        a = a_
    

    3. 举例对比异同

    3.1 游戏地图

    • 灰色为陷阱

    • 黄色是奖励点

      游戏起始位置为1,到达陷阱或者奖励点都视为游戏结束。

    3.2 结果对比和分析

    • 灰色是当前状态如果进行这一行为会走到陷阱的情况
    • 黄色是当前状态如果进行这一行为会走到奖励点的情况

    两者都会走向奖励点,Q-learning是选择最近的道路,而Sarsa往往会早早的避开陷阱,例如13这个点Q-learning往往只会选择往上,但从表中可以看出Sarsa在13这个点的时候为了躲避危险选择的是往左。

    Q-learning和Sarsa在决策部分都是一模一样的,使用Q表的形式进行决策,从Q表中选择拥有较大值的行为施加到环境中以换取奖励,Q-learning是选取S’上会带来最大收益的行为,但是做决策的时候可能不一定会选择该行为,而Sarsa则是去掉   m a x Q \\ maxQ  maxQ​​ ,取而代之的是在S’上面选择实际A’的Q值,最后像Q-learning一样求出现实和估计的差距,并且更新Q表里面的值。

    4. 总结

    Q-learning算法和Sarsa算法都是从状态s开始,根据当前的Q-table使用一定的策略( ε − g r e e d y \\varepsilon-greedy εgreedy​)选择一个动作a’,然后观测到下一个状态s’,并再次根据Q-table选择动作a’。只不过两者选取a’的方法不同。根据算法描述,在选择新状态S‘的动作a’时,Q-learning使用贪心策略( g r e e d y greedy greedy​),即选取值最大的a’,此时只是计算出哪个a‘可以使Q(s,a)取到最大值,并没有真正采用这个动作a‘;而Sarsa则是仍使用 ε − g r e e d y \\varepsilon-greedy εgreedy​ 策略,并真正采用了这个动作a‘ 。即:

    由于更新方法的不同导致Q-learning是一个贪婪、勇敢的算法,他对于陷阱不在乎,而Sarsa则是一个保守的算法,对于错误,死亡都十分敏感。不同的场景中应用不同的算法,有着不同的好处。


    PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起讨论吧!

    以上是关于离线强化学习的乐观观点的主要内容,如果未能解决你的问题,请参考以下文章

    用于解决应用强化学习挑战的模拟套件

    牛津大学发布综述《强化学习金融应用进展》

    华人博士用强化学习回收了SpaceX火箭 | 开源

    6DRN-----深度强化学习在新闻推荐上的应用

    华为云技术分享华为开发者大会HDC.Cloud带你探索强化学习三大挑战及落地实践

    强化学习中,Q-Learning与Sarsa的差别有多大?