本文主要是介绍DQN原理和算法伪代码和代码实现,算法实现包括pytorch版本和stable-baselines3版本
1 时间差分(Temporal Difference)
强化学习与监督学习最大的不同是监督学习有监督信号,而强化学习只有奖励信号。
1.1 有监督的训练
举例如下:
| 例 1:监督方式训练 |
|---|
| 假设我是个用户,我要从北京驾车去上海。从北京出发之前,我有个不太好的模型做预测,模型告诉我总车程是14小时 |

显然这个例子中,这个 y = 16 y=16 y=16是监督信号,模型训练步骤如下:

在完成一次梯度下降之后,如果再让模型做一次预测,那么模型的预测值会比原先更接近 y = 16.
1.2 时间差分方式的训练
强化学习的情形是没有监督信号,只有奖励信号。和上面的例子对应就是如下的情形:
| 例 2:时间差分方式训练 |
|---|
![]() |
![]() |
![]() |
2 最优动作价值函数
在一局 (Episode) 实验中,把从起始到结束的所有奖励记作:
定义折扣率 γ ∈ [ 0 , 1 ] \gamma \in [0, 1] γ∈[0,1]。折扣回报的定义是:
在游戏尚未结束的 t t t 时刻, U t U_t Ut 是一个未知的随机变量,其随机性来自于 t t t 时刻之后的所有状态与动作。动作价值函数的定义是:
最优动作价值函数用最大化消除策略 π:
可以这样理解 Q ∗ Q_* Q∗:已知 s t s_t st和 a t a_t at,不论未来采取什么样的策略 π \pi π,回报 U t U_t Ut的期望不可能超过 Q ∗ Q_* Q∗。
所以假如知道了 Q ∗ Q_* Q∗,就可以用 Q ∗ Q_* Q∗去做控制。举例:对于动作空间 A = { 左 , 右 , 上 } \mathcal{A} = \{左,右,上\} A={
左,右,上},对于当前状态 s t s_t st,有
如果现在智能体选择向左走,不管后面采取什么策略,回报的期望不会超过610,智能体应该选择向上跳。所以我们希望知道 Q ∗ Q_∗ Q∗,因为它就像是先知一般,可以预见未来,在 t 时刻就预见 t 到 n 时刻之间的累计奖励的期望。
所以问题是怎么得到 Q ∗ Q_∗ Q∗?深度强化学习的办法就是用深度神经网络通过训练去近似:

接下来的问题是,怎么用TD的方式训练DQN。其根据就是最优贝尔曼方程
3 最优贝尔曼方程
3.1 动作价值函数

3.2 状态价值函数

3.3 贝尔曼方程

3.4 最优贝尔曼方程

4 用TD的方式训练DQN
4.1 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)四元组
在最优贝尔曼方程中已经看到了TD目标的出现:

本文介绍了深度Q网络(DQN)的原理,包括时间差分学习、最优动作价值函数和贝尔曼方程,提供了PyTorch和Stable-Baselines3版本的代码实现。通过伪代码展示了如何用TD方式训练DQN,并探讨了经验回放和目标网络在训练过程中的应用。



最低0.47元/天 解锁文章
4433

被折叠的 条评论
为什么被折叠?



