强化学习蘑菇书Easy RL第一章

强化学习第一章(蘑菇书)

强化学习的概念

之前也学过一点,但是不够系统,想利用这一次机会好好把一些概念理顺清楚。
第一部分肯定是强化学习的概念问题。强化学习(reinforcement learning,RL)讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。
主要的一个问题就是,在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励
强化学习蘑菇书Easy RL第一章_第1张图片

强化学习与监督学习的区别

通过学习后,归纳了几点,简单地打了一个表格来概括一下子。

监督学习 强化学习
输入的样本是独立同分布的 输入的是序列数据
会告诉learner什么是正确的标签 learner需要自己去发现哪些动作可以带来最多的reward
没有trial-and-error exploration的过程 智能体需要试错探索来获得能力
有supervisor 没有非常强的监督者(supervisor),只有奖励信号(reward signal)

除了这些,还想要强调的是,在RL中,智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习里面一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。

强化学习的几个应用

(1)DeepMind 研发的走路的智能体

(2)机械臂抓取

(3)OpenAI 的机械臂翻魔方

(4)穿衣服的智能体

好多其实现在与OR(运筹优化)结合越来越紧密了,尤其是深度强化学习,现在越来越嵌入到运筹优化领域了,之前读到的一些文献也有涉及。具体的应用大家可以自行百度,我这里就不展开了哈哈哈。

关于序列决策

在一个强化学习环境里面,智能体的目的就是选取一系列的动作来最大化奖励,所以这些选取的动作 必须有长期的影响。但在这个过程里面,智能体的奖励其实是被延迟了的,就是我们现在选取的某一步动作,可能要等到很久后才知道这一步到底产生了什么样的影响。如图 1.13 所示,在玩雅达利的 Pong 游戏时,我们可能只有到最后游戏结束时,才知道球到底有没有被击打过去。过程中我们采取的上升(up)或 下降(down)动作,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的权衡 (trade-off),研究怎么让智能体取得更多的远期奖励。

在与环境的交互过程中,智能体会获得很多观测。针对每一个观测,智能体会采取一个动作,也会得到一个奖励。所以历史是观测、动作、奖励的序列:

H t = o 1 , r 1 , a 1 , … , o t , a t , r t H_{t}=o_{1}, r_{1}, a_{1}, \ldots, o_{t}, a_{t}, r_{t} Ht=o1,r1,a1,,ot,at,rt

智能体在采取当前动作的时候会依赖于它之前得到的历史,所以我们可以把整个游戏的状态看成关于这个历史的函数:

S t = f ( H t ) S_{t}=f\left(H_{t}\right) St=f(Ht)

强化学习蘑菇书Easy RL第一章_第2张图片

强化学习智能体的组成成分和类型

这一部分感觉还是很有必要记一下的。
对于一个强化学习智能体,它可能有一个或多个如下的组成成分。

  • Policy:智能体会用策略来选取下一步的动作。这里我们把它们分成随机性策略和确定性策略。随机性策略就是π函数,输入一个状态,相应地,输出一个概率。确定性策略就是智能体直接采取最有可能的动作。
  • Value function:我们用价值函数来对当前状态进行评估。价值函数用于评估智能体进 入某个状态后,可以对后面的奖励带来多大的影响。价值函数值越大,说明智能体进入这个状态越有利。
    常见的两种价值函数:

V π ( s ) ≐ E π [ G t ∣ s t = s ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s ] , 对于所有的  s ∈ S V_{\pi}(s) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s\right] \text {, 对于所有的 } s \in S Vπ(s)Eπ[Gtst=s]=Eπ[k=0γkrt+k+1st=s]对于所有的 sS

Q π ( s , a ) ≐ E π [ G t ∣ s t = s , a t = a ] = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s , a t = a ] Q_{\pi}(s, a) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s, a_{t}=a\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s, a_{t}=a\right] Qπ(s,a)Eπ[Gtst=s,at=a]=Eπ[k=0γkrt+k+1st=s,at=a]

  • Model:模型表示智能体对环境的状态进行理解,它决定了环境中世界的运行方式。 模型决定了下一步的状态。下一步的状态取决于当前的状态以及当前采取的动作。它由状态转移概率和奖励函数两个部分组成。

p s s ′ a = p ( s t + 1 = s ′ ∣ s t = s , a t = a ) p_{s s^{\prime}}^{a}=p\left(s_{t+1}=s^{\prime} \mid s_{t}=s, a_{t}=a\right) pssa=p(st+1=sst=s,at=a) , R ( s , a ) = E [ r t + 1 ∣ s t = s , a t = a ] R(s, a)=\mathbb{E}\left[r_{t+1} \mid s_{t}=s, a_{t}=a\right] R(s,a)=E[rt+1st=s,at=a]

当我们有了策略、价值函数和模型3个组成部分后,就形成了一个马尔可夫决策过程(Markov decision process)。

强化学习蘑菇书Easy RL第一章_第3张图片
然后再来说一下强化学习智能体的类型,常用的就两种分类的方式:

  1. 基于价值的智能体vs基于策略的智能体
    基于价值的强化学习算法有Q学习(Q-learning)、 Sarsa 等(大概在后面几章会学到)。而基于策略的强化学习算法有策略梯度(Policy Gradient,PG)算法等。此外,演员-评论员算法同时使用策略和价值评估来做出决策。其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
  2. 有模型强化学习智能体vs无模型强化学习智能体
    这个分类的形式呢,就看是否有学习状态的转移来采取action。有模型(model-based)强化学习智能体通过学习状态的转移来采取动作。 免模型(model-free)强化学习智能体没有去直接估计状态的转移,也没有得到环境的具体转移变量,它通过学习价值函数和策略函数进行决策。免模型强化学习智能体的模型里面没有环境转移的模型。

强化学习的gym实验

中间还有很多Q&A,这地方就不赘述了。直接进入到我们的代码环节。强化学习还可以通过pytorch,TensorFlow来实战。
安装好gym库以后,就可以实验了。

import gym #导入gym包
env = gym.make('CartPole-v0') #构建试验环境

结果如下图所示,但是只会显示几秒就会自动消失。这是因为我们还没开始训练机器人。
强化学习蘑菇书Easy RL第一章_第4张图片
CartPole-v0 环境有两个动作:将小车向左移动和将小车向右移动。我们还可以得到观测:小车当前的位置,小车当前往左、往右移的速度,杆的角度以及杆的最高点(顶端)的速度。 观测越详细,我们就可以更好地描述当前所有的状态。这里有奖励的定义,如果能多走一步,我们就会得到一个奖励(奖励值为1),所以我们需要存活尽可能多的时间来得到更多的奖励。当杆的角度大于某一个角度(没能保持平衡),或者小车的中心到达图形界面窗口的边缘,或者累积步数大于200,游戏就结束了,我们就输了。所以智能体的目的是控制杆,让它尽可能地保持平衡以及尽可能保持在环境的中央

import gym  
env = gym.make('CartPole-v0')  
env.reset()  #重置
for _ in range(1000):
    env.render()  
    action = env.action_space.sample() 
    observation, reward, done, info = env.step(action) #env.step方法有四个返回值,观测,奖励,完成和信息
    print(observation)
env.close() 

这一部分的输出很长,是一个四维的观测,从S->A->R->S’
强化学习蘑菇书Easy RL第一章_第5张图片
Reference:
【1】https://datawhalechina.github.io/easy-rl/#/chapter1/chapter1
【2】https://zhuanlan.zhihu.com/reinforce

你可能感兴趣的:(强化学习,人工智能)