从强化学习Reinforcement Learning到DQN(Deep Q

编程入门 行业动态 更新时间:2024-10-11 07:26:47

从强化学习Reinforcement <a href=https://www.elefans.com/category/jswz/34/1769507.html style=Learning到DQN(Deep Q"/>

从强化学习Reinforcement Learning到DQN(Deep Q

前言

本篇博客大概会记录强化学习RL的基础知识,基本方法,以及如何推导到DQN,和关于DeepMind的Playing Atari with Deep Reinforcement Learning(DQN学习打砖块游戏)这篇论文的一些理解,后续改进方向,还有一些具体实现。若有理解不当,恳请指出!

强化学习基础

强化学习中两大最基本的要素:Agent(智能体)与Environment(环境)。
在每个时间 t t 内:

  • Agent需要 1.做出行动At" role="presentation" style="position: relative;">At 2. 观察环境 Ot O t 计算收益 Rewardt R e w a r d t

    • Environment需要 1. 感知Agent做出的行动 At A t 2. 做出环境反应 Ot+1 O t + 1 3. 反馈收益 Rt+1 R t + 1
    • 具体可以使用下图来表示:(Agent 为大脑 地球为 Environment)

      可以表示为四元式 E=<X,A,P,R> E =< X , A , P , R > 其中 X X 为当前状态A" role="presentation" style="position: relative;">A做出的行动 P P 状态转移矩阵R" role="presentation" style="position: relative;">R收益Reward
      而状态State到动作Action的过程就称之为一个策略Policy,一般用 π π 表示 ,也就是需要找到以下关系:

      a=π(s) a = π ( s )

      强化学习的学习目标让Agent学习到一个好的策略policy,使总体期望reward最大

      我们一开始并不知道最优的策略是什么,因此往往从随机的策略开始,使用随机的策略进行试验,可以得到一系列的状态,动作和反馈:

      {s1,a1,r1,s2,a2,r2...} { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 . . . }

      强化学习主要方法有 1.有模型学习(Bellman和策略迭代,值迭代) 2. 无模型学习(蒙特卡洛方法,时序差分学习(Q-learning)) 3. 值函数近似 4. 模仿学习

      MDP马尔科夫决策过程

      接下来介绍一下强化学习基于的世界观。强化学习的研究依然建立在经典物理学的范畴上(没有量子计算也没有相对论)。这个世界的时间是可以分割成一个一个时间片的,并且有完全的先后顺序,也就是上面提到的一系列时间序列状态:

      {s1,a1,r1,s2,a2,r2...} { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 . . . }
      其中一个重要的假设是在 每一次的参数调整中都会对环境造成确定性的影响,即输入确定,输出也确定

      那么有了时间和确定性的假设,MDP(Markov Decision Process)便是为了描述这个世界而提出的概念。

      马尔科夫链性质:系统下一时间状态仅由当前时刻状态与action决定。即

      P(st+1|st)=P(st+1|st,st−1,...s1,s0) P ( s t + 1 | s t ) = P ( s t + 1 | s t , s t − 1 , . . . s 1 , s 0 )

      一个基本的MDP可以用(S,A,P)来表示,S表示状态,A表示动作,P表示状态转移概率,也就是根据当前的状态 st s t 和 at a t 转移到 st+1 s t + 1 的概率。

      Value Function 价值函数

      简单了解了MDP,我们试着定义价值函数 v(s) v ( s ) 来表示一个状态的未来潜在价值:

      v(s)=E[Gt|St=s] v ( s ) = E [ G t | S t = s ]
      其中回报Return Gt G t 来表示某个时刻t的状态将具备的回报
      Gt=Rt+1+λRt+2+...=∑k=0∞λkRt+k+1 G t = R t + 1 + λ R t + 2 + . . . = ∑ k = 0 ∞ λ k R t + k + 1
      上式中R是Reward反馈,λ是discount factor折扣因子,一般小于1,就是说一般当下的反馈是比较重要的,时间越久,影响越小。
      之前说到我们学习目标是让agent学习到一个策略policy使总体期望最大,我们通过价值函数有两种比较常用的方法:

      • 直接优化策略 π(a|s) π ( a | s ) 或者 a=π(s) a = π ( s ) 使得回报更高
      • 通过估计value function来间接获得优化的策略。(DQN)

      Bellman方程

      下面引入Bellman方程,方便之后探讨基于Bellman方程而衍生得到的求解Value Function的方法。
      Bellman方程基本形式:

      v(s)=E[Rt+1+λv(St+1)|St=s] v ( s ) = E [ R t + 1 + λ v ( S t + 1 ) | S t = s ]
      Bellman方程说明了当前状态的值函数与下个状态的值函数的关系。从公式上看,当前状态的价值和下一步的价值以及当前的反馈Reward有关。它表明Value Function是可以通过迭代来进行计算的。虽然看似简单,确是强化学习的基础。

      Action-value Function 动作价值函数

      我们定义一个新的函数 动作价值函数(Action-value function) Qπ(s,a) Q π ( s , a ) 从状态s出发,执行动作a后再使用策略 π π 的累计奖赏

      Qπ(s,a)=E[rt+1+λrt+2+λ2rt+3+...|s,a]=Es′[r+λQπ(s′,a′)|s,a](1)(2)(3) (1) Q π ( s , a ) = E [ r t + 1 + λ r t + 2 + λ 2 r t + 3 + . . . | s , a ] (2) (3) = E s ′ [ r + λ Q π ( s ′ , a ′ ) | s , a ]

      Optimal Value Function 最优价值函数

      求最优策略等价于求解最优Value Function(即value-base approach,DQN就是属于这种方法)

      其他以下方法:

      1. policy-base approach: 直接计算策略函数
      2. model-base approach: 估计模型,计算状态转移函数,从而整个MDP过程得解。

      Q∗(s,a)=maxπQπ(s,a)=Es′[r+λmaxa′Q∗(s′,a′)|s,a] Q ∗ ( s , a ) = max π Q π ( s , a ) = E s ′ [ r + λ max a ′ Q ∗ ( s ′ , a ′ ) | s , a ]

      Bellman有两个基本算法:策略迭代值迭代

      • Policy Iteration策略迭代:目的通过迭代计算value function 使policy收敛到最优,算法分为两步

        1. Policy Evaluation 策略评估 :更新value function 估计当前策略价值
        2. Policy Improvement 策略改进:使用 greedy policy 产生新样本,用于第一步评估

        policy iteration使用bellman方程来更新value,最后收敛的value 即 vπ v π 是当前policy下的value值(所以叫做对policy进行评估),目的是为了后面的policy improvement得到新的policy。

        vk+1(s)=E[Rt+1+γvk(St+1)|St=s]=∑aπ(a|s)∑s′,rp(s′,r|s,a)[r+γvk(s′)](4)(5) (4) v k + 1 ( s ) = E [ R t + 1 + γ v k ( S t + 1 ) | S t = s ] (5) = ∑ a π ( a | s ) ∑ s ′ , r p ( s ′ , r | s , a ) [ r + γ v k ( s ′ ) ]

      • Value Iteration值迭代: 使用Bellman最优方程更新value,最后收敛得到的value即 v∗ v ∗ 就是当前state状态下的最优的value值。因此,只要最后收敛,那么最优的policy也就得到的。因此这个方法是基于更新value的,所以叫value iteration。

        v∗(s)=maxaE[Rt+1+γv∗(St+1)|St=s,At=a]=max∑s′,rp(s′,r|s,a)[r+γv∗(s′)](6)(7) (6) v ∗ ( s ) = max a E [ R t + 1 + γ v ∗ ( S t + 1 ) | S t = s , A t = a ] (7) = max ∑ s ′ , r p ( s ′ , r | s , a ) [ r + γ v ∗ ( s ′ ) ]
        然后改变成迭代形式

        vk+1(s)=maxaE[Rt+1+γvk(St+1)|St=s,At=a]=max∑s′,rp(s′,r|s,a)[r+γvk(s′)](8)(9) (8) v k + 1 ( s ) = max a E [ R t + 1 + γ v k ( S t + 1 ) | S t = s , A t = a ] (9) = max ∑ s ′ , r p ( s ′ , r | s , a ) [ r + γ v k ( s ′ ) ]
        其中 p p 为状态转移函数

      • 上面使用的是价值函数版本,动作价值函数版本为Qi+1(s,a)=Es&#x2032;[r+&#x03BB;maxa&#x2032;Qi(s&#x2032;,a&#x2032;)|s,a]" role="presentation">Qi+1(s,a)=Es[r+λmaxaQi(s,a)|s,a]

      Q-learning

      Q Learning根据value iteration得到。但要明确一点是value iteration每次都对所有的Q值更新一遍,也就是所有的状态和动作。但事实上在实际情况下我们没办法遍历所有的状态,还有所有的动作,我们只能得到有限的系列样本。因此,只能使用有限的样本进行操作。那么,怎么处理?Q Learning提出了一种更新Q值的办法:

      Q(St,At)←Q(St,At)+α(Rt+1+λmaxaQ(St+1,a)−Q(St,At)) Q ( S t , A t ) ← Q ( S t , A t ) + α ( R t + 1 + λ max a Q ( S t + 1 , a ) − Q ( S t , A t ) )

      虽然根据value iteration计算出target Q值,但是这里并没有直接将这个Q值(是估计值)直接赋予新的Q,而是采用渐进的方式类似梯度下降,朝target迈近一小步,取决于α,这就能够减少估计误差造成的影响。类似随机梯度下降,最后可以收敛到最优的Q值。
      具体算法如下:

      ϵ−greedy ϵ − g r e e d y 即以 ϵ ϵ 的概率选取随即动作,以1- ϵ ϵ 的概率根据当前Q值计算并作出一个最优动作。

      接下来的问题是如何存储Q值

      1. 使用矩阵为最简单的方法

        如图所示,我们使用一个矩阵来存储Q值,每一个单元格表示Q(s,a),再通过 ϵ−greedy ϵ − g r e e d y 进行动作选择。但是问题也很明显,如果我们的state与action很多,就如打砖块游戏,每个时间不同的砖块排列跟剩余都是不同的state,就会导致维度灾难。

      2. 价值函数近似Value

        Q(s,a)≈f(s,a,w)=w1+ws2a+w0 Q ( s , a ) ≈ f ( s , a , w ) = w 1 + w s 2 a + w 0
        因为我们并不知道Q值的实际分布情况,本质上价值函数近似就是用一个函数来近似Q值的分布。

      3. 进而可以推出Q值神经网络化,也就是DQN
        我们使用Q-learning为QNetwork提供有标签的样本 Rt+1+λmaxaQ(St+1,a) R t + 1 + λ max a Q ( S t + 1 , a ) ,利用Reward和Q计算出来的目标Q值。所以损失函数可以表示为

        L(w)=E[(r+γmaxa′Q(s′,a′,w)−Q(s,a,w))2] L ( w ) = E [ ( r + γ max a ′ Q ( s ′ , a ′ , w ) − Q ( s , a , w ) ) 2 ]
        其中 r+γmaxa′Q(s′,a′,w) r + γ max a ′ Q ( s ′ , a ′ , w ) 为target

      DQN

      下图为DQN 2013论文中的算法

      其中用到了随机采样,原因是玩Atari采集的样本是一个时间序列,样本之间具有连续性,如果每次得到样本就更新Q值,受样本分布影响,效果会不好。因此,一个很直接的想法就是把样本先存起来,然后随机采样如何?这就是Experience Replay的意思。中文详解与理解如下

      1、初始化replay memory D 容量为N
      2、用一个深度神经网络作为Q值网络,初始化权重参数
      3、设定游戏片段总数M
      4、初始化网络输入,大小为84*84*4,并且计算网络输出
      5、以概率ϵ随机选择动作at或者通过网络输出的Q(max)值选择动作at
      6、得到执行at后的奖励rt和下一个网络的输入
      7、根据当前的值计算下一时刻网络的输出
      8、将四个参数作为此刻的状态一起存入到D中(D中存放着N个时刻的状态)
      9、随机从D中取出minibatch个状态 (随即采样)
      10、计算每一个状态的目标值(通过执行at后的reward来更新Q值作为目标值)
      11、通过SGD更新weight

      网络结构设计

      后续的Improvement方向

      1. Q值的计算方法
      2. 随机采样重要性
      3. 改进网络结构,或者使用RNN代替时序性?
      4. 改进训练时间(训练时间稍长,据说1080要训练一天)
      5. 是否可以输出连续动作,可否会改进
      6. 更多有难度的游戏

      Win10下的具体实现可以看下一篇博客

      参考文献

      1. .Silver/web/Teaching.html (David Silver的课程PPT)
      2. .html
      3. .html
      4. DeepMind, Playing Atari with Deep Reinforcement Learning,2013
      5. 周志华,机器学习西瓜书

更多推荐

从强化学习Reinforcement Learning到DQN(Deep Q

本文发布于:2024-02-27 19:26:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765820.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Learning   Reinforcement   Deep   DQN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!