博客
关于我
强化学习(9):TRPO、PPO以及DPPO算法
阅读量:391 次
发布时间:2019-03-05

本文共 1748 字,大约阅读时间需要 5 分钟。

PPO、PPO2和DPPO算法概述

PPO算法

PPO(Proximal Policy Optimization,邻接策略优化)是一种改进的策略优化算法,旨在解决普通策略优化算法(如Policy Gradient,PG)中学习率设置难以确定的问题。PPO通过引入新策略和旧策略的比例(即ρ)来限制新策略更新的幅度,从而使PG算法对较大的学习率更加鲁棒。

PPO算法在原目标函数的基础上增加了KL散度项。KL散度用于衡量两个概率分布之间的差异,通过惩罚项使新策略和旧策略之间的差异不超过某个阈值。PPO的损失函数定义如下:

J(θ′;θ) = J(θ′;θ) − β KL(θ,θ′)

其中,J(θ′;θ)是旧策略θ在新策略θ′下的目标函数值,β是KL散度惩罚系数,KL(θ,θ′)表示新旧策略之间的差异。

PPO的核心思想是通过动态调整β值来平衡探索与利用。具体来说,当KL散度值较大时,β值增大以增加惩罚力度;当KL散度值较小时,β值减小以降低惩罚力度。这种机制使得算法能够在收敛速度和策略稳定性之间找到平衡。

PPO2算法

PPO2(Proximal Policy Optimization 2)是PPO算法的进一步改进版本。PPO2去除了KL散度惩罚项,改用了“Clip”损失函数。Clip函数将目标函数值限制在区间[1−ε,1+ε]之间,防止目标函数值异常波动。PPO2的损失函数定义如下:

J(θ) = Σ min(pθ(a|st) pθ′(a|st) Aθ′(st,at), Clip(pθ(a|st) pθ′(a|st), 1−ε, 1+ε) * Aθ′(st,at))

其中,Clip函数将pθ(a|st) pθ′(a|st)限制在[1−ε,1+ε]范围内,防止目标函数值异常波动。

PPO2通过引入Clip函数,简化了目标函数,避免了KL散度带来的计算复杂性。同时,Clip函数也为算法的收敛性提供了更稳定的保障。

DPPO算法

DPPO(Distributed Proximal Policy Optimization,分发式邻接策略优化)是PPO算法在多线程环境下的分布式实现。DPPO通过多线程并行方式加速训练过程,类似于A3C算法,但与A3C的主要区别在于网络结构和参数更新机制。

在DPPO中,主网络负责参数更新,而多个副网络独立地从不同的环境中收集数据。副网络不需要与主网络保持相同的网络结构,每个副网络只需独立的环境即可运行。主网络更新完成后,会将更新后的参数同步给所有副网络。这种设计减少了参数同步的时空开销,提高了训练效率。

DPPO的实现细节

  • 数据收集与同步

    副网络负责从不同的环境中收集数据,包括状态值s、动作值a和目标Q值。为了确保数据的同步性,所有副网络需要在主网络更新之前完成数据的收集和存储。

  • 主网络更新机制

    主网络在获得足够的数据后,会启动参数更新过程。在更新过程中,所有副网络需要暂停数据收集,确保使用的是最新的参数版本。

  • 事件同步机制

    在多线程环境中,主网络和副网络间的数据同步和参数更新需要精确的时间同步。使用threading.Event对象,可以通过设置内部标识符(如flag.is_set())实现精确的同步。具体来说:

    • 初始时,副网络的标识符为True,主网络的标识符为False
    • 当数据收集完毕,主网络的标识符设为True,副网络标识符设为False
    • 主网络更新完成后,主网络的标识符设为False,副网络标识符设为True
  • 具体实现中的注意事项

    • 数据维度统一:确保所有副网络收集的数据维度一致,避免因维度不匹配导致的错误。
    • 同步机制的有效性:使用事件标识符确保数据收集和参数更新的同步性,避免数据不一致或参数丢失。
    • 网络结构的灵活性:副网络不需要与主网络保持完全一致的网络结构,可以根据具体任务需求进行优化。
  • 总结

    PPO、PPO2和DPPO算法分别针对策略优化中的不同问题提出不同的解决方案。PPO通过动态调整KL散度惩罚系数,平衡了收敛速度和策略稳定性;PPO2通过引入Clip函数简化目标函数,提高了训练的稳定性;而DPPO通过多线程并行实现,显著提升了训练效率。这些算法在机器人控制、游戏AI等领域得到了广泛应用。

    转载地址:http://fobwz.baihongyu.com/

    你可能感兴趣的文章
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad++正则表达式替换字符串详解
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notes on Paul Irish's "Things I learned from the jQuery source" casts
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    NotImplementedError: Could not run torchvision::nms
    查看>>
    nova基于ubs机制扩展scheduler-filter
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    np.power的使用
    查看>>
    NPM 2FA双重认证的设置方法
    查看>>
    npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法
    查看>>
    npm build报错Cannot find module ‘webpack‘解决方法
    查看>>
    npm ERR! ERESOLVE could not resolve报错
    查看>>
    npm ERR! fatal: unable to connect to github.com:
    查看>>
    npm ERR! Unexpected end of JSON input while parsing near '...on":"0.10.3","direc to'
    查看>>
    npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
    查看>>