基于价值的深度强化学习:DQN

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

本文主要是介绍DQN原理和算法伪代码和代码实现,算法实现包括pytorch版本和stable-baselines3版本

1 时间差分(Temporal Difference)

强化学习与监督学习最大的不同是监督学习有监督信号,而强化学习只有奖励信号。

1.1 有监督的训练

举例如下:

例 1:监督方式训练
假设我是个用户,我要从北京驾车去上海。从北京出发之前,我有个不太好的模型做预测,模型告诉我总车程是14小时在这里插入图片描述当我到达上海,我知道自己花的实际时间是 16 小时,这样这次旅行就形成了一个训练样本:在这里插入图片描述这样就可以根据这个样本对模型进行更新,让模型更准确一点

在这里插入图片描述
显然这个例子中,这个 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目标的出现:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值