【Hierarchical RL】不允许你不了解分层强化学习(总结篇)

举报
不去幼儿园 发表于 2024/12/05 20:46:50 2024/12/05
【摘要】 分层强化学习从月初更新到了月中,也准备告一段落了,后续深入研究强化学习,分层的理念多多少少都会涉及。面对复杂场景下的智能体决策问题,如何将复杂问题简单化总是不可避免的。如果后续还有值得分享算法,也会再开单文介绍。

         📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】(34)---《分层强化学习(Hierarchical RL)总结篇》

分层强化学习(Hierarchical RL)总结篇

目录


1.总结陈词

2.分层强化学习介绍 

3.分层强化学习系列算法

1. Option-Critic 架构

2.MAXQ 分解

3. FeUdal Networks (FuN)

4. Hierarchical-DQN (HDQN)

5. Hierarchical Actor-Critic (HAC)

6. Options Framework (选项框架)

7. HIRO (Hierarchical Reinforcement Learning with Off-Policy Correction)

8. Hierarchical Reinforcement Learning with Latent Space (HRL-LS)

9. Semi-Markov Decision Processes (SMDP)

10. Dynamic Hierarchical Reinforcement Learning (DHRL)

[Python] Q-learning实现

[Notice]  伪代码要点:

4.总结


1.总结陈词

        分层强化学习月初更新到了月末,也准备告一段落了,后续深入研究强化学习,分层的理念多多少少都会涉及。面对复杂场景下的智能体决策问题,如何将复杂问题分层化?将任务分解,再进行策略优化,这是一个十分重要的思想。如果后续还有值得分享算法,也会再开单文介绍。

        什么是分层强化学习呢?

        下面这张图片展示了两层结构,上层为管理者(高层策略),下层为工人(低层策略)。管理者选择子目标,表现为分支路径,工人执行动作以实现子目标,动作通过箭头指向远处的最终目标。环境表现为网格世界,管理者从上方监控进度。

        这张图片说明了层次强化学习(HRL)的概念。直观地表示了高级管理者如何选择子目标,而低级工作者如何执行操作来实现这些子目标,以及通向最终目标的路径。希望这能帮助理解层次结构!  

编辑


2.分层强化学习介绍 

        分层强化学习(Hierarchical Reinforcement Learning, HRL) 是一种强化学习方法,它将复杂任务分解为更易处理的子任务,通过层次结构来简化学习过程。HRL 的主要目标是应对长时间跨度和稀疏奖励的问题,并通过多层次的决策方式来提高学习效率。各个分层算法通过不同的方法进行任务分解、策略优化和样本高效利用,使得 HRL 适用于复杂、高维度和连续空间的任务。

HRL 的核心思想

在 HRL 中,任务通常分解为多个层次,每个层次专注于特定的子任务或策略:

  • 高层策略:负责全局规划和决策,通常设定子目标或子任务。
  • 低层策略:执行具体动作,直接与环境交互,以实现高层设定的目标。

这种分层结构使得复杂任务能够在不同时间尺度上进行优化,使得算法能够更高效地学习和适应变化的环境。

HRL 的主要优势

  1. 应对长时间跨度任务:通过在高层设定长期目标,低层完成短期任务,HRL 能够有效处理需要长期规划的任务。
  2. 样本高效性:许多 HRL 算法能够复用子任务的学习经验,减少样本复杂度,提高学习效率。
  3. 任务复用与分解:HRL 将复杂任务分解为更小的子任务,每个子任务的学习成果可以复用,从而大大简化了整体任务的学习过程。
  4. 灵活性与自适应性:分层结构允许不同层次在不同时间尺度上独立优化,能够更好地应对环境中的变化与不确定性。

HRL 的挑战

  1. 任务分解的设计:任务分解和子任务定义对于 HRL 至关重要。合理的层次结构可以显著提升学习效率,而不合理的分解则可能带来低效或无效的学习过程。
  2. 层次间协调:高层和低层策略之间的目标一致性和协调性是一个关键问题。如何有效传递和执行高层目标,以确保低层能够高效执行目标,是实现分层学习的难点。
  3. 自动化层次生成:在一些复杂任务中,如何自动生成合理的层次结构和子任务仍然是一个具有挑战性的问题。

关于更加详细介绍请看:

【RL Latest Tech】分层强化学习(Hierarchical RL)


3.分层强化学习系列算法

1. Option-Critic 架构

【RL Latest Tech】分层强化学习:Option-Critic架构算法

核心思想:扩展选项框架,通过学习选项的策略和终止条件来自动优化选项。选项策略和终止条件可以端到端地训练,使得代理能够自适应地选择和终止选项。

优点:不需要预先定义选项的策略和终止条件,自动化选项生成过程,减少了手工设计的工作量。

应用场景:适用于需要灵活选择和终止子任务的情景,例如复杂导航和机器人控制。

关键挑战:有效地学习选项终止条件,避免产生过早或过迟的终止行为。


2.MAXQ 分解

【RL Latest Tech】分层强化学习:MAXQ分解算法

