强化学习介绍

两年前,伦敦的一家小公司DeepMind向Arxiv上传了他们的开创性论文“ Playing Atari with Deep Reinforcement Learning”。在那篇文章中,他们演示了计算机是如何通过只观察屏幕像素,并在游戏得分增加时收到奖励这种学习模式去玩Atari 2600 视频游戏的。结果是显著的,因为每个游戏和每个游戏的目标是非常不同的,这些设计的游戏对人类而言也是不小的挑战。然而,现在用相同的模型架构,没有任何变化,被用来学习七个不同的游戏,其中三个的算法执行甚至比人类更好!

它从那以后就被称为通向人工智能的第一步 - 一个AI可以在各种环境中具有可行性,而不是局限于严格的领域,如下棋。难怪DeepMind会立即被Google收购,并一直处于深度学习研究的前沿。2015年2月,他们的论文“ Human-level control through deep reinforcement learning”被刊登在自然科学的最高荣誉期刊之一的封面上。在那篇文章中,他们将相同的模型应用于49种不同的游戏,并在其中一半的游戏中取得了超过人类的表现。

尽管如此,虽然监督和无监督学习的深层模型已经在社区得到广泛采用,但是深层强化学习仍然是一个谜。这篇博客将试图揭示这种技术,并理解其背后的理由。目标受众是已经具有机器学习或者神经网络背景,但没有时间深入强化学习的人。

路线图:

  1. 强化学习的主要挑战是什么?我们将在这里讨论 credit assignment problem 和 exploration-exploitation dilemma 。
  2. 如何用数学术语形式化强化学习?我们将定义马尔科夫决策过程,并使用它来推理强化学习。
  3. 我们如何形成长期战略?我们定义“discounted future reward”,这是下一节中算法的主要基础。
  4. 我们如何估计或近似未来的报酬?这里定义并解释简单的 table-based Q-learning 算法。
  5. 如果状态空间太大该怎么办?这里我们看到如何用一个(深)神经网络替换 Q-table
  6. 我们需要什么来使它投入实际工作?这里将讨论 experience replay 技术,它稳定了学习的过程。
  7. 到此结束了吗?最后,我们将考虑一些简单的关于 exploration-exploitation problem 的解决方案。

强化学习

考虑游戏《Break out》,这个游戏相信很多人都玩过,在这个游戏中,你控制一个板子在屏幕的底部,必须反弹球,以清除所有的砖在屏幕的上半部分。每次你打砖块,它消失,你的分数增加,从而你得到一个奖励。 


图1:Atari突围游戏。

图1:Atari突围游戏。图片来源:DeepMind。

假设你想教一个神经网络来玩这个游戏。输入到您的网络将是屏幕图像,输出将是三个动作:左,右或射击(启动球)。将它当作分类问题是有意义的 - 对于每个游戏屏幕,你必须决定,是否应该向左,向右或按射击。听起来是不是感觉很简单?是的,但是你需要训练的样本,大量的样本。当然,你可以记录那些骨灰玩家的游戏场景,但这不是我们自己学到的,而我们的目标是自学成才。我们不需要有人告诉我们一百万次该这么做,我们只需要偶尔的反馈,告诉我们是否做了正确的事情,然后其他的事自己分析处理。

这就是强化学习试图解决的任务,强化学习是位于监督和非监督学习之间的。在监督学习中每个训练样本都有一个目标标签,而在无监督学习中则没有标签,那么在强化学习中,我们得到的是一种稀疏的且具有延时的标签,即奖励。基于那些奖励,Agent必须学习在当前环境中的行为。

虽然这个想法是相当直观的,但在实践中有许多挑战。例如,当你在《Break out》游戏中打砖块并获得奖励时,它通常与你在获得奖励之前所做的动作(移动平板)无关。当你正确定位平板并反弹球,所有的困难的工作已经完成。这被称为credit assignment problem ,即上述动作中的哪一个与获得奖励相关联以及关联的紧密性达到了什么程度。

一旦你找出了一个策略来收集一定数量的奖励,你应该坚持下去还是尝试一些可能导致更大的奖励的东西?在上面的《Breakout》游戏中,一个简单的策略是移动到左边缘并等待。当发射时,球往往倾向于往左边飞,这样,在游戏结束前你会很容易得分约10分。你是满足于这些分数还是想要更多?这被称为 explore-exploit dilemma ,即如果你利用已知的工作策略或探索其他,可能更好的策略。

强化学习是关于我们(和几乎所有的动物)如何学习的重要模式。我们从父母那得到的赞美,学校的成绩,工作的薪水等等 这些都是奖励的例子。Credit assignment problems 和exploration-exploitation dilemmas 每天都在商业和人际关系中出现。这就是为什么研究这个问题很重要,然后游戏它形成了一个奇妙的沙箱正好用来试验这些新的方法。

