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学习笔记 -> 正文阅读

[人工智能]DQN学习笔记

本文是DQN的学习笔记,学习内容为知乎上关于DQN的介绍。

原文链接为https://zhuanlan.zhihu.com/p/21262246?refer=intelligentunit

机器学习与RL:

增强学习在某种程度上也可看成机器学习的一种:

做很多次实验,每次实验得到一组数据样本 { ( s 0 , a 0 , r 0 ) , ( s 1 , a 1 , r 1 ) , . . . , ( s t , a t , r t ) } \{(s_0,a_0,r_0),(s_1,a_1,r_1),...,(s_t,a_t,r_t)\} {(s0?,a0?,r0?),(s1?,a1?,r1?),...,(st?,at?,rt?)},很多次这样的实验构成我们的数据样本集。根据数据样本集进行学习,找到最好的policy。

其中 τ : = { ( s 0 , a 0 ) , ( s 1 , a 1 ) , . . . , ( s t , a t ) } \tau:=\{(s_0,a_0),(s_1,a_1),...,(s_t,a_t)\} τ:={(s0?,a0?),(s1?,a1?),...,(st?,at?)}称为某次实验的轨迹。

可以认为目标函数就是total reward,然后我们的目标就是最大化total reward。

上面的每组实验可以看做是机器学习中的某次优化目标函数的实验。机器学习中有GD,增强学习中应该也有相应的算法。


Value func and action value func:

增强学习(RL)的目标是找一个policy最大化return:
G t = ∑ k = 0 ∞ λ k R t + k + 1 G_t=\sum_{k=0}^\infty\lambda^k R_{t+k+1} Gt?=k=0?λkRt+k+1?
但除非整个过程结束,否则显然我们无法获取所有的reward来计算出每个状态的Return。

因此,引入一个概念: 价值函数Value Function,用value function v ( s ) v(s) v(s)来表示一个状态未来的潜在价值
v ( s ) = E [ G t ∣ S t = s ] v(s)=E[G_t|S_t=s]\\ v(s)=E[Gt?St?=s]
实际处理时往往是最大化value function。这里的E代表对t时刻之后所有时刻的reward取期望。

注:设 θ \theta θ代表某个policy对应的参数,由于

img

所以上述期望实际需要对以下三种随机性取:

1-不同的策略, 即不同的 θ \theta θ

2-每种策略对应的概率分布,即 p θ ( a t ∣ s t ) ( ? t ) p_\theta(a_t|s_t)(\forall t) pθ?(at?st?)(?t)

3-给定当前状态和action之后,下一时刻状态的概率分布 p ( s t + 1 ∣ s t , a t ) ( ? t ) p(s_{t+1}|s_t,a_t)(\forall t) p(st+1?st?,at?)(?t)

前面提到因为 G t G_t Gt?没法计算所以才引入 v ( s ) v(s) v(s)的,那么 v ( s ) v(s) v(s)怎么计算呢?就需要借助Bellman方程:
v ( s ) = E [ R t + 1 + λ v ( S t + 1 ) ∣ S t = s ] v(s)=E[R_{t+1}+\lambda v(S_{t+1})|S_t=s] v(s)=E[Rt+1?+λv(St+1?)St?=s]
即当前状态的价值只和当前状态的reward以及下一步的价值有关。因此可以用迭代的方法来计算value func!!!

这里的E代表对 S t + 1 S_{t+1} St+1?即下一时刻的状态以及 R t + 1 R_{t+1} Rt+1?取期望。因此把需要取期望的随机性从所有的t简化为了当前时刻t。