核心思想:通过任务分解将复杂任务拆分为多个子任务,并为每个子任务分别学习值函数。高层任务的值函数由低层子任务的值函数组成,实现任务的递归分解。

优点:能够利用层次结构减少学习的复杂度,子任务可以复用,适合解决多步骤任务。

应用场景:适用于需要将复杂任务分解为子任务的场景,如机器人路径规划、复杂控制任务。

关键挑战:如何合理地设计子任务的层次结构,确保任务分解能够带来有效的加速和学习收益。


3. FeUdal Networks (FuN)

【RL Latest Tech】分层强化学习:FeUdal Networks算法

核心思想:使用分层结构中的管理者(Manager)和工人(Worker)策略进行学习。高层管理者设定目标(在隐空间内),低层工人根据高层目标选择具体动作,并直接与环境交互。

优点:将长时间跨度的任务分解为子目标,适用于高维度、稀疏奖励的环境。

应用场景:适用于复杂任务分解,如长期目标的游戏任务或复杂的机器人操作。

关键挑战:如何在隐空间中合理设定目标,使得低层能够高效执行并实现高层目标。

        本来想着介绍三个经典算法就OK,经过一段思考以后,还是决定开个专栏,系统的介绍分层强化学习的相关算法,所有可以发现这三篇的标题是【RL Latest Tech】开头,而之后的文章是【Hierarchical RL】。总的来说也是废了不少的功夫,希望对大家有所帮助。


4. Hierarchical-DQN (HDQN)

【Hierarchical RL】分层深度Q网络(Hierarchical-DQN)算法

核心思想:将任务分解为高层和低层两个DQN(深度Q网络)。高层决定子任务,低层完成具体操作。高层DQN负责设定子目标,低层DQN根据子目标执行策略。

优点:通过高层决策减少低层的动作空间,使得学习过程更加高效。

应用场景:例如在复杂导航任务中,高层设定区域目标,低层负责在局部区域内执行导航。

关键挑战:目标设定需要谨慎设计,否则可能导致子任务不明确。


5. Hierarchical Actor-Critic (HAC)

【Hierarchical RL】分层演员-评论家(Hierarchical Actor-Critic )算法

核心思想:结合分层结构和 Actor-Critic 算法。高层 Actor-Critic 决策子目标,低层 Actor-Critic 根据这些子目标完成具体的行动。高层和低层都分别使用 Actor-Critic 方法来学习。

优点:能够处理连续动作空间,适合在高维环境中使用,并且可以共享一部分状态表示。

应用场景:例如机器人控制任务,高层控制移动策略,低层控制具体的运动细节。

关键挑战:高层目标的设定以及子任务的准确分解在复杂任务中可能需要精细设计。


6. Options Framework (选项框架)

【Hierarchical RL】Options Framework(选项框架)

核心思想:基于 Sutton 等人提出的选项框架(Options Framework),其中选项是从一个子任务执行到完成的高层决策链。高层决策什么时候调用特定选项,低层负责具体执行选项的策略。

优点:结构清晰,能够直观地分离高层和低层任务。选项可以像动作一样灵活调度,并且可以重复使用相同的选项来处理不同的子任务。

应用场景:在复杂任务中可以预定义一些选项(子策略),比如在导航任务中可以定义“前进”、“转弯”等选项。

关键挑战:选项的定义和边界的选择可能需要人工设计或通过学习确定。


7. HIRO (Hierarchical Reinforcement Learning with Off-Policy Correction)

【Hierarchical RL】离线策略修正分层强化学习(HIRO)算法

核心思想:HIRO 是一种用于处理连续动作空间的分层强化学习方法。高层和低层策略同时学习,其中高层的目标是设定子目标,低层则根据子目标进行具体操作。HIRO 引入了 off-policy correction 技术来防止策略偏差。

优点:通过引入校正机制,能够有效处理连续动作空间,并解决高层子目标与低层执行不匹配的问题。

应用场景:例如在复杂的连续控制任务(如机械臂操作或机器人导航)中,HIRO 能够有效地优化学习过程。

关键挑战:校正机制的引入增加了算法的复杂性,训练过程中可能需要更多的时间和计算资源。


8. Hierarchical Reinforcement Learning with Latent Space (HRL-LS)

【Hierarchical RL】隐空间分层强化学习(HRL-LS )算法

核心思想:通过学习一个隐空间(Latent Space)来作为子任务的表示。高层策略在隐空间中设定子目标,低层策略根据隐空间中的子目标执行具体动作。这种方法通常结合了 变分自编码器(VAE) 等技术来学习隐空间。

优点:隐空间可以有效地压缩高维状态空间,降低任务的复杂性。

应用场景:适用于视觉输入或者高维输入场景,能够通过学习隐空间来提取关键特征。

关键挑战:隐空间的学习质量直接影响到整体任务的分解和子任务的执行效果。


9. Semi-Markov Decision Processes (SMDP)

【Hierarchical RL】半马尔可夫决策过程 (SMDP) -->分层强化学习

