IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 论文分享 -->强化学习-->Playing Atari with Deep Reinforcement Learning -> 正文阅读

[人工智能]论文分享 -->强化学习-->Playing Atari with Deep Reinforcement Learning

本次要总结分享的是DeepMind出品的强化学习经典DQN原始论文,论文链接DQN Paper,DeepMind使用该DQN方法,在某些电玩游戏上,机器表现超越人类。

动机和创新点

  • 本篇论文所提方法是第一个将深度网络和强化学习结合起来进行训练的方法,具体而言,将深度网络(卷积网络)提取高维特征,使用Q-learning的学习方式来训练整个网络。
  • 对于一些高维复杂场景,状态特征很难通过人工特征工程的方式提取,这对传统的一些强化学习算法带来挑战,而近些年流行的深度学习,能很好的从高维特征提取到高级特征,并且在自然语言处理、图像、语音等领域得到广泛的应用。
  • 但是对于深度学习与强化学习的结合会面临以下几个挑战
    • 大部分深度学习的应用,都需要大量标注好的训练样本,而对于强化学习算法,必须能从稀疏、充满噪声、延迟的奖励信息中去学习,与监督学习中直接学习input和target关联相比,强化学习并没有那么有效率,对样本的利用率较低。
    • 大多数深度学习算法都是假设样本间是独立的,而在强化学习中,样本间通常是高度相关的,例如一个episode的样本是 马尔科夫序列。
    • 大多数深度学习算法都是假设样本是符合固定的分布,而在强化学习中,随着算法学习新的行为和奖励,数据分布通常会发生变化。

背景

符号定义

  • ε \varepsilon ε:游戏环境
  • a t a_t at? t t t 时刻采取的动作,其中 a t ∈ A ; ? A = { 1 , . . . , K } a_t \in A; \ A=\{1,...,K\} at?A;?A={1,...,K}
  • x t x_t xt? t t t 时刻的游戏环境表征, x t ∈ R d x_t \in R^d xt?Rd,可能是游戏原始图像,或是人工提取的特征向量。
  • r t r_t rt? t t t 时刻根据游戏状态得到的奖励,在游戏里就是得分,这个奖励得分可能是有延迟性的(例如某些游戏到最后一步或者特定步后才能获得得分),因此可能依赖于之前一系列动作和游戏状态。
  • s t s_t st? t t t 时刻游戏状态, s t = x 1 , a 1 , x 2 , . . . , a t ? 1 , x t s_t = x_1, a_1, x_2,...,a_{t-1},x_t st?=x1?,a1?,x2?,...,at?1?,xt?,因为如果仅仅根据 x t x_t xt? 很难理解当前游戏状态。假设每个序列都是有限长度的,这就会产生大量但是长度有限的MDP(马尔科夫决策过程),对于每个序列都是一个状态。

数学推导

我们之前总结过The Bellman Equation,从这里我们知道,强化学习的目标是最大化未来奖励:
R t = ∑ t ′ = t T γ t ′ ? t r t ′ R_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'} Rt?=t=tT?γt?trt?

上式中 T T T 为MDP序列长度。

根据The Bellman Equation得到optimal action-value function,也就是:
Q ? ( s , a ) = m a x π E [ R t ∣ s t = s , a t = a , π ] Q^{*}(s,a)=\underset{\pi}{max}E[R_t|s_t=s, a_t=a, \pi] Q?(s,a)=πmax?E[Rt?st?=s,at?=a,π]
等价于这种迭代形式:
Q ? ( s , a ) = E s ′ ~ ε [ r + γ m a x a ′ Q ? ( s ′ , a ′ ) ∣ s , a ] Q^{*}(s,a) = E_{s'\sim\varepsilon}[r+\gamma \underset{a'}{max}Q^{*}(s',a')|s,a] Q?(s,a)=Esε?[r+γamax?Q?(s,a)s,a]

这里的 π \pi π 是指策略函数。

