深度强化学习(DRL)算法 3 —— Deep Q-learning(DQN)

41 阅读1分钟

回顾

之前的文章 深度强化学习(DRL)算法 附录 3 —— 蒙特卡洛方法(MC)和时序差分(TD) - 掘金 (juejin.cn) 介绍了 Q-learning,这篇文章我们介绍把 deep learing 引入 Q-learning 的 DQN 算法。

算法描述

Q-learning(离轨)

  • 策略改进(把策略改进提前实现起来更简单,也可以像 MC 那样使用任意 ε\varepsilon-策略采样) 贪心策略 (目标策略)
  • 策略评估 πε\pi \leftarrow \varepsilon- greedy(Q) (行动策略)

q(st+1,at+1)q(st,at)+α(r+γmaxaq(st+1,a)tdtargetq(st,at))tderrorq(s_{t+1},a_{t+1}) \leftarrow q(s_{t},a_{t}) + \alpha \underbrace{\underbrace{(r + \gamma max_{a}q(s_{t+1},a)}_{td-target} - q(s_{t},a_{t}))}_{td-error} (小写表示一次采样) 为什么这里没有用重要性采样,因为目标策略的序列和行动策略没关系,不像 MC off-policy 需要用行动策略的采样来评估目标策略的采样。(理解这点很重要)

经验回放

因为 Q-learning 是天然 off-policy 的,所以不用像 深度强化学习(DRL)算法 2 —— PPO 之 GAE 篇 - 掘金 (juejin.cn) 那样进行重要性采样。所以可以直接采样一系列的 (s,a,r',s'),用于神经网络的训练,这就是所谓的经验回放。

目标固定

DQN 使用神经网络(NN)来拟合 Q,所以 NN(s, w) -> Q(s,a),w 是要训练的参数,带入上面的策略评估有:

q(st+1,at+1)q(st,at)+α(r+γmaxaNN(st+1,w)tdtargetNN(st,at))tderrorq(s_{t+1},a_{t+1}) \leftarrow q(s_{t},a_{t}) + \alpha \underbrace{\underbrace{(r + \gamma max_{a}NN(s_{t+1}, w)}_{td-target} - NN(s_{t},a_{t}))}_{td-error}

但是上面的式子没办法直接使用到神经网络里,所以 DQN 不是像传统的 TD 那样直接进行策略评估,而是构造了一个新的 Loss 函数。

loss=(r+γmaxaNN(st+1,w)NN(st,w))2loss = (r + \gamma max_{a}NN(s_{t+1},w) - NN(s_{t}, w))^{2}

直觉上看起来没什么问题,计算 td-target 之后(隐含了一次策略评估)所以 q 变得更准确了,然后计算梯度,使得 td-error 越来越小就好了。 但是注意到两个 NN 是一个东西,这不就相当于让“大力士拽着头发把自己提起来“,根本达不到让 td-error 越来越小的目的。 所以我们需要固定一个 NN 的参数,训练一段时间,再把那个得到训练的 NN 的参数 copy 到那个固定参数的 NN。我们固定哪一个 NN 呢,因为 td-target 是更好的那个,所以固定 NNtargetNN_{target} ,让 NN 逼近 td-target ,就可以达到减小 td-error 的目的,是不是有监督学习的味道了。所以最终的 Loss 函数是:

loss=(r+γmaxaNNtarget(st+1,w)NN(st,w))2loss = (r + \gamma max_{a}NN_{target}(s_{t+1},w) - NN(s_{t}, w'))^{2}

可以看出目标固定里实际上进行了一次策略改进,使得 NN 优化的方向是正确的。 这就是最原始的 DQN。

缺点

原始论文里 NN(s, w) -> Q(s,a) 只能映射到离散的动作空间(类似有监督的分类学习)。

改进

DDPG 算法解决了 DQN 不能处理连续动作空间的问题。 我们下篇文章会接着介绍 DDPG。