核心思想:SMDP 是对传统马尔可夫决策过程的扩展,允许动作(或子任务)的执行时间不固定。这种框架常常用于分层强化学习中的高层任务管理,帮助在不同时间尺度上进行决策。

优点:能够处理动作执行时间不固定的情况,适用于长时间跨度任务。

应用场景:例如在机器人调度任务中,高层可以处理长期策略,低层可以处理瞬时动作。

关键挑战:在高层管理不同时间尺度的子任务时,如何有效评估和更新策略是一个难点。


10. Dynamic Hierarchical Reinforcement Learning (DHRL)

【Hierarchical RL】动态分层强化学习(DHRL)算法

核心思想:通过动态调整高层和低层任务的分配方式,DHRL 能够根据不同环境的需求,自适应地选择分层结构。动态的任务分配能够更灵活地处理复杂的强化学习任务。

优点:具有较强的适应性,能够在任务复杂度变化时动态调整策略。

应用场景:复杂的多阶段任务,如自动驾驶中的路径规划和局部避障。

关键挑战:动态调整任务的分配策略可能引入不确定性,训练过程的稳定性需要重点关注。


[Python] 分层强化学习伪代码

        为了便于理解,以下是分层强化学习的伪代码,结构包括高层策略(Manager)和低层策略(Worker)。高层策略负责生成子目标,低层策略根据这些子目标采取具体的动作。

主要思想:

  • 高层策略:生成子目标,每隔若干步更新一次。
  • 低层策略:根据子目标在环境中采取动作。
  • 奖励机制:高层根据子目标的达成情况获得奖励,低层根据每步的反馈进行调整。
"""《分层强化学习python伪代码》
    时间:2024.10
    作者:不去幼儿园
"""
# 初始化高层策略 (Manager) 和低层策略 (Worker)
initialize ManagerPolicy
initialize WorkerPolicy

# 参数设置
learning_rate = alpha
discount_factor = gamma
high_level_update_interval = k  # 高层每 k 步更新一次

# 训练过程
for each episode:
    state = environment.reset()  # 重置环境
    done = False
    total_reward = 0
    
    # 初始化子目标 (subgoal) 和步数计数器
    subgoal = ManagerPolicy.select_subgoal(state)
    t = 0  # 计数器

    while not done:
        # 低层策略根据当前状态和子目标选择动作
        action = WorkerPolicy.select_action(state, subgoal)
        
        # 执行动作并获取新状态和奖励
        next_state, reward, done = environment.step(action)
        
        # 累加奖励
        total_reward += reward
        
        # 低层策略更新:根据当前状态、子目标、动作和奖励更新 Worker 策略
        WorkerPolicy.update(state, subgoal, action, reward, next_state)
        
        # 更新状态
        state = next_state
        t += 1
        
        # 每执行 k 步时,高层策略更新一次
        if t % high_level_update_interval == 0 or done:
            # 高层策略根据当前状态选择新的子目标
            subgoal = ManagerPolicy.select_subgoal(state)
            
            # 高层策略更新:根据当前状态和累计奖励更新 Manager 策略
            ManagerPolicy.update(previous_state, subgoal, total_reward, state)
            
            # 重置累积奖励
            total_reward = 0

# 测试阶段
for each test episode:
    state = environment.reset()
    done = False

    while not done:
        # 高层策略选择子目标
        subgoal = ManagerPolicy.select_subgoal(state)
        
        # 低层策略执行动作,直到完成子目标或结束
        for t in range(high_level_update_interval):
            action = WorkerPolicy.select_action(state, subgoal)
            next_state, reward, done = environment.step(action)
            state = next_state

            if done:
                break

[Notice]  伪代码要点:

  1. ManagerPolicy (高层策略):负责选择子目标,通常每隔 k 步更新一次,不直接控制动作。
  2. WorkerPolicy (低层策略):根据当前状态和子目标选择动作。低层策略的目标是完成子目标,而不是直接最大化长期奖励。
  3. 分层更新
    • 低层策略更新:低层策略在每步执行后立即更新,使用短期奖励来优化策略。
    • 高层策略更新:高层策略根据若干步后的累计奖励进行更新,通常每隔 k 步或者完成一个子任务后更新。
  4. 探索与利用:可以为高层和低层策略分别设计探索机制,比如 ε-greedy、随机探索等。

适应性:

        这种分层结构可以扩展到更加复杂的环境中,通过设计不同的子目标来分解任务。每层都可以使用不同的强化学习算法(如 Q-learning、DQN 或 Actor-Critic),使得分层策略在复杂任务中具备更高的学习效率。

        由于博文主要为了介绍相关算法的原理应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳,一是算法不适配上述环境,二是算法未调参和优化,三是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。


4.总结

        分层强化学习在复杂任务和环境中展现出强大的优势。通过不同层次策略的有效协调和任务分解,HRL 算法能够在长时间跨度、稀疏奖励和高维环境中实现高效的学习。随着算法的不断发展,HRL 正在逐渐成为复杂任务解决中的重要工具,为机器人控制、自动驾驶、策略游戏等领域提供了强大的技术支持。


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。