从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记

前言

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

强化学习基础

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

  • Agent需要 1.做出行动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做出的行动 P P 状态转移矩阵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,st1,...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+λmaxaQ(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]=maxs,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]=maxs,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[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+γmaxaQ(s,a,w)Q(s,a,w))2] L ( w ) = E [ ( r + γ max a ′ Q ( s ′ , a ′ , w ) − Q ( s , a , w ) ) 2 ]

        其中 r+γmaxaQ(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. http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html (David Silver的课程PPT)
      2. https://zhuanlan.zhihu.com/p/21547911
      3. http://www.cnblogs.com/wangxiaocvpr/p/5601972.html
      4. http://www.cnblogs.com/jinxulin/p/3526542.html
      5. http://blog.csdn.net/buyulian/article/details/79209338
      6. DeepMind, Playing Atari with Deep Reinforcement Learning,2013
      7. 周志华,机器学习西瓜书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值