第一章、Q-learning

0 前言

Q学习是一种无模型的离散异策略(off-policy)算法,它使用Q表格来处理离散观测和动作空间。
注:off-policy是指收集经验放回池的策略和最后控制智能体的目标策略不同。

在阅读下述内容之前,假设你以理解以下概念及内容:状态空间、动作空间、奖励、折扣回报、动作价值函数、最优动作价值函数及TD误差等。

1、Q-learning

强化学习的目的实际上都是根据目前的状态 s t s_t st推测出应该选择什么样的动作 a t a_t at。只不过不同的算法达到该目的的途径是不同的。

Q-learning和DQN都是通过获取(训练)一个最优动作价值函数 Q ⋆ ( s , a ) Q_{\star}(s,a) Q(s,a)来得到对应的状态下应该做什么动作这件事情。

2、表格形式的Q-learning

假设状态空间 S S S和动作空间 A A A都是有限集合,那面动作价值函数就可以表示为如下的表格即 Q π ( s t , a t ) Q_{\pi}(s_t,a_t) Qπ(st,at)
(一个显而易见的问题是那怎么获取最优动作价值函数(也可以叫最优动作价值表格)呢?)

状态/动作 a 1 a_1 a1(第一种动作) a 2 a_2 a2(第二种动作) a 3 a_3 a3(第三种动作) a 4 a_4 a4(第四种动作)
s 1 s_1 s1(第一种状态)380-9520173
s 2 s_2 s2(第二种状态)-764-195210
s 3 s_3 s3(第三种状态)15272413-80

3、获取最优动作价值函数

  • 初始化动作价值函数表格,可以让它是全零的表格。
  • 用表格形式的Q学习算法更新表格,每次更新表格的一个元素。
  • 最终表格会收敛到最优动作价值函数。

具体做法:

step1:收集训练数据,实际上就是建立经验放回池。

经验放回池中是一系列的 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)的四元组。
经验放回池的获取可以通过任意的策略获取,通常选择 ϵ − g r e e d y \epsilon-greedy ϵgreedy策略,该策略如下:

a t = { a r g m a x a Q ~ ( s t , a ) 当概率 ≥ ϵ 均匀抽取动作空间中的一个动作 当概率 < ϵ a_t=\begin{cases}argmax_a\widetilde{Q}(s_t,a) \quad\quad当概率\geq \epsilon\\均匀抽取动作空间中的一个动作 \quad\quad 当概率<\epsilon\end{cases} at={argmaxaQ (st,a)当概率ϵ均匀抽取动作空间中的一个动作当概率<ϵ

此处我们联动一下skrl中的智能体DQN,会发现Decision making基本上与上述内容契合
在这里插入图片描述

step2:基于经验放回池更新表格
注意这里更新表格的时候,每次只更新一个元素。若记 ( s t , a t ) (s_t,a_t) (st,at)位置的当前值为 Q ~ n o w ( s t , a t ) \widetilde{Q}_{now}(s_t,a_t) Q now(st,at)更新后为 Q ~ n e w ( s t , a t ) \widetilde{Q}_{new}(s_t,a_t) Q new(st,at)

已知四元组序列为 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)
1、记 q ^ t = Q ~ n o w ( s t , a t ) \hat{q}_t=\widetilde{Q}_{now}(s_t,a_t) q^t=Q now(st,at)
2、记 s t + 1 s_{t+1} st+1状态下,最大值为 q ^ t + 1 = m a x a Q ~ n o w ( s t + 1 , a t ) \hat{q}_{t+1}=max_a\widetilde{Q}_{now}(s_{t+1},a_t) q^t+1=maxaQ now(st+1,at)
3、记 y ^ t = r t + γ ⋅ q ^ t + 1 \hat{y}_t=r_t+\gamma \cdot \hat{q}_{t+1} y^t=rt+γq^t+1,我们的目标实际上是希望 q ^ t \hat{q}_t q^t越接近 y ^ t \hat{y}_t y^t越好,因此记 δ t = q ^ t − y ^ t \delta_t=\hat{q}_t-\hat{y}_t δt=q^ty^t
4、更新 Q ~ n e w ( s t , a t ) = Q ~ n o w ( s t , a t ) − α ⋅ δ t \widetilde{Q}_{new}(s_t,a_t)=\widetilde{Q}_{now}(s_t,a_t)-\alpha\cdot \delta_t Q new(st,at)=Q now(st,at)αδt

此处我们联动一下skrl中的智能体DQN,会发现Learning algorithm基本上与上述内容契合
在这里插入图片描述
skrl中的代码案例

models = {}
models["policy"] = EpilonGreedyPolicy(env.observation_space, env.action_space, device, num_envs=env.num_envs, epsilon=0.1)
cfg = Q_LEARNING_DEFAULT_CONFIG.copy()
cfg["discount_factor"] = 0.999
cfg["alpha"] = 0.4
# logging to TensorBoard and write checkpoints (in timesteps)
cfg["experiment"]["write_interval"] = 1600
cfg["experiment"]["checkpoint_interval"] = 8000
cfg["experiment"]["directory"] = "runs/torch/FrozenLake"

agent = Q_LEARNING(models=models,
                   memory=None,
                   cfg=cfg,
                   observation_space=env.observation_space,
                   action_space=env.action_space,
                   device=device)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值