0. 前言

不得不说Github确实是一个社交网站,我在这个上面follow了其他人以后,就可以看到其他人最近的动向。这不,我在GitHub上follow了一个大三的学长,发现他正在搞这个,所以我也萌生了搞强化学习的主意。

经过一比对,我发现他的代码都是借(chao)鉴(xi)Morvan Zhou的。然而现在,2020年为止,Morvan Zhou的强化学习是使用tensorflow框架实现的,并没有对应pytorch的实现(讽刺的是,Morvan Zhou Github上star最多的反而是他pytorch的教程)。笔者此时并不会tensorflow,所以决定找其它的教程。

最后我找到了一个star3600+(截止2020年2月初)的repo,虽然他也使用tensorflow实现的(那没办法,目前能找到的pytorch强化学习教程很少),但是他的思路非常清晰。我就跟着这个教程用pytorch重新写了一遍这些算法。不过pytorch近年来越来越火热,AI搞得最火热的Stanford University近年来的深度学习框架也由tensorflow转变到了pytorch,相信以后高质量的pytorch强化学习教程会越来越多。所以本专栏并不是一个面向新手的教程,只不过是一个关于强化学习知识点的总结。

想要强化学习入门,我个人的建议是:台大李宏毅****(没必要贴链接,这种东西每年都会有新的资源)-> Morvan Zhou强化学习tensorflow implementation(实在找不到好的pytorch教程了。。tensorflow凑合着看吧)-> 理论知识的学习,这里推荐Sutton的经典书籍

 

1. 强化学习基本要素

  1. state:又被称作是obersavation,我个人认为叫obersavation更为准确,因为它是我们agent对于environment的观测。举几个例子,比如在windy-world中它是agent所在位置的坐标,在cart-pole中,它是cart-pole的速度,位置,角度等信息。
  2. action: 这个就是agent所作出的动作。注意对于同一个state, 你做出相同的action,并不一定会跳转到下一个相同的state. RL中,我们有专门的数学概念来阐述这个问题,叫做状态转化模型P。他衡量了“给定状态和动作,跳转到某个状态的概率”。这就可以证明我们之前的言论。
  3. reward:强化学习最关键的就是这个reward,我们强化学习的目的就是最大化我们trajactory中的accumulated reward。这个reward其实是你自己设定的。比如在space invader游戏里面,我们的action有左右移动和射击三个。只有我们击败了敌人,才能获得分数。因此我们可以给射击设置reward为1,左右移动设为0。
  4. policy: policy就是所谓的策略,他与我们的问题也是息息相关的,一般而言,我们程序的目的是最大化accumlated reward, 输出则是policy。同一个状态采用不同的动作,得到的reward也不同。既然我们的目的是最大化accumulated reward,那么我们就要有一个策略来指导我们:到了某一状态时,应该采用什么样的动作,这个就是我们的policy。

 

2. 强化学习最简单的流程

【RL】前言和强化学习基本概念

在了解强化学习基本概念之后,我们再了解一下强化学习的流程:

  1.  先初始化observation。
  2.  根据policy选择action, 即给定state, 输出action。
  3.  用这个action与environment interact, 得到下一个state和reward(这一步主要基于你的状态转移模型)。
  4.  判断是否结束,不然返回2.

这只不过是一个episode的流程,实际上,为了得到正确的决策,上面的流程必须要做多次才行,而且我也没有往里面添加更新策略的步骤。这个在后面的篇章里将会提到。

 

3. 强化学习在机器学习中的地位

【RL】前言和强化学习基本概念

其实强化学习和监督和无监督学习完全是三码不同的事情。如果你硬要说和那个像一点,我觉得他到更像是监督学习。

虽然强化学习没有显示地给出label,但是他是通过reward学习的,通过reward来改变它的决策。所以强化学习并非无监督学习

那强化学习和监督学习差别是什么呢?以下棋为例,监督学习是让人教他怎么下:比如遇到了某一个状况,那就让人告诉他下哪儿好。强化学习则是让机器自己学习,通过下棋的胜负给定reward,在极大化reward的时候,增强自己的能力。

很显然,我们用监督学习,只能训练出会下棋的AI,然而我们用强化学习,却能训练出能痛扁人类的AI

一般而言,我们在实际工程的时候,都是先用监督学习训练一个会下棋的AI,然后再让他自己和自己打,以此提高能力

下图是强化学习在机器学习中的地位,从这幅图中我们也能看出强化学习和监督和无监督学习是两码事情。

【RL】前言和强化学习基本概念

 

4. 马尔可夫决策过程MDP

让我们稍微把目光从强化学习上移开,看看其它重要的东西。

马尔可夫假设是属于我们马尔可夫决策过程的概念。它的出现主要是为了简化我们的建模

其基本思想是:当前状态只由其上一个状态所决定,而不是由所有出现过的历史状态决定的

这样我们的一些概念就可以用更简单的数学公式来表达了:

  1.  原来与历史状态相关的状态转移模型只与当前状态有关了。【RL】前言和强化学习基本概念
  2.  在描述策略的时候,我们也不用考虑历史的状态了。【RL】前言和强化学习基本概念
  3.  在考虑状态和动作价值的时候,也不用考虑历史的状态了。(后面的篇章会提到)

 

5. 强化学习怎么做

(1) Accumulated reward表达式

之前我们已经讲了,我们强化学习的目的就是最大化accumlated reward。那么我们应该怎么做呢?最简单的想法就是把reward全部加起来, 然后想方设法把它最大化:【RL】前言和强化学习基本概念

这个想法很简单,但是并不靠谱,我们对其稍作休整,考虑一下观点:

  1.  当前状态,对越是遥远未来的状态,影响越小,因此,我们再考虑其导致未来状态的reward的时候,就要加上一个discount factor。
  2.  考虑之前MDP的假设,我们当前状态的G,不应该受之前状态的影响。

所以我们的G就变成了:【RL】前言和强化学习基本概念

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

(2) 状态价值函数和动作价值函数和策略

好了,我们的表达式已经列出来了,注意我们的目的是调整状态和动作来最大化这个G,因此我们要引入两个新的概念,那就是状态价值和动作价值

  1. 状态价值用来衡量,当前状态,后续执行策略【RL】前言和强化学习基本概念, 会得到多少价值。【RL】前言和强化学习基本概念

  2. 而动作价值则用来衡量,当前状态,执行某个动作,后续再执行策略【RL】前言和强化学习基本概念, 会得到多少价值。【RL】前言和强化学习基本概念

之前已经提到过,由于策略的随机性和环境的随机性。后续的状态的价值其实是一个random variable。因此,不管是我们的状态价值函数还是我们的动作价值函数,我们使用的都是期望

因为我们要输出的是策略,所以我们要把这策略和这两个函数联系起来

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

(3) 寻找最优解

首先定义我们的最优解:

对于所有的状态和动作,都有:

【RL】前言和强化学习基本概念

这时候,策略为

【RL】前言和强化学习基本概念

我们的目的就是找到或者逼近这个策略,具体怎么做,看我接下来的博文。强化学习方法有很多种分类,下图只是其中一种:

【RL】前言和强化学习基本概念


 

相关文章: