前言

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

强化学习基础

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

  • Agent需要 1.做出行动At 2. 观察环境Ot 计算收益 Rewardt
  • Environment需要 1. 感知Agent做出的行动 At2. 做出环境反应Ot+1 3. 反馈收益Rt+1

具体可以使用下图来表示:(Agent 为大脑 地球为 Environment)
从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记
可以表示为四元式E=<X,A,P,R> 其中X为当前状态A做出的行动P状态转移矩阵R收益Reward
而状态State到动作Action的过程就称之为一个策略Policy,一般用π 表示 ,也就是需要找到以下关系:

a=π(s)

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

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

{s1,a1,r1,s2,a2,r2...}

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

MDP马尔科夫决策过程

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

{s1,a1,r1,s2,a2,r2...}

其中一个重要的假设是在每一次的参数调整中都会对环境造成确定性的影响,即输入确定,输出也确定

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

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

P(st+1|st)=P(st+1|st,st1,...s1,s0)

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

Value Function 价值函数

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

v(s)=E[Gt|St=s]

其中回报Return Gt来表示某个时刻t的状态将具备的回报
Gt=Rt+1+λRt+2+...=k=0λkRt+k+1

上式中R是Reward反馈,λ是discount factor折扣因子,一般小于1,就是说一般当下的反馈是比较重要的,时间越久,影响越小。
之前说到我们学习目标是让agent学习到一个策略policy使总体期望最大,我们通过价值函数有两种比较常用的方法:

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

Bellman方程

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

v(s)=E[Rt+1+λv(St+1)|St=s]

Bellman方程说明了当前状态的值函数与下个状态的值函数的关系。从公式上看,当前状态的价值和下一步的价值以及当前的反馈Reward有关。它表明Value Function是可以通过迭代来进行计算的。虽然看似简单,确是强化学习的基础。

Action-value Function 动作价值函数

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

(1)Qπ(s,a)=E[rt+1+λrt+2+λ2rt+3+...|s,a](2)(3)=Es[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]

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

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

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

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

    (4)vk+1(s)=E[Rt+1+γvk(St+1)|St=s](5)=aπ(a|s)s,rp(s,r|s,a)[r+γvk(s)]

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

    (6)v(s)=maxaE[Rt+1+γv(St+1)|St=s,At=a](7)=maxs,rp(s,r|s,a)[r+γv(s)]

    然后改变成迭代形式

    (8)vk+1(s)=maxaE[Rt+1+γvk(St+1)|St=s,At=a](9)=maxs,rp(s,r|s,a)[r+γvk(s)]

    其中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))

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

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

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

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

  1. 使用矩阵为最简单的方法
    从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记
    如图所示,我们使用一个矩阵来存储Q值,每一个单元格表示Q(s,a),再通过ϵgreedy进行动作选择。但是问题也很明显,如果我们的state与action很多,就如打砖块游戏,每个时间不同的砖块排列跟剩余都是不同的state,就会导致维度灾难。

  2. 价值函数近似Value

    Q(s,a)f(s,a,w)=w1+ws2a+w0

    因为我们并不知道Q值的实际分布情况,本质上价值函数近似就是用一个函数来近似Q值的分布。

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

    L(w)=E[(r+γmaxaQ(s,a,w)Q(s,a,w))2]

    其中r+γmaxaQ(s,a,w)为target

DQN

下图为DQN 2013论文中的算法
从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记
其中用到了随机采样,原因是玩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

网络结构设计
从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记
从强化学习Reinforcement Learning到DQN(Deep Q-learning Network)学习笔记

后续的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. 周志华,机器学习西瓜书

相关文章:

  • 2021-11-07
  • 2022-02-01
  • 2021-06-15
  • 2021-06-14
  • 2022-12-23
  • 2021-11-25
  • 2021-12-13
  • 2021-07-20
猜你喜欢
  • 2021-07-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-09-02
  • 2021-08-27
  • 2021-05-16
相关资源
相似解决方案