一、强化学习基础

强化学习基础

前言:本文是对DataWhale 第18期组队学习《深度强化学习》的笔记,学习内容参考大佬们整理的学习pdf文件,对文件中不明白的地方作了注解,不好理解的地方做了举例。

概念

强化学习讨论的问题是一个 智能体 agent 怎么在一个复杂不确定的环境 environment 里面去极大化它能获得的 奖励

学习过程主要体现在agent 和environment的交互中。在强化学习过程中,agent 跟 environment 一直在交互。Agent 在环境里面获取到状态,agent 会利用这个状态输出一个 action(一个决策)。然后这个决策会放到环境之中去,环境会通过这个 agent 采取的决策,输出下一个状态以及采取当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。


与监督学习对比

举个图片分类的例子,监督学习就是说我们有一大堆标定的数据,比如车、飞机、凳子这些标定的图片,这些图片都要满足 i.i.d 分布(独立同分布),就是它们之间是没有关联的一个分布。然后我们训练一个分类器,比如说右边这个神经网络。为了分辨出这个图片是车辆还是飞机,训练过程中,我们把真实的 label 给了这个网络。当这个网络做出一个错误的预测,比如现在输入了这个汽车的图片,它预测出来是飞机。我们就会直接告诉它,你这个预测是错误的,正确的 label 应该是车。然后我们把这个错误写成一个 损失函数(loss function) ,通过 反向传播来训练这个网络。所以在监督学习过程中,有两个假设,

  1. 输入的数据,标定的数据,它都是 没有关联 的,尽可能没有关联。因为如果有关联的话,这个网络是不好学习的。

  2. 我们告诉这个 网络正确的 标签 label 是什么,这样它可以通过正确的标签来修正自己的这个预测。

但是很明显强化学习不满足这两点,在agent与environment交互的过程中,agent得到的数据往往是具有前后相关性的,而且相关性还很强。除此之外,agent得到反馈(这里类比监督学习中得到label)往往是需要经过好多slot,也就是说每一个slot得到的奖励并不能直接告诉我这样做是对还是错。这就是一个 延迟奖励 Delay Reward 的问题,这也使训练网络十分困难。


Exploration(探索) 和 exploitation(剥削)

这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错(trial-and-error exploration)。Exploration(探索)exploitation(剥削) 是强化学习里面非常核心的一个问题。

  • Exploration 是说你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。

  • Exploitation 说的是你就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个 action 就可以了,因为你已经知道可以获得一定的奖励。

    因此,我们需要在 exploration 和 exploitation 之间取得一个权衡,这也是在监督学习里面没有的情况。


强化学习实例

  1. 国际象棋是一个强化学习的过程,因为这个棋手就是在做出一个选择来跟对方对战。

  2. 在自然界中,羚羊其实也是在做一个强化学习,它刚刚出生的时候,可能都不知道怎么站立,然后它通过 trial- and-error 的一个尝试,三十分钟过后,它就可以跑到每小时 36 公里,很快地适应了这个环境。

  3. 你也可以把股票交易看成一个强化学习的问题,就怎么去买卖来使你的收益极大化。

  4. 玩雅达利游戏或者一些电脑游戏,也是一个强化学习的过程。


DRL=DL+RL

强化学习是有一定的历史的,只是最近大家把强化学习跟深度学习结合起来,就形成了 深度强化学习(Deep Reinforcemet Learning)

  1. 之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。

  2. 现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个 end-to-end training 的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出 action。那么就可以用一个神经网络来拟合我们这里的 value functionpolicy network,省去 了 feature engineering 的过程。


序列决策

交互过程

再来回顾一下agent与environment交互的过程:

agent 把它输出的动作给环境,环境取得这个动作过后,会进行到下一步,然后会把下一步的观测跟它上一步是否得到奖励返还给 agent。通过这样的交互过程会产生很多观测,agent 就是为了从这些观测之中学到能极大化奖励的策略。


Reward