按定义其为:
∑ s ′ , r p ( s ′ , r ∣ s ) [ r + λ v ( s ′ ) ] \sum_{s',r}p(s',r|s)[r+\lambda v(s')] s,r?p(s,rs)[r+λv(s)]
value function不依赖于策略,但实际更常用的是依赖于策略的value function,称之为action value function,其定义为
Q π ( s , a ) : = E [ ∑ k = 0 ∞ λ k r t + k + 1 ∣ s , a ] = E [ r t + 1 + λ Q π ( s ′ , a ′ ) ∣ s , a ] Q^\pi(s,a):=E[\sum_{k=0}^\infty\lambda^k r_{t+k+1}|s,a]=E[ r_{t+1}+\lambda Q^\pi(s',a')|s,a] Qπ(s,a):=E[k=0?λkrt+k+1?s,a]=E[rt+1?+λQπ(s,a)s,a]
即该函数既依赖于状态s,又依赖于动作a。这里第二个等号根据的是bellman方程。这里的r仍然代表reward,但表示的是给定某个策略 π \pi π之后的reward。

第一个E代表对接下来所有时刻的所有可能的状态取期望,但由于这时策略 π \pi π已知,所以实际上这里是对 p θ ( a t ∣ s t ) ( ? t ) , p ( s t + 1 ∣ s t , a t ) ( ? t ) p_\theta(a_t|s_t)(\forall t),p(s_{t+1}|s_t,a_t)(\forall t) pθ?(at?st?)(?t),p(st+1?st?,at?)(?t)取期望。

第二个E把需要取期望的随机性从所有的t简化为了当前时刻t。

我们希望找到能让 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)最大的那个策略,即
Q ? ( s , a ) = max ? π Q π ( s , a ) Q^*(s,a)=\max_\pi Q^\pi(s,a) Q?(s,a)=πmax?Qπ(s,a)
由于
Q ? ( s , a ) = E [ r t + 1 + λ Q ? ( s ′ , a ′ ) ∣ s , a ] Q^*(s,a)=E[ r_{t+1}+\lambda Q^*(s',a')|s,a] Q?(s,a)=E[rt+1?+λQ?(s,a)s,a]
由于 Q ? Q^* Q?是所有策略对应的 Q Q Q值中最大的那个,所以其对应的策略采取的行为 a ′ a' a自然也是最优的,即a‘是让 Q ? Q^* Q?最大的a值。

Value iteration:

那么怎么得到最好的策略 π \pi π呢?可以使用所谓的Value iteration(注意这个迭代使用的是value func, 而不是action value func):

根据定义,
v ? ( s ) = max ? a E [ R t + 1 + γ v ? ( S t + 1 ) ∣ S t = s , A t = a ] = max ? a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v ? ( s ′ ) ] v^*(s)=\max_a E[R_{t+1}+\gamma v^*(S_{t+1})|S_t=s, A_t=a]\\ =\max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v^*(s')] v?(s)=amax?E[Rt+1?+γv?(St+1?)St?=s,At?=a]=amax?s,r?p(s,rs,a)[r+γv?(s)]
对应的迭代形式为:
v k + 1 ( s ) = max ? a E [ R t + 1 + γ v k ( S t + 1 ) ∣ S t = s , A t = a ] = max ? a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] v_{k+1}(s)=\max_a E[R_{t+1}+\gamma v_k(S_{t+1})|S_t=s, A_t=a]\\ =\max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_k(s')] vk+1?(s)=amax?E[Rt+1?+γvk?(St+1?)St?=s,At?=a]=amax?s,r?p(s,rs,a)[r+γvk?(s)]

Q-Learning:

注意Value iteration的每次更新实际是在更新一个函数,因此每次需要对每个状态s都要遍历更新一遍,并且因为要关于a取最大值,所以每次也需要对所有的a遍历一下。

但实际情况下我们没办法遍历所有的状态,还有所有的动作,我们只能得到有限的系列样本。Q-learning针对Value iteration的这个缺陷给出了解决的办法,其对应的更新方法类似于GD/SGD:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + λ max ? a ∈ A Q ( S t + 1 , a ) ? Q ( S t , A t ) ] Q(S_{t},A_t)\leftarrow Q(S_{t},A_t)+\alpha [R_{t+1}+\lambda\max_{a\in A} Q(S_{t+1},a)-Q(S_t,A_t)] Q(St?,At?)Q(St?,At?)+α[Rt+1?+λaAmax?Q(St+1?,a)?Q(St?,At?)]
其中 α \alpha α是学习率, A = { A 1 , . . . , A t , . . . } A=\{A_1,...,A_t,...\} A={A1?,...,At?,...}

注意这里并不需要用到所有状态s下的Q值。只需要知道对于所有可能的 ( S t , A t ) (S_t,A_t) (St?,At?)对应的Q值即可。因此可以用矩阵来存储所有的Q值。

Q-Learning的缺陷:维数灾难

显然状态s,行动a的所有可能取值决定了储存Q值的矩阵的大小。因此当状态s的可能取值太大时Q储存Q矩阵所用空间就会过大。

一个可能的解决办法是不再记录所有可能的Q值而是用一个函数 f ( s , a ) f(s,a) f(s,a)来近似 Q ( s , a ) Q(s,a) Q(s,a)。因此只需要知道 f f f的所有参数就可以确定下来Q在任意状态和行动下的 Q Q Q值了。

DQN:

怎么确定下来 f f f呢?DQN给出的方案是跟DL结合,使用CNN表示 f f f, 因此 f f f的确定转化为了训练CNN。而训练CNN需要训练样本。这些样本的自变量当然是不同的状态s(知乎上解释了为什么没有行动a),但是样本的标签怎么确定呢?

回忆Q-learning算法:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + λ max ? a ∈ A Q ( S t + 1 , a ) ? Q ( S t , A t ) ] Q(S_{t},A_t)\leftarrow Q(S_{t},A_t)+\alpha [R_{t+1}+\lambda\max_{a\in A} Q(S_{t+1},a)-Q(S_t,A_t)] Q(St?,At?)Q(St?,At?)+α[Rt+1?+λaAmax?Q(St+1?,a)?Q(St?,At?)]
我们的最终目标是让 Q ( S t , A t ) = R t + 1 + λ max ? a ∈ A Q ( S t + 1 , a ) Q(S_t,A_t)=R_{t+1}+\lambda\max_{a\in A} Q(S_{t+1},a) Q(St?,At?)=Rt+1?+λmaxaA?Q(St+1?,a),因此只需取标签为等式右边的值即可。故CNN对应的目标函数为:
L ( w ) = E [ r + λ max ? a ′ Q ( s ′ , a ′ , w ) ? Q ( s , a , w ) ] 2 L(w)=E[r+\lambda\max_{a'}Q(s',a',w)-Q(s,a,w)]^2 L(w)=E[r+λamax?Q(s,a,w)?Q(s,a,w)]2
这里w代表CNN的权重,Q代表CNN代表的函数。

我的理解是这里的E代表的是样本平均值。

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

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