深度强化学习(Deep Reinforcement Learning)


简介

  • 强化学习,亦称再励学习,其关键因素环境(Environment),奖励(Reward),动作(Action),状态(State,Observation)构成了一个强化学习模型。
  • 强化学习任务过程通常用马尔可夫决策过程(MDP)来描述:机器处于环境$E$,状态空间为$X$,每个状态是机器能感知到环境的描述,若某个动作$a\in A$作用在当前状态$x$上,则潜在的转移函数$P$将使得环境从当前状态转移到另一种状态,到达另一个状态的同时,环境会根据潜在的“奖励”函数$R$反馈给机器一个奖励,最终获得一个最大的reward
  • 举例
    • 机器人把水杯打翻了,人类说不能这么做,那么机器人得到了一个负向反馈,机器人观察到水杯打翻的状态,采取了拖地的行为,获得了人类“谢谢”的正向反馈
    • 种瓜过程中,瓜苗的涨势,土壤情况都可以看做是状态空间的一部分,机器通过观察瓜苗的状态,采取浇水,除虫的动作,获得瓜苗涨势好的奖励,或者瓜苗枯萎的负向反馈,最终得到种出好瓜的最大奖励
    • 聊天机器人
    • 开直升机
    • 无人驾驶
    • 智能节电

Go:监督学习和强化学习

  • 监督学习
    • 跟着棋谱下,看到一种局式,就从经验中找到有关这个局式的下棋方法,但是Go只知道这种下法是经验中最好的,但并不意味着是整个局式中最好的,人类的棋谱也并不知道应对某种局式的最优方法,所以让机器人从人类棋谱中学习,只能说下的不错,并不能称之为下的最好
  • 强化学习
    • 机器和别人下棋,赢了就是正反馈,输了就是负反馈,但是人类很难和机器下成千上万次棋局,所以我们可以用监督学习的方法训练两个下的还不错的机器人,然后用RL的方法让他们互相下棋

RL的难点

  • 延时奖励(Reward Delay)
    • 有时采取一个动作可能短时间内没有任何的reward,而是在很长一段时间才可以得到reward
  • 机器人的动作会影响它所观察到的状态

RL算法

  • RL的方法分为两个部分
    • Policy-based:学习到一个Actor
    • Value-based:学习到一个Critic
    • 但是将Actor+Critic结合起来是很有效的做法

Learning an Actor

  • 机器学习的本质就是找到一个function,而RL要找的这个函数就是Actor/Policy=$\pi(Observation)$,输入就是看到的环境,输出就是作出相应的动作
  • 找到这个function有三个步骤(如果Actor是由一个NN构成的,那么我们就在做DRL)
    • 找到一个合适的Actor
    • 比如在玩小蜜蜂的游戏时,输入的就是当前游戏画面的pixels(NN不一定是简单的前馈神经网络,还会有卷积层),而Actor的输出为三个神经元,我们选的“得分”最高的输出作为Action
    • NN相对于搜索表(lookup table)的优点
      • 搜索表的做法是穷举每种游戏状况的可能,并给出对应状况的最优操作。类似看棋谱
    • 确定function的性能
      • Total reward:$R_\theta=\sum_{t=1}^T r_t$
      • 用相同的Actor去做同一个任务,可以获得不同的Reward
        • Actor本身是随机的,相同情况下(Observation)可能采取不同的Action
        • 任务本身也会有随机性
      • 因此我们最大化的目标值不是求$R_\theta$而是它的期望$\overline R_\theta $(衡量Actor($\pi_\theta(s)$)
    • 计算$\overline R_\theta $
      • 首先我们假设一轮游戏视作一个过程(trajectory)
        $\tau=\{s_1,a_1,r_1,s_2,a_2,r_2,\dots,s_T,a_T,r_T\}$
        $R(\tau)=\sum_{n=1}^N r_n$
      • 每个$\tau$都是可能出现的,这里我们用概率表示某个Actor下的$\tau$出现的概率
        $P(\tau|\theta)$
      • $\overline R_\theta=\sum\limits_\tau R(\tau)P(\tau|\theta)\approx \dfrac{1}{N}\sum_{n=1}^NR(\tau^n)$(因为$\tau$的值不会取无线次,所以取N)
    • 选择一个最好的function
      • 使用梯度上升(Gradient Ascent)来求一个$\theta$满足Reward最大
      • $\nabla\overline{R_\theta}=\sum\limits_\tau R(\tau)\nabla P(\tau|\theta)=\sum\limits_\tau R(\tau)P(\tau|\theta)\dfrac{\nabla P(\tau|\theta)}{P(\tau|\theta)}\quad R(\tau)$是常量
        因为$\dfrac{d\log(f(x))}{dx}=\dfrac{1}{f(x)}\dfrac{df(x)}{dx}$
        所以$\nabla\overline R_\theta=\sum\limits_\tau R(\tau)P(\tau|\theta)\nabla\log P(\tau|\theta)\approx\dfrac{1}{N}\sum_{n=1}^NR(\tau^n)\nabla\log P(\tau|\theta)$
      • $P(\tau|\theta)=p(s_1)p(a_1|s_1,\theta)p(r_1,s_2|s_1,\theta)p(a_2|s_2,\theta)\dots$
        $\quad \quad\quad\quad p(s_1)\prod\limits_{t=1}^{T}p(a_t|s_t,\theta)p(r_t,s_{t+1}|s_t,a_t)$
      • $\nabla\log P(\tau|\theta)=\sum\limits_{t=1}^{T}\nabla\log p(a_t|s_t,\theta)$
      • 最后我们得到$$\nabla\overline R_\theta\approx\dfrac{1}{N}\sum\limits_{n=1}^{N}\sum\limits_{t=1}^{T_n}R(\tau^n)\nabla\log(a^n_t|s^n_t,\theta)$
    • 再看下我们为什么要取$\log$也就是$\dfrac{\nabla f(x)}{f(x)}$呢?
      • 在这里除以一个分母的好处是,使得总Reward为正,但效果较小的那些频繁出现的action的更新效果变小(不这么做的话,参数更新会偏向出现几率更大的action,而不是偏向使中Reward更大的action)
      • 不过总Reward分数一直为正,理想状态下,参数更新依然会使那些使得总Reward降低的action采取概率下降(就是虽然在这个状态下采取某个action的概率更大,但是要考虑我们的最终目的是获得最大的Reward,所以那个action概率还是会下降)
    • 但实际情况中,由于我们采取的是sampling,可能在过程中从未sampling过某个可选的action,导致对应的action概率降低(Add a Baseline)
      • 一个简单的解决上述sampling的方法就是:令总Reward有负有正,当所有$\tau$对应的总Reward都为正时,我们让她减去某个正直(baseline),使得Reward有证有负,防止某个action没被sampling到

Learning an Critic

  • Critic也是训练出的一个NN,但是它不会对Actor的行为进行决策,它只负责评估Actor表现如何