奖励是由环境给的一个反馈信号,这个信号指定了这个 agent 在某一步采取了某个策略是否得到奖励。强化学习的目的就是为了极大化 agent 可以获得的奖励,agent在这个环境里面存在的目的就是为了极大它的期望积累的奖励。

这里举一些奖励的例子。不同的环境,奖励也是不同的。

  1. 比如说一个下象棋的选手,它的目的其实就为了赢棋。奖励是说在最后棋局结束的时候,他知道会得到一个正奖励或者负奖励。

  2. 羚羊站立也是一个强化学习过程,它得到的奖励就是它是否可以最后跟它妈妈一块离开或者它被吃掉。

  3. 在股票管理里面,奖励定义由你的股票获取的收益跟损失决定。

  4. 在玩雅达利游戏的时候,奖励就是你有没有在增加游戏的分数,奖励本身的稀疏程度决定了这个游戏的难度。


序列决策

在跟环境的交互过程中,agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。所以历史(History)是观测(Observation)行为(Action)奖励(Reward)的序列:

H = {O, A, R}

Agent 在采取当前动作的时候会依赖于它之前得到的这个历史,所以你可以把整个游戏的**状态(State)**看成关于这个历史的函数:

S = f(H)

小白很容易分不清Observation和State,这二者是有区别的:

  • 状态(state) 是对世界的完整描述,不会隐藏世界的信息。
  • 观测(observation) 是对状态的部分描述,可能会遗漏一些信息。

区分状态与观测其实是分主体的,通常我们认为状态中包含environment的全部信息,但是agent在每次与environment的交互中往往不能观测到全部信息。举个例子,现在场景是机械臂抓取物体,agent就是机械臂,environment就是物体以及周边环境,很显然,agent获得信息的途径是摄像头,这里的算法再强大也不能获取摄像头覆盖范围之外的图像信息,只能获得环境得局部图像。因此,agent每次只能得到观测值(也就是observation的主体是agent),environment的全部信息包含在state中。

上面这种情况,称为环境是部分可观测的(partially observed),与之对应的还有完全可观测的(fully observed) 环境(可以理解为上帝视角,agent能获得environment的全部信息),但是实际生活中大部分场景都是部分可观测。


马尔科夫决策过程

部分可观测马尔可夫决策过程(Partially Observable Markov Decision Processes, POMDP) 是一个马尔可夫决策过程的泛化。POMDP 依然具有马尔可夫性质,但是假设智能体无法感知环境的状态 ,只能知道部分观测值 。比如在自动驾驶中,智能体只能感知传感器采集的有限的环境信息。

POMDP 可以用一个 7 元组描述:

(S, A, T, R, Ω, O, γ)

其中 S表示状态空间,为隐变量, A为动作空间, T为状态转移概率, R为奖励函数,Ω为观测概率, O为观测空间, γ为折扣系数。


动作空间

不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为 动作空间(action space)

离散动作空间(discrete action spaces) ,在这个动作空间里,agent 的动作数量是有限的。

连续动作空间(continuous action spaces) 。在连续空间中,动作是实值的向量。

区分动作空间的连续与离散对具体问题需要具体分析,这可能会影响到算法的选择。


Agent的组成

对于一个强化学习 agent,它有如下组成成分:

  1. 首先 agent 有一个 policy function ,agent 会用这个函数来选取下一步的动作。

  2. 然后它也可能生成一个 价值函数(value function) 。我们用价值函数来对当前状态进行估价,它就是说你进现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。

  3. 另外一个组成成分是 模型(model) 。模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。

Policy function

Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy:

  1. 一种是 stochastic policy(随机性策略) ,它就是π函数
    π ( a ∣ s ) = P [ A   t   = a ∣ S   t   = s ] π(a|s)=P[A~t~=a|S~t~=s] π(as)=P[A t =aS t =s]
    当你输入一个状态 s 的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过概率采样就可以得到一个 action。

  2. 一种是 deterministic policy(确定性策略) ,就是说你这里有可能只是采取它的极大化,采取最有可能的动作。你现在这个概率就是事先决定好的。

