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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> DQN(deep Q-network)算法简述 -> 正文阅读

[人工智能]DQN(deep Q-network)算法简述

本文通过整理李宏毅老师的机器学习教程的内容,简要介绍深度强化学习(deep reinforcement learning)中的 DQN(deep Q-network)算法。

李宏毅老师课程的B站链接:
李宏毅, 深度强化学习, Q-learning, basic idea
李宏毅, 深度强化学习, Q-learning, advanced tips
李宏毅, 深度强化学习, Q-learning, continuous action

相关笔记:
策略梯度法, policy gradient
近端策略优化, proximal policy optimization


1. 基本概念


DQN 是基于价值(value-based)而非策略(policy-based)的方法,学习的不是策略,而是一个评论家(critic)。critic 并不直接采取行为,而是评价行为的好坏。

1.1 状态价值函数(state value function)


有一种 critic 叫做状态价值函数(state value function) V π ( s ) V^{\pi}(s) Vπ(s),即以一个策略 π \pi π 与环境做互动,当处于某一状态 s s s 时,接下来直到游戏结束的累计激励的期望值。当策略不同时,即使状态相同,得到的激励也是不一样的, V π ( s ) V^{\pi}(s) Vπ(s) 就不一样。

此外,由于无法列举所有的状态,因此 V π ( s ) V^{\pi}(s) Vπ(s) 实际上是一个网络,在训练时也就是一个回归(regression)问题。

具体地,衡量状态价值函数有两种不同的方法:基于蒙特卡洛的方法(Monte-Carlo based approach, MC)和基于时序差分的方法(temporal-difference approach, TD)。

基于蒙特卡洛的方法即是让 actor 与环境做互动,优化目标为,使各状态的 V π ( s ) V^{\pi}(s) Vπ(s) 与后续累计激励 G s G_s Gs? 尽可能接近。
MC based approach

但是基于蒙特卡洛的方法在每次更新网络时,都需要把游戏玩到结束,但有些游戏的时间比较长,因此会采用基于时序差分的方法。该方法不需要把游戏玩到底,而是通过时序差分的方式,使相邻状态下的价值函数之差与前一状态的激励尽可能接近:
TD appraoch

由于游戏本身可能具有随机性,激励即为随机变量,其方差会对算法效果产生影响。基于蒙特卡洛的方法由于使用累计激励 G s G_s Gs?,方差会很大;而基于时序差分的方法使用单步激励 r t r_t rt?,方差比较小,但是会遇到一个问题就是 V π ( s t + 1 ) V^{\pi}(s_{t+1}) Vπ(st+1?) 可能估计不准,也会影响学习结果。实际上,基于时序差分的方法比较常用,而基于蒙特卡洛的方法较少见。
MC v.s. TD 1

此外,两种方法产生的估计结果也可能不同,举例说明:
MC v.s. TD 2
在上例中,当状态 s a s_a sa? 产生 s b s_b sb? 不是巧合时,即 s a s_a sa? 影响了 s b s_b sb?,看到 s a s_a sa? 之后 s b s_b sb? 就会得不到激励,则基于蒙特卡洛的方法合理;而如果状态 s a s_a sa? 产生 s b s_b sb? 只是巧合,则基于时序差分的方法合理。


1.2 状态-动作价值函数(state-action value function, Q function)


另一种 critic 叫做状态-动作价值函数(state-action value function),也叫 Q 函数,即在某一状态 s s s 采取某一动作 a a a,假设一直使用同一个策略 π \pi π,得到的累计激励的期望值。

需要注意的是,对于策略 π \pi π 来说,在状态 s s s 不一定采取动作 a a a,但 Q 函数可以强制其采取动作 a a a,而后续仍使用策略 π \pi π 继续进行,即 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)。具体地,Q 函数有两种写法:
Q 函数的两种写法

只要有了 Q 函数,就可以做强化学习了,流程图如下:
流程图

其中:
π ′ ( s ) = arg ? max ? a Q π ( s , a ) \pi^{\prime}(s) = \arg \max_a Q^{\pi}(s, a) π(s)=argamax?Qπ(s,a)

所以,实际上并没有一个所谓的策略 π ′ \pi^{\prime} π π ′ \pi^{\prime} π 是由 Q 函数推出来的。

下面证明为什么由 Q 函数推出来的 π ′ \pi^{\prime} π p i pi pi 要好。