上述这种 Q Q Q 函数,我们可以用深度网络去拟合,那么我们称这种深度网络为 Q ? n e t w o r k Q-network Q?network,其损失函数为:
L i ( θ i ) = E s , a ~ p ( . ) [ ( y i ? Q ( s , a ; θ i ) 2 ] L_i(\theta_i) = E_{s,a\sim p(.)}[(y_i-Q(s,a;\theta_i)^2] Li?(θi?)=Es,ap(.)?[(yi??Q(s,a;θi?)2]

上述 y i = E s ′ ~ ε [ r + γ m a x a ′ Q ? ( s ′ , a ′ ) ∣ s , a ] y_i=E_{s'\sim\varepsilon}[r+\gamma \underset{a'}{max}Q^{*}(s',a')|s,a] yi?=Esε?[r+γamax?Q?(s,a)s,a] i i i 表示第 i i i 次迭代, p ( s , a ) p(s,a) p(s,a) 表示产生的动作行为概率分布。在训练时,我们将第 i ? 1 i-1 i?1次更新得到的参数 θ i ? 1 \theta_{i-1} θi?1? 固定好,然后按照 L i ( θ i ) L_i(\theta_i) Li?(θi?) 进行参数更新。

在这里插入图片描述

  • 注意上述算法是 model-free模式的,他是使用游戏环境产生的样本来进行学习的,而无需显示的去对游戏环境进行估计。
  • 同时他也是 off-policy的学习方式,是采用贪心策略采取动作的,即 a = m a x a Q ( s , a ; θ ) a=\underset{a}{max}Q(s,a;\theta) a=amax?Q(s,a;θ),这就需要确保积累和探索了足够多的状态空间,在实际操作中,通常采用 ε-greedy strategy,也即随机产生的概率大于 1 ? ε 1-\varepsilon 1?ε时,则在合法动作空间内随机产生一个动作。

算法流程

在这里插入图片描述
首先我们存储Agent与游戏环境交互产生的样本,如 e t = { s t , a t , r t , s t + 1 } e_t=\{s_t, a_t, r_t, s_{t+1}\} et?={st?,at?,rt?,st+1?},存入到data-set D = e 1 , e 2 , . . . , e N D=e_1, e_2,...,e_N D=e1?,e2?,...,eN?,这个我们称之为 r e p l a y ? m e m o r y replay\ memory replay?memory,在算法的内层循环里,采用Q-learning 的更新方式,每次从 D D D 中随机采样minibatch样本,进行学习,来更新network的参数 θ \theta θ,在选择执行的动作时,采用ε-greedy strategy,也即随机产生的概率大于 1 ? ε 1-\varepsilon 1?ε时,则在合法动作空间内随机产生一个动作,反之直接从 Q Q Q 网络中取概率最大的动作,与游戏环境进行交互,产生新的样本。

上述做法有以下三个优点:

  • 因为是off-policy学习方式,所以每个样本可以重复利用多次,提高数据利用效率
  • 因为产生的样本之间是连续的,具有强相关性,不是相互独立不利于网络学习,算法里的随机采样操作打破了样本间相关性。
  • 如果采用on-policy学习方式,也即是执行一步学习一步(没有 r e p l a y ? m e m o r y replay\ memory replay?memory),然后陷入震荡或者局部最优的情况,本算法中采用的 e x p e r i e n c e ? r e p l a y experience\ replay experience?replay行为分布在其先前的许多状态上被平均化,从而平滑学习并避免参数中的振荡或发散

显然上述算法流程中,有两个地方需要进行估计:

  • Q ( ? j , a j ; θ ) Q(\phi_j, a_j; \theta) Q(?j?,aj?;θ) :当前状态下执行动作 a j a_j aj? 的累积期望价值估计
  • m a x a ′ Q ( ? j + 1 , a ′ ; θ ) \underset{a'}{max}Q(\phi_{j+1}, a'; \theta) amax?Q(?j+1?,a;θ):下一个状态最大累积期望价值估计

在DQN实现代码里,分别用两个神经网络来估计上述两个 Q Q Q

代码实现

代码实现这里参考的是莫烦AI教程代码,写的清晰易懂,推荐大家一读。莫烦教程里已经对代码细节进行了详细的讲解,这里只总结下几个我认为比较重要的点。

  • 一个样本 ( s , a , r , s _ ) (s,a, r,s\_) (s,a,r,s_):表示在 s s s 下执行动作 a a a 后所获得的奖励 r r r,后的状态,
  • 代码里用eval_net 和 target_net 分别估计 Q ( ? j , a j ; θ ) Q(\phi_j, a_j; \theta) Q(?j?,aj?;θ) m a x a ′ Q ( ? j + 1 , a ′ ; θ ) \underset{a'}{max}Q(\phi_{j+1}, a'; \theta) amax?Q(?j+1?,a;θ),并且会每隔一定时间,就会将eval_net replace覆盖 target_net,对于target_net 只要max操作就行,而 eval_net输出中 需要将动作a对应的输出gather出来。
  • 存储Agent与环境交互产生的样本 ( s , a , r , s _ ) (s,a, r,s\_) (s,a,r,s_),进行off-policy的学习,不断的训练eval_net 和 target_net 。
  • 采用ε-greedy strategy,当产生的概率小于等于ε时,则选择 Q Q Q 输出概率最大的动作,否则在合法动作空间里随机产生动作。并且随着学习的进行ε 越来越大。

一些改进

Double DQN

在原始DQN中,用eval_net 和 target_net 分别估计 Q ( ? j , a j ; θ ) Q(\phi_j, a_j; \theta) Q(?j?,aj?;θ) m a x a ′ Q ( ? j + 1 , a ′ ; θ ) \underset{a'}{max}Q(\phi_{j+1}, a'; \theta) amax?Q(?j+1?,a;θ),实际上eval_net 和 target_net 这两个网络在网络更新上存在时延(定期覆盖), Q m a x Q_{max} Qmax? 存在误差;并且实际实验发现, m a x a ′ Q ( ? j + 1 , a ′ ; θ ) \underset{a'}{max}Q(\phi_{j+1}, a'; \theta) amax?Q(?j+1?,a;θ) 存在 o v e r e s t i m a t e overestimate overestimate。在Double DQN,我们用 e v a l _ n e t eval\_net eval_net 预测 s _ s\_ s_ 得到概率最大的动作 a ′ a' a,然后在 t a r g e t _ n e t target\_net target_net 中得出 a ′ a' a 的概率。其他的和原始DQN一致。
也即原始DQN的 y j y_j yj? 为:
Y j = R j + γ m a x a ′ ? Q ( ? j + 1 , a ′ ; θ ) Y_j = R_{j} + \gamma \underset{a'}{max}\ Q(\phi_{j+1}, a'; \theta) Yj?=Rj?+γamax??Q(?j+1?,a;θ)
在Double DQN中 y i y_i yi? 为:
Y j = R j + γ ? Q ( ? j + 1 , a r g m a x a Q ( ? j + 1 , a ; θ j ) , θ j ? 1 ) Y_j = R_{j} + \gamma\ Q(\phi_{j+1}, \underset{a}{argmax} Q(\phi_{j+1}, a; \theta_j), \theta_{j-1}) Yj?=Rj?+γ?Q(?j+1?,aargmax?Q(?j+1?,a;θj?),θj?1?)
也可以这样理解:
t a r g e t _ Q = t a r g e t _ Q ( s _ , a r g m a x a ( e v a l _ Q ( s _ , a a l l ) ) ) target\_Q= target\_Q(s\_, \underset{a}{argmax}(eval\_Q(s\_, a_{all}))) target_Q=target_Q(s_,aargmax?(eval_Q(s_,aall?)))

简而言之:区别就在于 这里的 target_net 里的最高奖励动作 是 由 eval_net 产生的,而不是直接reduce_max( target_net)。

Prioritized Experience Replay

因为原始的DQN,每次将Agent与环境交互产生的样本存储起来,然后进行mini_batch的学习,但是这种随机采样的方式,可能比较低效,因为可以思考带权重的采样方式,比如某个样本,模型学习的不好,在采样时应该给予比较大概率,在这里直接将 a b s ( s e l f . q _ t a r g e t ? s e l f . q _ e v a l ) , a x i s = 1 ) abs(self.q\_target - self.q\_eval), axis=1) abs(self.q_target?self.q_eval),axis=1) 作为样本采样权重,这样学习起来必然效率更高。但是如何快速的计算每个样本的权重,以及根据权重快速采样呢?论文中提出使用一种 s u m T r e e sumTree sumTree 的结构。这里就不详细讲了。

莫烦的强化学习教程其实以及非常详细,讲解的也非常通俗易懂,但是对于要应用的同学,还是需要自己精读相关论文,了解其中细节,才能深刻理解。

参考

  • https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
  • https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/DQN2/
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:14:30  更:2021-08-09 10:17:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:36:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码