学习DDPG算法总结


参考资料


1. 强化学习算法_个人理解

1. Q-learning

  • Q-learning是通过不停地探索和更新Q表中的Q值从而计算出机器人行动的最佳路径。
  • 更新策略:
    Q ( s , a ) Q ( s , a ) + α ( r + γ m a x a Q ( s , a ) Q ( s , a ) ) Q(s,a)\gets Q(s,a)+\alpha (r+\gamma max_{a'}Q(s',a')-Q(s,a) )

2. DQN

  • DQN是将 Q-learning 的优势 与Neural network相 结合。Q-learning对于每一个 (state, action) 的值都需要存放在一张 q_table 的表中. 如果对于高维环境空间state非常多的情况下,无论是存储和检索q_table表都非常困难。这就是 DQN 产生的原因了. 我们可以使用神经网络来估算这个 (state,action) 的值,这样就不需要一张表了。DQN输入state,神经网络输出所有 action 的值, 并选择值最大的 action值。
  • 虽然DQN解决了高维环境空间的问题,但它只能处理离散和低维动作空间。但是DQN不能应用于连续的动作域,因为它依赖于找到最大化action-value的动作,而在连续值情况下,每一步都需要迭代优化过程。

3. Policy Gradient(PG)

  • Policy gradient 不像 Value-based 方法 (Q learning, DQN), 但他也要接受环境信息 (observation), 不同的是他要输出不是 action 的 value, 而是具体的那一个 action, 这样 policy gradient 就跳过了 value 这个阶段。
  • 而且Policy gradient 最大的一个优势是: 输出的这个 action 可以是一个连续的值,,value-based 方法输出的都是不连续的值, 然后再选择值最大的 action. 而 policy gradient 可以在一个连续分布上选取 action。

4. Actor-Critic

  • Actor-Critic 都能用不同的神经网络来代替, Actor 的前生是 Policy Gradient,能在连续的动作空间中输出动作, Critic 的前生是 Q-learning 或者其他的以值为基础的学习法 , 能进行单步更新, 而传统的 Policy Gradients 则是回合更新。
  • Critic 通过学习环境和奖励之间的关系, 能看到现在所处状态的潜在奖励, 所以用它来指点 Actor 便能使 Actor 每一步都在更新

5. Deep Deterministic Policy Gradient(DDPG)

  • DDPG是一种基于确定性策略梯度的actor-critic,model-free算法,可以在连续的动作空间中运行。可以把DDPG理解为actor-critic与DQN的结合。

2. DDPG原理

DDPG 全称是:Deep Deterministic Policy Gradient

  • DDPG 中所用到的神经网络.和之前提到的 Actor-Critic 相似,也需要有基于策略 Policy 的神经网络和基于价值 Value 的神经网络, 但是为了体现 DQN 的思想, 每种神经网络都需要再细分为两个。
  • actor这边, 有online policy网络和target policy网络,online policy网络用来输出实时的动作,供 actor 在现实中实行,而target policy网络则是用来更新价值网络系统的。
  • 而critic这边, 也有现实网络(online Q)和估计网络(target Q)。他们的输入端有所不同,状态现实网络(online Q)会拿着从动作现实网络来的动作 a i a_i 加上状态的观测值 s i s_i 加以分析, 而状态估计网络(target Q)则是拿着actor执行动作 a a 之后,到达的下一状态 s i + 1 s_{i+1} ,与动作 a i + 1 ( a_{i+1}( a i + 1 = μ ( s i + 1 ) a_{i+1}=\mu(s_{i+1}) ),当做输入。
    在这里插入图片描述

DDPG实现框架和算法


在这里插入图片描述


DDPG更新actor-critic的理解


Actor-Critic算法把策略函数和价值函数分别用单独的网络来近似, 策略函数作为Actor来做动作选择,价值函数作为Critic来对策略函数进行评估,根据Critic的输出来更新价值网络和策略网。


critic网络的更新


更新critic网络的损失函数定义为:
(2) L ( θ Q ) = E s t ρ β , a t β , r t E [ ( Q ( s t , a t θ Q ) y t ) 2 ] \tag{2}L(\theta^Q)=E_{s_t\thicksim \rho^\beta,a_t\thicksim\beta,r_t\thicksim E}[(Q(s_t,a_t\mid\theta^Q)-y_t)^2]

where
(3) y t = r ( s t , a t ) + γ Q ( s t + 1 , μ ( s t + 1 ) θ Q ) \tag{3}y_t=r(s_t,a_t)+\gamma Q(s_{t+1},\mu(s_{t+1})\mid \theta^Q)

通过最小化 L ( θ Q ) L(\theta^Q) 对critic网络进行更新。


这是什么意思呢?

  • Q ( s t , a t ) Q(s_t,a_t) 代表在 s t s_t 状态下执行动作 a t a_t 得到的最大未来回报。但目前最大未来回报尚不准确,需要对其进行更新。

  • r ( s t , a t ) r(s_t,a_t) 是在 s t s_t 状态下执行动作 a t a_t 得到的环境所给的现实奖励。

  • Q ( s t + 1 , μ ( s t + 1 ) θ Q ) Q(s_{t+1},\mu(s_{t+1})\mid \theta^Q) 代表在 s t s_t 状态下执行动作 a t a_t 到达下一状态 s t + 1 s_{t+1} 后,继续按照策略 μ \mu ,执行下一动作 μ ( s t + 1 ) \mu(s_{t+1}) ,得到的下一个状态 s t + 1 s_{t+1} 的最大未来回报

  • y t y_t 可以看做"标签",表示在 s t s_t 状态下执行动作 a t a_t 后,得到的正确的最大未来回报。仔细想想这是正确的,在 s t s_t 状态下执行动作 a t a_t 后的最大未来回报是即时奖励回报 r ( s t , a t ) r(s_t,a_t) 加上下一种状态的最大未来回报 Q ( s t + 1 , μ ( s t + 1 ) θ Q ) Q(s_{t+1},\mu(s_{t+1})\mid \theta^Q)

怎么更新呢?

  • 我们的目的是要使最大未来回报 Q ( s , a ) Q(s,a) 是正确的
  • 既然已经知道在 s t s_t 状态下执行动作 a t a_t 后尚不正确的最大未来回报 Q ( s , a ) Q(s,a) ,和正确的最大未来回报 y t y_t ,那更新当然是要让 Q ( s , a ) Q(s,a) 接近于 y t y_t
  • 通过将loss函数 L ( θ Q ) L(\theta^Q) 定义为 Q ( s , a ) Q(s,a) y t y_t 的均方误差,然后最小化 L ( θ Q ) L(\theta^Q) ,就能使 Q ( s , a ) Q(s,a) 朝着接近于 y t y_t 的方向更新,以获得正确的最大未来回报。

actor网络的更新

策略梯度的想法就是沿着使未来回报 Q ( s , a ) Q(s,a) 变大的方向调整策略的参数。


policy gradient算法如下:
(1) θ μ J E s t ρ β [ θ μ Q ( s , a θ Q ) s = s t , a = μ ( s t θ μ ) ] = E s t ρ β [ a Q ( s , a θ Q ) s = s t , a = μ ( s t ) θ μ μ ( s θ μ ) s = s t ] \tag{1}\nabla_{\theta ^\mu}J \approx E_{s_t\thicksim \rho^\beta} [\nabla_{\theta ^\mu}Q(s,a\mid \theta^Q)\mid_{s=s_t,a=\mu(s_t\mid \theta^\mu)}] =E_{s_t\thicksim \rho^\beta} [\nabla_{a}Q(s,a\mid \theta^Q)\mid_{s=s_t,a=\mu(s_t)}\nabla_{\theta^\mu}\mu(s\mid \theta^\mu)\mid_{s=s_t}]


  • 关于 Actor 部分, 他的参数更新会涉及到 Critic
  • 前半部分 a Q ( s , a θ Q ) s = s t , a = μ ( s t ) \nabla_{a}Q(s,a\mid \theta^Q)\mid_{s=s_t,a=\mu(s_t)} 是从 Critic 来的, 这是在说: actor要做出哪一个动作, 才能获得更大的Q值—也就是更大的未来回报。
  • 而后半部分 θ μ μ ( s θ μ ) s = s t \nabla_{\theta^\mu}\mu(s\mid \theta^\mu)\mid_{s=s_t} 是从 Actor 来的, 这是在说: Actor 要怎么样修改自身参数, 使得 Actor 更有可能做这个动作。
  • 所以两者合起来就是在说: Actor 要朝着更有可能获取大Q值—更大未来回报的方向修改动作参数。

在这里插入图片描述

发布了43 篇原创文章 · 获赞 19 · 访问量 8526

猜你喜欢

转载自blog.csdn.net/weixin_43590290/article/details/100140027