马尔科夫决策过程

现在的问题是,你如何去形式化地描述一个强化学习问题,这样你才可以进行推理?最常见的方法是将其表示为马尔可夫决策过程。

假设你是一个agent,处在一个环境中(如《Break out》游戏)。环境处于某种状态(例如,底下滑板的位置,球的位置和方向,每个砖的存在与否等)。Agent 可以在环境中执行某些操作(例如,将滑板向左或向右移动)。这些行为有时可以得到某些奖励(例如得分增加)。这些行为转换了环境并产生新的状态,然后Agent可以执行另一个操作,等等。有关如何选择这些操作的规则称为策略。环境一般是随机的,这意味着下一个状态可能有些随机性(例如,当你失去一个球并发射一个新球的时候,球会往一个随机的方向移动) 


reinforcement learning problem&Markov decision process

左: 强化学习问题 右: 马尔可夫决策过程

状态和动作的集合以及从一个状态到另一个状态的转换的规则构成了 马尔可夫决策过程 。这个过程的一个 episode (例如一个游戏)形成状态,动作和奖励的有限序列: 
s0,α0,γ1,s1,α1,γ2,s2,...,sn1,αn1,γn,sns0,α0,γ1,s1,α1,γ2,s2,...,sn−1,αn−1,γn,sn

这里 sisi 表示状态, αiαi 是动作, γi+1γi+1 是执行动作后的奖励。episode以 terminal 状态  snsn  结束(例如,“游戏结束”画面)。马尔可夫决策过程依赖于马尔可夫假设,下一个状态s i + 1的概率仅取决于当前状态 sisi 和动作 αiαi ,而不取决于先前的状态或动作。

给未来的奖励打折扣

要长期地表现良好,我们不仅要考虑当下的回报,还要考虑将来的回报,那么我们需要怎么做呢? 
我们很容易计算一次马尔科夫决策在一个episode的总的回报: 

R=r1+r2+r3+...+rnR=r1+r2+r3+...+rn

鉴于此,从时间t开始的总体的未来奖励可以表示为: 
Rt=rt+rt+1+rt+2+...+rnRt=rt+rt+1+rt+2+...+rn

但由于我们的环境是随机的,所以我们永远不能肯定,如果我们下一次执行相同的行动,我们会得到同样的回报,因为我们走向未来越多,分歧越多。所以,我们会给未来的奖励打个折扣: 
Rt=rt+γrt+1+γ2rt+2+...+γntrnRt=rt+γrt+1+γ2rt+2+...+γn−trn

上式中的 γγ 是0和1之间的折扣因子,离当前时间点越远的奖励,我们就考虑得越少。很容易看出,我们在时间t的对未来的回报折扣可以用时间t+1时刻的回报来表示: 
Rt=rt+γ(rt+1+γ(rt+2+...))=rt+γRt+1Rt=rt+γ(rt+1+γ(rt+2+...))=rt+γRt+1

如果我们设置折扣因子为 γ=0γ=0 ,那么我们的策略将会是短视的,我们只能依靠即时的回报。如果我们想要平衡现在和将来的回报,我们应该将回报因子设置为 gamma=0.9gamma=0.9 。当然如果我们的环境是确定的,那么我们可以设置 γ=1γ=1  
对于Agent来说一个好的策略是能够 使所选择的行动能够最大化(折扣后)未来的奖励

Q-learning

在Q学习中,我们定义一个函数Q(s,a)Q(s,a)表示当我们在状态s执行a行动后未来(折扣)奖励的最大值,并从该时间点继续优化。 

Q(st,at)=maxRt+1Q(st,at)=maxRt+1

一种理解 Q(s,a)Q(s,a) 的方式是 “在状态s执行动作a能够在游戏结束时获得最好的评分”  它被称为Q函数,因为它表示给定状态中某个动作的“质量”。  
这听起来可能是一个令人困惑的定义。如果我们仅仅知道现在的状态和行动,而不是之后的行动和奖励,我们如何估计比赛结束时的状态?实时上我们肯定是不能的。但作为理论构造,我们假设存在这么一个函数,现在闭上你的眼睛,然后重复五次:“ Q(s,a)Q(s,a)...Q(s,a)存在,Q(s,a)存在,... ”怎么样,感受到了吗?(^_^) 
如果你仍任不相信,那么考虑一下这个函数的影响。假设你处于某个状态然后正在琢磨着下一步到底是走a还是b,然后你想选一个能在游戏结束后获得最高分的那一步。一旦你有了神奇的Q函数,答案就会变得很简单,就用最高的Q值来挑选动作! 
π(s)=argmaxaQ(s,a)π(s)=argmaxaQ(s,a)