Value function

在这里插入图片描述

价值函数是一个折扣的未来奖励的加和,就是你通过进行某一种行为,然后你未来得到多大的奖励。

价值函数里面有一个 discount factor,就是上文马尔科夫七元组中的γ。如果γ=1,就说明对于我这样的价值函数,当前slot得到的奖励与过去slot得到的奖励 具有相同的地位。举个例子,我们每学年(一学年假设是两个学期)评奖学金,是根据你过去一个学期的学习成绩来看呢,还是要追溯到你从幼儿园开始直到上个学期的学习成绩呢。很明显,都不合适,那么我就把本学年的两学期的折扣因子都设为1,再往前的折扣因子都设为0,这样就比较合理了。

这里有一个 期望,这里有个小角标是 π函数,这个 π函数就是说在我们已知某一个 policy function 的时候,到底可以得到多少的奖励。

对于这个奖励函数,我们另外还有一个 Q 函数。Q 函数里面包含两个变量:状态和动作。所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法在学习的一个函数。因为当我们得到这个 Q 函数的过后,进入某一种状态,它最优的行为其实就可以通过这个 Q 函数来得到。


Model

模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。它由两个部分组成,一个是probability,它这个转移状态之间是怎么转移的。另外是这个奖励函数,当你在当前状态采取了某一个行为,可以得到多大的奖励。


当我们有了Policy function、Value function和Model过后,就形成了一个 Markov Decision Process 。这个决策过程可视化了状态之间的转移以及采取的行为。

基于不同函数的agent

根据强化学习 agent 的不同,我们可以把 agent 进行归类。

  1. 基于价值函数的 agent。这一类 agent 显式地学习的是价值函数隐式地学习了它的策略。因为这个策略是从我们学到的价值函数里面推算出来的。

  2. 基于策略的 agent,它直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。

  3. 另外还有一种 agent 是把这两者结合,把 value-based 和 policy-based 结合起来就有了 Actor-Critic agent 。这一类 agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。

举一个走迷宫的例子

要求 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 agent 所在的位置来描述。

在这里插入图片描述

如果我们采取的是 Policy-based RL ,当我们学习好了这个环境过后,在每一个状态,我们就会得到一个最佳的行为。比如说现在在第一格开始的时候,我们知道它最佳行为是往右走,然后第二格的时候,得到的最佳策略是往上走,第三格是往右走。通过这个最佳的策略,我们就可以最快地到达终点

在这里插入图片描述

如果换成 value-based RL 这个算法,利用价值函数来作为导向,我们就会得到另外一种表征。这里就表征了你每一个状态会返回一个价值,比如说你在 start 位置的时候,价值是 -16,因为你最快可以 16 步到达终点。因为每走一步会减一,所以你这里的价值是 -16。当我们快接近最后终点的时候,这个数字变得越来越大。在拐角的时候,比如要现在在第二格 -15。然后 agent 会看上下,它看到上面值变大了,变成 -14 了,它下面是 -16,那么这个 agent 肯定就会采取一个往上走的策略。所以通过这个学习的值的不同,我们可以抽取出现在最佳的策略

在这里插入图片描述

基于策略迭代 的强化学习方法中,智能体会 制定一套动作策略 (确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。

而在 基于价值迭代 的强化学习方法中,智能体不需要制定显式的策略,它 维护一个价值表格或价值函数 ,并通过这个价值表格或价值函数来选取价值最大的动作。

基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。

基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等,而基于策略迭代的强化学习算法有策略梯度算法等。此外, Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。

Model-free与Model-based

我们是可以通过 agent 到底有没有学习这个环境模型来分类。

  1. 第一种是 model-based(有模型) RL agent,它通过学习这个状态的转移来采取措施。

  2. 另外一种是 model-free(免模型) RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习 value function 和 policy function进行决策。这种 model-free 的模型里面没有一个环境转移的一个模型。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页