个人理解:
- 离散:可数(整数表示的)
- 连续:不可数(小数/浮点数表示的)
这里一共有四个网络,Q网络以及它的target_Q网络,策略网络以及它的target_P网络,两个target是为了稳定计算,每隔一段时间复制一下参数,投入到评估网络使用。
- target_Q是为了稳定计算
Q_target
中的 Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}(s^{'},a^{'}) Qwˉ(s′,a′),而其中的 a ′ = μ θ ( s ′ ) a^{'}=\mu_{\theta}(s^{'}) a′=μθ(s′)则是由策略网络里的那个target_P网络来稳定计算的。 - Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}(s^{'},a^{'}) Qwˉ(s′,a′) 这里的w加了一个横线就是为了和前面的那个区分开。
- 策略网络对应的是
model.py
中的演员Actor
类(ActorModel
),有一个policy
函数, - Q网络对应的是评论家类(
CriticModel
类),有一个value
函数
DQN里是硬更新,每次直接把
Q
w
Q_w
Qw网络的所有参数全部给
Q
w
ˉ
Q_{\bar{w}}
Qwˉ,
μ
θ
\mu_{\theta}
μθ同理。
而DDPG采取的是一种更为平滑的方式,软更新,每次只更新一点点。如公式所示,用了一个
τ
\tau
τ,来控制每次
w
w
w或者
θ
\theta
θ更新的幅度。
也是为了让Q网络这个参数的更新更加稳定(属于工程/代码上的一种小trick吧)
https://github.com/PaddlePaddle/RLSchool也是百度做的一个环境,目前暂时只有电梯环境和四轴飞行器这两个环境。