这里的 ππ 代表一种策略,是我们在每一个状态选择动作的规则。 
很好,那么我们如何来获得这个Q函数呢?我们只需要关注一个转换 <s,a,r,s><s,a,r,s′> 。就像我们在上一节中提到的带折扣的未来奖励,我们可以把当前状态的Q值描述为包含下一个状态的Q值:
Q(s,a)=r+γmaxaQ(s,a)Q(s,a)=r+γmaxa′Q(s′,a′)

这被称作为 贝尔曼方程 。如果你考虑一下,会发现这是相当符合逻辑的,这个状态和行动的最大的未来的奖励是当前的直接奖励加上下一个状态的最大未来奖励。 
Q-Learning 的主要思想就是我们可以用贝尔曼方程迭代逼近Q函数。在最简单的情况下,Q函数实现为一个表,其中状态为行然后执行的动作为列。Q学习算法的要点与以下 [1] 一样简单:


initialize Q[num_states,num_actions] arbitrarily 
observe initial state s 
repeat 
  select and carry out an action aa 
   observe reward rr and new state ss′ 
   Q[s,a]=Q[s,a]+α(r+γmaxaQ[s,a]Q[s,a])Q[s,a]=Q[s,a]+α(r+γmaxa′Q[s′,a′]−Q[s,a]) 
   s=ss=s′ 
until


算法中的αα是一个学习率,它控制了以前的Q值和新提出的Q值的的差异有多少被考虑在内。特别的,当α=1α=1时,则两个Q[s,a]Q[s,a]取消,得到的更新方法和贝尔曼方程完全相同。 
我么用来更新Q[s,a]Q[s,a]的最大Q[s,a]Q[s′,a′]只是一个近似值,在学习的早期阶段可能是完全错误的,然而,随着每次迭代,近似值越来越准确,并且已经显示出如果这个值地到充分的更新,则QQ函数将收敛并表示真实的Q值。

Deep Q Network

Break out 游戏中的环境状态可以用滑板的位置,球的位置和方向以及每个砖的存在或不存在来定义。然而,这种直观的表示是针对具体的游戏,我们能否想出一些比较普遍的东西,来适合所有的游戏?一个明显的选择是屏幕的像素,它们隐含地包含除了球的速度和方向外的关于游戏情况的所有相关信息。连续两个屏幕也能覆盖这些信息。 
如果我们如DeepMind论文中所说的将这个处理用在游戏的屏幕中,取最后四个屏幕画面,将它们调整到84x84个像素尺寸并且每个像素为256个灰度等级。我们将会有25684x84x4106797025684x84x4≈1067970种可能的游戏状态。这意味着在图像Q表中有10679701067970行,这个数量超过了已知宇宙中的原子数!人们可能会认为,许多像素的组合(状态)永远不会发生,我们或许能将其表示为仅包含可访问状态构成的稀疏表。即使如此,大部分的状态依然很少访问并且要等到宇宙毁灭这个Q表才会收敛到一个理想的状态。理想状态下,我们也想让Q表对之前从来没有见过的状态有好的表现。 
那么是时候介绍深度学习了,神经网络能非常好地为高度结构化的数据提供良好的功能。我们能够用神经网络代表我们的Q函数,将状态(四个游戏画面)和动作作为输入,并输出相应的Q值。或者,我们只将游戏的画面作为输入并且为每个可能的动作输出Q值。这种方法的优点是,如果我们要执行Q值的更新或者根据最高的Q值选取相应的动作,我们只需要通过网络进行一次前向传递那么就可以立即获得所有可能动作的Q值。 
 
Left: 一般的深度Q网络Right: DeepMind论文中用的更优化的深度Q网络 
DeepMind用的网络的工艺如下所示: 
 
这是具有三个卷积层的经典卷积神经网络,其后是两个全连接层。熟悉物体识别网络的人可能会注意到没有池化层。但是,如果你真的考虑到这一点,池化层会导致你的转化的不平衡,网络变得对图像中对象的位置不敏感。对于像ImageNet这样的分类任务,池化是非常有意义的,但对于游戏而言,球的位置对于确定潜在的奖励至关重要,我们不希望丢弃这些信息!

网络输入是四个84×84灰度游戏画面。网络的输出是每个可能的动作的Q值(在Atari中为18)。Q值可以是任何实际值,这使得它成为一个回归任务,可以用简单的平方误差损失进行优化。 

L=12[r+maxaQ(s,a)targetQ(s,a)prediction]2L=12[r+maxa′Q(s′,a′)⏟target−Q(s,a)⏟prediction]2

