赞
踩
建立一个Q Table来保存状态s和将会采取的所有动作
a
a
a,
Q
(
s
,
a
)
Q(s,a)
Q(s,a)。在每个回合中,先随机初始化第一个状态,再对回合中的每一步都先从Q Table中使用ϵ−贪婪基于当前状态
s
s
s (如果Q表没有该状态就创建
s
−
a
s-a
s−a的行,且初始为全0)选择动作
a
a
a,执行
a
a
a,然后得到新的状态
s
’
s’
s’和当前奖励r,同时更新表中
Q
(
s
,
a
)
Q(s,a)
Q(s,a)的值,继续循环到终点。整个算法就是一直不断更新 Q table 里的值,再根据更新值来判断要在某个 state 采取怎样的 action最好。
同样建立一个Q Table来保存状态
s
s
s和将会采取的所有动作
a
a
a,
Q
(
s
,
a
)
Q(s,a)
Q(s,a)。在每个回合中,先随机初始化第一个状态,再对回合中的每一步都先从Q Table中使用
ϵ
−
g
r
e
d
d
y
ϵ−greddy
ϵ−greddy基于当前状态
s
s
s (如果Q表没有该状态就创建
s
−
a
s-a
s−a的行,且初始为全0)选择动作
a
a
a,执行
a
a
a,然后得到新的状态
s
’
s’
s’和当前奖励
r
r
r,同时再使用
ϵ
−
g
r
e
d
d
y
ϵ−greddy
ϵ−greddy得到在
s
’
s’
s’时的
a
’
a’
a’,直接利用
a
’
a’
a’更新表中
Q
(
s
,
a
)
Q(s,a)
Q(s,a)的值,继续循环到终点。
相比之下,Q-Learning是贪婪的,在更新Q时会先不执行动作只更新,然后再每次都会选max的动作,而sarsa选了什么动作来更新Q就一定执行相应的动作。这就使它不贪心一昧求最大,而是会稍稍专注不走坑,所以sarsa相对来说十分的胆小,掉进坑里面下次争取会避免它(而Q不管,每次都直接向着最小的反向学习。)不管因为Sarsa太害怕坑,而容易陷入一个小角落出不来。
由于不可能精确和完美的拟合真正环境,纯基于模型的强化学习效果往往很差。那有没有什么办法可以在一定程度上避免这一点呢?
那就把基于模型 + 不基于模型的强化学习结合起来吧!也就是Dyna算法框架了。
它既在模型中学习,也在交互中学习。即Dyna框架在每个迭代轮中,会先和环境交互,并更新价值函数、策略函数,接着进行n次模型的模拟预测,同样更新价值函数、策略函数。这样同时利用上了和环境交互的经历以及模型的预测。
根据描述,就需要有两个相互独立的模型,一个根据状态 s s s和动作 a a a得到下一个状态 s ’ s’ s’(策略函数),另一个根据当前状态 s s s和动作 a a a预测环境的奖励 r r r(价值函数)。其中
Dyna-2是将环境交互的经历以及模型的预测进行了分离。即不是像Dyna一样交互完了就拿来模模拟,而是对于Q函数将被分为永久性记忆
Q
(
S
,
A
)
Q(S,A)
Q(S,A)和瞬时记忆
Q
′
(
S
,
A
)
Q^′(S,A)
Q′(S,A)。其中永久性记忆利用与实际环境的交互经验来更新,瞬时记忆利用与模型的模拟交互来更新。然后两者结合起来共同 对作用起选择。
DQN(Deep Q-Network)是深度强化学习(Deep Reinforcement Learning)的开山之作,将深度学习引入强化学习中,构建了 Perception 到 Decision 的 End-to-end 架构。DQN 最开始由 DeepMind 发表在 NIPS 2013,后来将改进的版本发表在 Nature 2015。
深度学习是监督学习,需要有标签数据来计算损失函数,通过梯度下降和误差反向传播来更新神经网络的参数,那在强化学习中如何获得标签呢
在Q-learning 中,我们用
R
t
+
1
+
γ
m
a
x
a
Q
(
S
t
+
1
,
a
)
R_{t+1}+γmax_{a}Q(S_{t+1},a)
Rt+1+γmaxaQ(St+1,a)来更新 Q 值,在这里我们可以将其作为标签 Q 值(Target Net):
R
t
+
1
+
γ
m
a
x
a
Q
(
S
t
+
1
,
a
∣
θ
)
R_{t+1}+γmax_{a}Q(S_{t+1},a|θ)
Rt+1+γmaxaQ(St+1,a∣θ)
经验回放 Experience Replay
DQN 面临着几个挑战:
因此,DQN 采用经验回放(Experience Replay)机制,将训练过的数据进行储存到 Replay Buffer 中,以便后续从中随机采样进行训练,好处就是:1. 数据利用率高;2. 减少连续样本的相关性,从而减小方差(variance)。
NIPs 2013 中 DQN 的伪代码如下图所示:
Nature 2015 中 DQN 做了改进,提出了一个目标网络 Q ( S t + 1 , a ∣ θ − ) Q(S_{t+1},a|θ^{-}) Q(St+1,a∣θ−),每经过 N 个回合的迭代训练,将 Q ( S t + 1 , a ∣ θ ) Q(S_{t+1},a|θ) Q(St+1,a∣θ)的参数复制给目标网络 Q ( S t + 1 , a ∣ θ − ) Q(S_{t+1},a|θ^{-}) Q(St+1,a∣θ−),从而切断相关性。伪代码如下图所示:
下面是一个大佬关于DQN的思路图
整理的非常清晰,按照序号看,一看就懂
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。