所谓的好,即是对所有状态而言,状态价值函数都更大,具体推导如下:
V π ( s ) = Q π ( s , π ( s ) ) ≤ max ? a Q π ( s , a ) = Q π ( s , π ′ ( s ) ) ? V π ( s ) ≤ Q π ( s , π ′ ( s ) ) = E [ r t + V π ( s t + 1 ) ∣ s t = s , a t = π ′ ( s t ) ] ≤ E [ r t + Q π ( s t + 1 , π ′ ( s t + 1 ) ) ∣ s t = s , a t = π ′ ( s t ) ] = E [ r t + 1 + r t + 2 + V π ( s t + 2 ) ∣ . . . ] ≤ E [ r t + 1 + r t + 2 + Q π ( s t + 2 , π ′ ( s t + 2 ) ) ∣ . . . ] = . . . ≤ V π ′ ( s ) V^{\pi}(s) = Q^{\pi}(s, \pi(s)) \leq \max_a Q^{\pi}(s, a) = Q^{\pi}(s, \pi^{\prime}(s)) \\ \ \\ V^{\pi}(s) \leq Q^{\pi}(s, \pi^{\prime}(s)) = E[r_t + V^{\pi}(s_{t+1}) | s_t = s, a_t = \pi^{\prime}(s_t)] \leq E[r_t + Q^{\pi}(s_{t+1}, \pi^{\prime}(s_{t+1})) | s_t = s, a_t = \pi^{\prime}(s_t)] = E[r_{t+1} + r_{t+2} + V^{\pi}(s_{t+2}) | ...] \leq E[r_{t+1} + r_{t+2} + Q^{\pi}(s_{t+2}, \pi^{\prime}(s_{t+2})) | ...] = ... \leq V^{\pi^{\prime}}(s) Vπ(s)=Qπ(s,π(s))amax?Qπ(s,a)=Qπ(s,π(s))?Vπ(s)Qπ(s,π(s))=E[rt?+Vπ(st+1?)st?=s,at?=π(st?)]E[rt?+Qπ(st+1?,π(st+1?))st?=s,at?=π(st?)]=E[rt+1?+rt+2?+Vπ(st+2?)...]E[rt+1?+rt+2?+Qπ(st+2?,π(st+2?))...]=...Vπ(s)


1.3 训练技巧


下面介绍几个 DQN 中一定会用到的技巧。


1.3.1 目标网络(target network)


第一个技巧是目标网络(target network)。

根据 Q 函数:
Q π ( s t , a t ) = r t + Q π ( s t + 1 , π ( s t + 1 ) ) Q^{\pi}(s_t, a_t) = r_t + Q^{\pi}(s_{t+1}, \pi(s_{t+1})) Qπ(st?,at?)=rt?+Qπ(st+1?,π(st+1?))

其中,等号左侧是网络的输出,右侧是目标,但是由于目标中含有 Q 函数,因此目标一直在变,会给训练带来困难。

解决办法是把其中一个 Q 网络(通常是等号右侧的目标网络)固定住,最小化模型输出与目标之间的均方误差(mean square error),当等号左侧的 Q 网络更新过几次之后,再用更新过的 Q 网络去替换目标网络,继续迭代。如下图所示:
目标网络

1.3.2 探索(exploration)


第二个技巧是探索(exploration)。

如果在某一状态下,所有动作均未被采取过,此时采取某个动作得到了正向的激励,会导致后续出现此状态时只采取这个动作,而不去探索其他的动作:
exploration, background

这个问题就是探索-利用窘境(exploration-exploitation dilemma)问题。

解决方法有两种: ? \epsilon ? 贪心(epsilon greedy)和玻尔兹曼探索(Boltzmann exploration)。

? \epsilon ? 贪心方法如下:
epsilon greedy
玻尔兹曼探索的公式如下:
P ( a ∣ s ) = e Q ( s , a ) ∑ a e Q ( s , a ) P(a | s) = \frac {e^{Q(s, a)}} {\sum_a e^{Q(s, a)}} P(as)=a?eQ(s,a)eQ(s,a)?

该方法有点像策略梯度,即根据 Q 函数定一个动作的概率分布。Q 值越大,采取该动作的概率越高,而指数运算使得概率不会为 0,即对于 Q 值小的动作也不代表不能尝试。

1.3.3 经验回放(experience replay)


第三个技巧是经验回放(experience replay),如下图所示:

经验回放

经验回放有两个好处:

其一,实际在做强化学习的时候,往往最耗时的步骤是与环境做互动,训练网络反而是比较快的(用 GPU 训练其实很快)。用回放缓存区可以减少与环境做互动的次数,因为在训练时,经验不需要全部来自于某一个策略。一些过去的策略所得到的经验可以放在缓存区里被使用很多次,这样的采样利用率是比较高效的。

其二,在训练网络时,我们希望一个批次里面的数据越多样越好。如果数据都是同样性质的,性能会比较差。如果数据缓存区里面的经验来自于不同的策略,容易满足多样性。

这里指的说明的是,缓存区中的经验数据,即便使用的策略 π \pi π 与当前策略不同,也没有影响。原因是,我们每次迭代所使用的采样经验是基于一个状态,而不是一个轨迹(trajectory),所以不受 off-policy 的影响。


1.4 算法流程


算法流程


2. 进阶技巧


未完待续……

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:30:27  更:2022-03-12 17:31:43 
 
开发: 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/26 15:39:00-

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