参考资料
- 莫烦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值从而计算出机器人行动的最佳路径。
- 更新策略:
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) ) Q(s,a)←Q(s,a)+α(r+γmaxa′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
ai加上状态的观测值
s
i
s_i
si加以分析, 而状态估计网络(target Q)则是拿着actor执行动作
a
a
a之后,到达的下一状态
s
i
+
1
s_{i+1}
si+1,与动作
a
i
+
1
(
a_{i+1}(
ai+1(
a
i
+
1
=
μ
(
s
i
+
1
)
a_{i+1}=\mu(s_{i+1})
ai+1=μ(si+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]
L(θQ)=Est∼ρβ,at∼β,rt∼E[(Q(st,at∣θQ)−yt)2](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)
yt=r(st,at)+γQ(st+1,μ(st+1)∣θQ)(3)
通过最小化 L ( θ Q ) L(\theta^Q) L(θQ)对critic网络进行更新。
这是什么意思呢?
-
Q ( s t , a t ) Q(s_t,a_t) Q(st,at)代表在 s t s_t st状态下执行动作 a t a_t at得到的最大未来回报。但目前最大未来回报尚不准确,需要对其进行更新。
-
r ( s t , a t ) r(s_t,a_t) r(st,at)是在 s t s_t st状态下执行动作 a t a_t at得到的环境所给的现实奖励。
-
Q ( s t + 1 , μ ( s t + 1 ) ∣ θ Q ) Q(s_{t+1},\mu(s_{t+1})\mid \theta^Q) Q(st+1,μ(st+1)∣θQ)代表在 s t s_t st状态下执行动作 a t a_t at到达下一状态 s t + 1 s_{t+1} st+1后,继续按照策略 μ \mu μ,执行下一动作 μ ( s t + 1 ) \mu(s_{t+1}) μ(st+1),得到的下一个状态 s t + 1 s_{t+1} st+1的最大未来回报
-
y t y_t yt可以看做"标签",表示在 s t s_t st状态下执行动作 a t a_t at后,得到的正确的最大未来回报。仔细想想这是正确的,在 s t s_t st状态下执行动作 a t a_t at后的最大未来回报是即时奖励回报 r ( s t , a t ) r(s_t,a_t) r(st,at)加上下一种状态的最大未来回报 Q ( s t + 1 , μ ( s t + 1 ) ∣ θ Q ) Q(s_{t+1},\mu(s_{t+1})\mid \theta^Q) Q(st+1,μ(st+1)∣θQ)。
怎么更新呢?
- 我们的目的是要使最大未来回报 Q ( s , a ) Q(s,a) Q(s,a)是正确的
- 既然已经知道在 s t s_t st状态下执行动作 a t a_t at后尚不正确的最大未来回报 Q ( s , a ) Q(s,a) Q(s,a),和正确的最大未来回报 y t y_t yt,那更新当然是要让 Q ( s , a ) Q(s,a) Q(s,a)接近于 y t y_t yt。
- 通过将loss函数 L ( θ Q ) L(\theta^Q) L(θQ)定义为 Q ( s , a ) Q(s,a) Q(s,a)与 y t y_t yt的均方误差,然后最小化 L ( θ Q ) L(\theta^Q) L(θQ),就能使 Q ( s , a ) Q(s,a) Q(s,a)朝着接近于 y t y_t yt的方向更新,以获得正确的最大未来回报。
actor网络的更新
策略梯度的想法就是沿着使未来回报 Q ( s , a ) 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}]
∇θμJ≈Est∼ρβ[∇θμQ(s,a∣θQ)∣s=st,a=μ(st∣θμ)]=Est∼ρβ[∇aQ(s,a∣θQ)∣s=st,a=μ(st)∇θμμ(s∣θμ)∣s=st](1)
- 关于 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)} ∇aQ(s,a∣θQ)∣s=st,a=μ(st)是从 Critic 来的, 这是在说: actor要做出哪一个动作, 才能获得更大的Q值—也就是更大的未来回报。
- 而后半部分 ∇ θ μ μ ( s ∣ θ μ ) ∣ s = s t \nabla_{\theta^\mu}\mu(s\mid \theta^\mu)\mid_{s=s_t} ∇θμμ(s∣θμ)∣s=st是从 Actor 来的, 这是在说: Actor 要怎么样修改自身参数, 使得 Actor 更有可能做这个动作。
- 所以两者合起来就是在说: Actor 要朝着更有可能获取大Q值—更大未来回报的方向修改动作参数。