初探强化学习(12)各种类型强化学习算法的流程图,用于对比分析

1. Q-learning

在这里插入图片描述
建立一个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 sa的行,且初始为全0)选择动作 a a a,执行 a a a,然后得到新的状态 s ’ s’ s和当前奖励r,同时更新表中 Q ( s , a ) Q(s,a) Q(s,a)的值,继续循环到终点。整个算法就是一直不断更新 Q table 里的值,再根据更新值来判断要在某个 state 采取怎样的 action最好。

2. SARSA

在这里插入图片描述
同样建立一个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 sa的行,且初始为全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太害怕坑,而容易陷入一个小角落出不来。

3. Dyna类型算法

在这里插入图片描述
由于不可能精确和完美的拟合真正环境,纯基于模型的强化学习效果往往很差。那有没有什么办法可以在一定程度上避免这一点呢?
那就把基于模型 + 不基于模型的强化学习结合起来吧!也就是Dyna算法框架了
它既在模型中学习,也在交互中学习。即Dyna框架在每个迭代轮中,会先和环境交互,并更新价值函数、策略函数,接着进行n次模型的模拟预测,同样更新价值函数、策略函数。这样同时利用上了和环境交互的经历以及模型的预测。

根据描述,就需要有两个相互独立的模型,一个根据状态 s s s和动作 a a a得到下一个状态 s ’ s’ s(策略函数),另一个根据当前状态 s s s和动作 a a a预测环境的奖励 r r r(价值函数)。其中

  • s , a s,a s,a 学习 r r r 的预测过程是一个回归问题(regression problem)。
  • s , a s,a s,a 学习 s ’ s’ s 的选择过程是一个密度估计问题(density estimation problem)。

3.1 Dyna-Q

在这里插入图片描述

  • 先初始化状态 s s s和其任意动作 a a a所对应的状态价值 Q ( s , a ) Q(s,a) Q(s,a)
  • 初始化尝试要理解得到的模型 M o d e l ( s , a ) Model(s,a) Model(s,a)
  • 对于每一轮迭代,先根据当前状态和 Q ( S , A ) Q(S,A) Q(S,A) ϵ − g r e d d y ϵ-greddy ϵgreddy的方式得到新状态S’和奖励R
  • 然后用Q-Learning更新价值函数 Q ( S , A ) Q(S,A) Q(S,A)
  • R R R S ’ S’ S更新模型 M o d e l ( s , a ) Model(s,a) Model(s,a) (这边是表格型强化学习,所以一般是用字典的形式存储R和S,一般情况下,可以使用神经网络来训练这个 M o d e l ( s , a ) Model(s,a) Model(s,a))
  • (与真实环境交互完毕后,进行n次模拟)
    • 每次模拟都随机选择一个之前出现过的状态 S S S, 并在此基础上随机选择一个动作 A A A
    • 基于模型 M o d e l ( S , A ) Model(S,A) Model(S,A)得到 S ′ S^′ S R R R(这边可以理解成查表,根据key从字典中查招对应的值)
    • 再使用Q-Learning更新价值函数: Q ( S , A ) = Q ( S , A ) + α [ R + γ m a x a Q ( S ′ , a ) − Q ( S , A ) ] Q(S,A)=Q(S,A)+α[R+γmax_{a}Q(S^′,a)−Q(S,A)] Q(S,A)=Q(S,A)+α[R+γmaxaQ(S,a)Q(S,A)]

3.2 Dyna-2

Dyna-2是将环境交互的经历以及模型的预测进行了分离。即不是像Dyna一样交互完了就拿来模模拟,而是对于Q函数将被分为永久性记忆 Q ( S , A ) Q(S,A) Q(S,A)和瞬时记忆 Q ′ ( S , A ) Q^′(S,A) Q(S,A)。其中永久性记忆利用与实际环境的交互经验来更新,瞬时记忆利用与模型的模拟交互来更新。然后两者结合起来共同 对作用起选择。
在这里插入图片描述

  • 初始化运动模型和Reward函数
  • 清除永久性记忆 θ θ θ (值函数所对应的参数)
  • 对于每一轮迭代,从s0开始一次探索,然后每个episode都需要清除一次瞬时记忆 θ θ θ(短期记忆),资格迹
    z z z(eligibility trace)
  • 对于每个episode的初始状态,执行一次模拟(即用当前的模型执行模拟来更新值函数,和选择一个动作 a a a
  • 执行动作 a a a后得到奖励和新状态 s ’ s’ s,再利用新状态 s ’ s’ s,动作 a a a r r r更新模型以完成对模型的拟合
  • 利用新模型再从 s ’ s’ s状态开始进行模拟:更新值函数–>选择下一步 a ’ a’ a–>计算永久记忆的值函数TD–>更新永久记忆值函数参数和资格迹
  • s s s= s ‘ s‘ s a a a= a ’ a’ a
  • 继续循环

4.3 Deep Dyna Q

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. DQN

4.1 DQN-2013

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 面临着几个挑战:

  • 深度学习需要大量带标签的训练数据;
  • 强化学习从 scalar reward 进行学习,但是 reward 经常是 sparse, noisy, delayed;
  • 深度学习假设样本数据是独立同分布的,但是强化学习中采样的数据是强相关的

因此,DQN 采用经验回放(Experience Replay)机制,将训练过的数据进行储存到 Replay Buffer 中,以便后续从中随机采样进行训练,好处就是:1. 数据利用率高;2. 减少连续样本的相关性,从而减小方差(variance)。

NIPs 2013 中 DQN 的伪代码如下图所示:

在这里插入图片描述

4.2 DQN-2015

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的思路图
整理的非常清晰,按照序号看,一看就懂
在这里插入图片描述

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值