给定转换 <s,a,r,s><s,a,r,s′> ,前一个算法中的Q表更新规则必须用以下替代: 
1. 对当前状态做一个合格的前馈来获取所有的动作预测的Q值。 
2. 为下一状态S’做一个前向传播,并计算最大网络输出 maxaQ(s,a)maxa′Q(s′,a′) 。 
3. 为行动设置目标Q值为 r+γmaxaQ(s,a)r+γmaxa′Q(s′,a′) (使用在步骤2中计算出的最大值)。对于所有其他操作,将目标Q值设置为与从步骤1返回的原始值相同,使这些输出的错误为0。 
4. 使用反向传播更新权重。

经验回放(Experience Replay)

现在我们有了在每个状态用Q-Learning去估计未来的奖励,并使用卷积神经网络去近似Q函数。但事实证明,使用非线性函数近似Q值不是非常稳定。实际上你必须用一整套的技巧来使它收敛。在单GPU上需要很长时间,差不多一个星期。

最重要的技巧是经验回放。在游戏过程中,所有的经验< s,a,r,s’ >存储在重放记忆体中。训练网络时,使用来自这些记忆的随机小批量数据而不是最近的转换。这打破了后续训练样本的相似性,否则可能会将网络推向局部最小化。经验回放也使训练任务更像普通的监督学习,简化了算法的调试和测试。实际上可以从人类游戏中收集所有这些经验,然后用这些经验训练网络。

勘探开发(Exploration-Exploitation)

Q学习尝试解决信用分配问题,它会及时传播奖励,直到达到所获奖励的实际原因的关键决定点。但是我们还没有碰到勘探开采困境呢?

首先观察,当Q表或Q网络被随机初始化时,其预测最初也是随机的。如果我们选择具有最高Q值的动作,则该动作将是随机的,并且Agent执行粗略的“勘探”。随着Q函数的收敛,它返回更一致的Q值,并且探索量减少。所以可以说,Q-learning将探索作为算法的一部分。但是这种探索是“贪心”的,它采纳它发现的第一个有效策略。

对于上述问题,一个简单而有效的解决方案是ε- greedy exploration, 带有概率ε去选择一个随机动作,否则用最高Q值的“贪心”动作去。在他们的系统中,DeepMind实际上将ε随时间从1减少到0.1,一开始,系统完全随机移动,最大限度地探索状态空间,然后稳定到固定的勘探率。

深度Q学习算法(Deep Q-learning Algorithm)

这为我们提供了经验重播的最终深层Q-学习算法:


initialize replay memory D 
initialize action-value function Q with random weights 
observe initial state s 
repeat 
  select an action aa 
      with probability εε select a random action 
      otherwise select a=argmaxaQ(s,a)a=argmaxa′Q(s,a′) 
   carry out action a 
   observe reward rr and new state ss′ 
   store experience <s,a,r,s><s,a,r,s′>in replay memory D 
   sample random transitions <ss,aa,rr,ss><ss,aa,rr,ss′>from replay memory D 
   calculate target for each minibatch transition 
      if ssss′is terminal state then tt=rrtt=rr 
      otherwise tt=rr+γmaxaQ(ss,aa)tt=rr+γmaxa′Q(ss′,aa′) 
   train the Q network using (ttQ(ss,aa))2(tt−Q(ss,aa))2as loss 
   s=ss=s′ 
until


实际上,DeepMind用了更多的技巧来使其工作,如目标网络(target network),错误剪辑(error clipping),奖励剪辑(reward clipping)等,但这些都不在此介绍范围之内。

这个算法最令人惊奇的部分是它可以学到任何东西。只要考虑一下,因为我们的Q函数是随机初始化的,所以它最初输出的完全是没价值的东西。而且我们正在使用这个东西(下一个状态的最大Q值)作为网络的目标,只会偶尔得到微小的回报。这听起来很疯狂,通过这种方式怎么可以学到任何有意义的东西?事实上,就是这么做的。

后记

自从首次推出以来,已经提出了深度Q-learning的许多改进,Double Q-learningPrioritized Experience Replay优先考量体验重播,Dueling Network Architecture决斗网络架构和extension to continuous action space连续动作空间的扩展等等。最新的进展,请查看近年的NIPS和ICLR等顶级会议。但请注意,这种深层次的Q-learning已获得Google专利

人们常说,人造智能是我们还没有想到的。一旦知道它是如何工作的,那么它看起来似乎并不聪明。但深层Q网络仍然让人惊叹不已。看着他们弄明白一个新游戏就像在野外观察一种动物,用它们自身去获得经验。

链接

[1]算法改编自 http://artint.info/html/ArtInt_265.html

<本文转述自https://www.nervanasys.com/demystifying-deep-reinforcement-learning/>

猜你喜欢

转载自blog.csdn.net/hellocsz/article/details/80780238
今日推荐