2022-03-17 16:45阅读: 547评论: 0推荐: 0

深度强化学习与DDPG

深度强化学习与DDPG

1. 基本概念

  • 折扣回报(discounted return),反映了未来奖励的总和。
    • Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+...
    • 相邻两个折扣回报之间的关系:Ut=Rt+γUt+1,可用于时间差分TD算法
      其中γ 是折扣率,Rtt 时刻环境给的奖励。
  • 动作价值函数(Action-value function),等于Ut的期望,可以给动作打分。
    Qπ(st,at)=E[Ut|St=st,At=at]
  • 最优动作价值函数(optimal Action-value function),取所有动作的最优值。
    Q(st,at)=maxπQπ(st,at)
  • 状态价值函数(State-value function),可以告诉当前局势的好坏。
    Vπ(st)=EA[Qπ(st,A)]=aπ(a|s)·Qπ(s,a) -- 离散动作
    Vπ(st)=EA[Qπ(st,A)]=π(a|s)·Qπ(s,a)da-- 连续动作
  • 一般强化学习的任务就是学习策略 π (称策略学习)或者学习价值 Q 函数(称价值学习)。

2. actor-critic method

一种将策略学习(actor)与价值学习(value)结合起来的方法。actor产生决策动作,价值函数再给其评价(critic)。

  • 使用策略网络 π(a|s;θ) 来近似策略 π(a|s)(actor);价值网络近似q(s,a;w)来表示q(s,a)(critic)。
    • Vπ(st)=aπ(a|s)·Qπ(s,a)aπ(a|s;θ)·Qπ(s,a;w)
    • 训练策略网络,让其得分(价值网络给出)越来越高。
    • 训练价值网络,让其打分越来越精准。
  • 训练两个网络的目的是使 Vπ(st;θ,w)=aπ(a|s;θ)·Qπ(s,a;w) 的值增加。
  • 网络的更新:
    • 通过价值网络Q的监督,更新策略网络的值 θ ,使得V的平均值增加。
    • 通过环境给的奖励reward的监督, 更新价值网络Q的参数w,使得其打分更精准。从而更好估计未来奖励总和Ut
  • 具体θw的更新过程
    1. 得到状态st
    2. 根据策略网络π(a|s;θ),得到at
    3. 执行at,得到新状态st+1与奖励rt
    4. 用时间差分TD算法更新价值网络参数w
    5. 用策略梯度算法更新策略网络参数θ
  • 步骤4价值网络w的更新过程:
    1. 计算t时刻得到的未来奖励总和q(st,at;wt),和t+1时刻得到的未来奖励总和q(st+1,at+1;wt)
    2. TD target:yt=rt+γ·q(st+1,at+1;wt)。参见第一部分折扣回报。
    3. Loss:L(w)=12[q(st,at;wt)yt]2yt作为监督值
    4. 随机梯度下降:wt+1=wtαL(w)w|w=wt
  • 步骤5策略网络θ的更新过程:
    1. 观察状态st

    2. 根据策略网络得到动作at

    3. 计算q(at;θ)q(st,at;w) 用于监督(评价动作)。

    4. 对策略网络求导dθ,t=logπ(at|st;θ)θ|θ=θt (tensorflow、 pytorch等可以自动求导)

    5. 近似计算计算策略梯度g(at,θt)=qt·dθ,t

      策略梯度的非严谨推导

      form1:Vπ(st;θ,w)θ=aπ(a|s;θ)·Qπ(s,a;w)θaπ(a|s;θ)θ·Qπ(s,a;w) -- 用于离散动作,其中假设Qπ(s,a;w)不依赖 θ
      form2:Vπ(st;θ,w)θaπ(a|s;θ)θ·Qπ(s,a;w)=aπ(a|s;θ)·logπ(a|s;θ)θ·Qπ(s,a;w)=EA[logπ(A|s;θ)θ·Qπ(s,A;w)] -- 用于连续动作
      对于连续动作,因为神经网络定积分无法积分,可用蒙特卡洛近似(用随机样本来近似总体的期望)。Vπ(st;θ,w)θ=EA[logπ(A|s;θ)θ·Qπ(s,A;w)]=EA[g(A,θ)]=logπ(a^|s;θ)θ·Qπ(s,a^;w),用随机抽样,g(a^,θ)近似该策略梯度。

    6. 随机梯度上升:θt+1=θt+β·Vπ(st;θ,w)θθt+β·g(at,θt)

3. DDPG 确定性策略梯度

  • DDPG算法为代码如下图,伪代码图也如下所示
    DDPG伪代码
    DDPG示意图
    左侧这套模型是在训练中“干活”(输出动作)的 Main Network(主网络)。右侧这套模型是 Target Network,即目标网络。可以看出DDPG可以是两个A-C模型组成的。下面具体解释流程,按照算法可以分三层。
  • 第一层:
    • 初始化主网络的critic价值网络Q(s,a|θQ)与actor策略网络μ(s|θμ),并复制一个一模一样的目标网络。然后,初始化一个Replay Buffer,用于经验回放。
    • 开启一个M次的循环,每次循环都让机器人运行,直到通关或者结束。
  • 第二层:对于每次episode,一个机器人启动后要做如下事情
    • 取得初始状态s1
    • 开启一个T次的循环,每次迭代都是一个机器人的 Step。这个循环就是第三层。
  • 第三层:
    • 首先利用主网络actor μ(s|θμ) 输出一个动作,并加上一个噪声Nt,以便扩大取值范围,让at输出试探更加丰富。
    • 然后存储 (st,at,rt,st+1) 到Replay Buffer中,用于价值函数的经验回放。之后主网络 μ 不会做任何事了。
    • 从Replay Buffer随机取 N 条经验。让目标网络μ 的假装看到了状态 si+1,并做出一个动作;Q 再对其动作评估,算出TD target yi。以此作为主网络的监督值,得到损失函数 L 并由此更新critic。
    • 用策略梯度ΔθμJ,更新主网络actor。是ΔθμJ=J(θμ)θμ的一个链式求导。J(θμ)也就是Q得到的折扣回报(评价动作的得分)。
    • 最后用主网络更新后的值,软更新目标网络的参数。

参考书目:《白话强化学习与PyTorch》--高杨、《深度强化学习》--王树森
参考视频:
https://www.bilibili.com/video/BV1BE411W7TA
https://www.youtube.com/channel/UC9qKcEgXHPFP2-ywYoA-E0Q

本文作者:Oniisan_Rui

本文链接:https://www.cnblogs.com/oniisan/p/DDPG.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Oniisan_Rui  阅读(547)  评论(0编辑  收藏  举报
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
点击右上角即可分享
微信分享提示