参考资料
- 莫烦python强化学习
- Continuous control with deep reinforcement learning_(DDPG论文)_英文原版
- Continuous control with deep reinforcement learning_(DDPG论文)_中文本人翻译版
- (csdn案例_1)Deep Reinforcement Learning - 1. DDPG原理和算法
- (csdn案例_2)Deep Reinforcement learning - 2. 基于tensorflow的DDPG实现
1. 强化学习算法_个人理解
1. Q-learning
- Q-learning是通过不停地探索和更新Q表中的Q值从而计算出机器人行动的最佳路径。
- 更新策略:
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)会拿着从动作现实网络来的动作
加上状态的观测值
加以分析, 而状态估计网络(target Q)则是拿着actor执行动作
之后,到达的下一状态
,与动作
),当做输入。
DDPG实现框架和算法
DDPG更新actor-critic的理解
Actor-Critic算法把策略函数和价值函数分别用单独的网络来近似, 策略函数作为Actor来做动作选择,价值函数作为Critic来对策略函数进行评估,根据Critic的输出来更新价值网络和策略网。
critic网络的更新
更新critic网络的损失函数定义为:
where
通过最小化 对critic网络进行更新。
这是什么意思呢?
-
代表在 状态下执行动作 得到的最大未来回报。但目前最大未来回报尚不准确,需要对其进行更新。
-
是在 状态下执行动作 得到的环境所给的现实奖励。
-
代表在 状态下执行动作 到达下一状态 后,继续按照策略 ,执行下一动作 ,得到的下一个状态 的最大未来回报
-
可以看做"标签",表示在 状态下执行动作 后,得到的正确的最大未来回报。仔细想想这是正确的,在 状态下执行动作 后的最大未来回报是即时奖励回报 加上下一种状态的最大未来回报 。
怎么更新呢?
- 我们的目的是要使最大未来回报 是正确的
- 既然已经知道在 状态下执行动作 后尚不正确的最大未来回报 ,和正确的最大未来回报 ,那更新当然是要让 接近于 。
- 通过将loss函数 定义为 与 的均方误差,然后最小化 ,就能使 朝着接近于 的方向更新,以获得正确的最大未来回报。
actor网络的更新
策略梯度的想法就是沿着使未来回报 变大的方向调整策略的参数。
policy gradient算法如下:
- 关于 Actor 部分, 他的参数更新会涉及到 Critic
- 前半部分 是从 Critic 来的, 这是在说: actor要做出哪一个动作, 才能获得更大的Q值—也就是更大的未来回报。
- 而后半部分 是从 Actor 来的, 这是在说: Actor 要怎么样修改自身参数, 使得 Actor 更有可能做这个动作。
- 所以两者合起来就是在说: Actor 要朝着更有可能获取大Q值—更大未来回报的方向修改动作参数。