| |
|
开发:
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方法,在某些电玩游戏上,机器表现超越人类。 动机和创新点
背景符号定义
数学推导我们之前总结过The Bellman Equation,从这里我们知道,强化学习的目标是最大化未来奖励: 上式中 T T T 为MDP序列长度。 根据The Bellman Equation得到optimal action-value function,也就是: 这里的 π \pi π 是指策略函数。 上述这种
Q
Q
Q 函数,我们可以用深度网络去拟合,那么我们称这种深度网络为
Q
?
n
e
t
w
o
r
k
Q-network
Q?network,其损失函数为: 上述 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+γa′max?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?) 进行参数更新。
算法流程
上述做法有以下三个优点:
显然上述算法流程中,有两个地方需要进行估计:
在DQN实现代码里,分别用两个神经网络来估计上述两个 Q Q Q。 代码实现代码实现这里参考的是莫烦AI教程代码,写的清晰易懂,推荐大家一读。莫烦教程里已经对代码细节进行了详细的讲解,这里只总结下几个我认为比较重要的点。
一些改进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)
a′max?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)
a′max?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一致。 简而言之:区别就在于 这里的 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 的结构。这里就不详细讲了。 莫烦的强化学习教程其实以及非常详细,讲解的也非常通俗易懂,但是对于要应用的同学,还是需要自己精读相关论文,了解其中细节,才能深刻理解。 参考
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |