强化学习笔记1:强化学习概述

Posted 刘文巾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强化学习笔记1:强化学习概述相关的知识,希望对你有一定的参考价值。

1 agent和environment

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

        上图由两部分组成:agent 和 environment。

        在强化学习过程中,agent 跟 environment 一直在交互。

        agent 在environment里面获取到状态,agent 会利用这个状态输出一个动作(action),或者我们称之为一个决策。

        然后这个决策会放到environment之中去,environment会根据 agent 采取的决策,输出下一个状态以及当前的这个决策得到的奖励。

        agent 的目的就是为了尽可能多地从环境中获取奖励。

2 强化学习 VS 监督学习

2.1 监督学习:

         以图片分类为例,监督学习(supervised learning)就是说我们有一大堆标注的数据,比如车、飞机、凳子这些标注的图片。我们要训练一个分类器,分辨照片的类型。

        训练过程中,我们把真实的标签给了这个网络。当这个网络做出一个错误的预测,比如现在输入了汽车的图片,它预测出来是飞机。我们就会直接告诉它,你这个预测是错误的,正确的标签应该是车。

        然后我们把这个错误写成一个损失函数(loss function),通过反向传播(Backpropagation)来训练这个网络。

        也就是说,在监督学习中,我们需要告诉学习器(learner)正确的标签是什么,这样它才可以通过正确的标签来修正自己的预测。

2.2 强化学习

        以Atari Breakout 游戏为例,这是一个打砖块的游戏,控制木板左右移动把球反弹到上面来消除砖块。

        在游戏过程中,agent 得到的观测数据是相关联的时间序列数据,上一帧和下一帧之间其实有非常强的连续性。

        另外一点是,在玩游戏的过程中,并没有立刻获得反馈,没有告诉你哪个动作是正确动作。比如你现在把这个木板往右移,那么只会使得这个球往上或者往左上去一点,并不会得到立刻的反馈。

        所以强化学习这么困难的原因是没有得到很好的很及时的反馈,然后你依然希望 agent 在这个environment里面学习。

        比如现在是在第三步,你把这个序列放进去,你希望这个网络可以输出一个决策,在当前的这个状态应该输出往右移或者往左移。

        这里有个问题:我们没有标签来说明你现在这个动作是正确还是错误,必须等到游戏结束才可能说明。现在这个动作到底对最后游戏结束能赢是否有帮助,其实是不清楚的。这里就面临延迟奖励(Delayed Reward),所以就使得训练这个网络非常困难。

  • Agent 获得自己能力的过程中,其实是通过不断地试错探索(trial-and-error exploration)。
    • 探索(exploration)和利用(exploitation)是强化学习里面非常核心的一个问题。
    • 探索:你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。
    • 利用:采取你已知的可以获得最大奖励的行为,你就重复执行这个动作就可以了,因为你已经知道可以获得一定的奖励。
    • 因此,我们需要在探索和利用之间取得一个权衡,这也是在监督学习里面没有的情况。 

        在强化学习过程中,没有非常强的监督者(supervisor),只有一个奖励信号(reward signal),并且这个奖励信号是延迟的,就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。

        Agent 在这个强化学习里面学习的话就非常困难,因为你没有得到即时反馈。

        当你采取一个行为过后,如果是监督学习,你就立刻可以获得一个指引,就说你现在做出了一个错误的决定,那么正确的决定应该是谁。模型可以及时通过损失函数调整参数。

        而在强化学习里面,环境可能会告诉你这个行为是错误的,但是它并没有告诉你正确的行为是什么。而且更困难的是,它可能是在一两分钟过后告诉你错误,它再告诉你之前的行为到底行不行。所以这也是强化学习和监督学习不同的地方。

3 强化学习的特征

通过跟监督学习比较,我们可以总结出强化学习的一些特征。

  • 强化学习有这个 试错探索(trial-and-error exploration),它需要通过探索环境来获取对环境的理解。
  • 强化学习 agent 会从环境里面获得延迟的奖励。
  • 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有时间关联的(sequential data)时序数据。
  • Agent 的行为会影响它随后得到的数据,这一点是非常重要的。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 去跟环境交互来得到数据。所以如果在训练过程中,这个 agent 的模型很快死掉了,那会使得我们采集到的数据是非常糟糕的,这样整个训练过程就失败了。所以在强化学习里面一个非常重要的问题就是怎么让这个 agent 的行为一直稳定地提升。

4 为什么关注强化学习?

为什么我们关注强化学习,其中非常重要的一点就是强化学习得到的模型可以有超人类的表现。

  • 监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet 的图片都是人类标注的。那么我们就可以确定这个算法的上限(upper bound)就是人类的表现,人类的这个标注结果决定了它永远不可能超越人类。
  • 但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。

 5 强化学习举例:Pong

        上图是强化学习的一个经典例子,就是雅达利的一个叫 Pong 的游戏。这个游戏就是把这个球拍到左边,然后左边这个选手需要把这个球拍到右边。

在这个 pong 的游戏里面,决策其实就是两个动作:往上或者往下。如果强化学习是通过学习一个 policy network 来分类的话,其实就是输入当前帧的图片,policy network 就会输出所有决策的可能性。

对于监督学习,我们可以直接告诉 agent 正确的标签是什么(这一步应该是向上还是向下,这样就可以用CrossEntropy来表示其损失函数,然后进行误差反向传播了)。但在这种游戏情况下面,我们并不知道它的正确的标签是什么。

 

 在强化学习里面,我们是通过让它尝试去玩这个游戏,然后直到游戏结束过后,再去说你前面的一系列动作到底是正确还是错误。

 

  • 上图的过程是 rollout 的一个过程。Rollout 的意思是从当前帧去生成很多局的游戏。

  • 当前的 agent 去跟环境交互,你就会得到一堆观测。你可以把每一个观测看成一个轨迹(trajectory)。轨迹就是当前帧以及它采取的策略,即状态和动作的一个序列:

                 ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

  • 最后结束过后,你会知道你到底有没有把这个球击到对方区域,对方有没有接住,你是赢了还是输了。

  • 我们可以通过观测序列以及最终奖励(eventual reward)来训练这个 agent ,使它尽可能地采取可以获得这个最终奖励的动作。

  • 一场游戏叫做一个 episode(回合) 或者 trial(试验)

 6 用CV 类比深度强化学习 deep reinforcement learning

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

这里做一个类比,把它类比于这个传统的计算机视觉以及深度计算机视觉。

  • 传统的计算机视觉由两个过程组成。
    • 给定一张图,我们先要提取它的特征,用一些设计好的特征(feature),比如说 HOG、DPM。
    • 提取这些特征后,我们再单独训练一个分类器。这个分类器可以是 SVM、Boosting,然后就可以辨别这张图片是狗还是猫。
  • 2012 年过后,我们有了卷积神经网络CNN,大家就把特征提取以及分类两者合到一块儿去了,就是训练一个神经网络。这个神经网络既可以做特征提取,也可以做分类。它可以实现这种端到端的训练,它里面的参数可以在每一个阶段都得到极大的优化,这样就得到了一个非常重要的突破。

我们可以把神经网络放到强化学习里面。

  • Standard RL:之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。
  • Deep RL:现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个端到端训练(end-to-end training)的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合我们这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。

 参考文献 第一章 强化学习概述 (datawhalechina.github.io)

以上是关于强化学习笔记1:强化学习概述的主要内容,如果未能解决你的问题,请参考以下文章

深度强化学习的组合优化[1] 综述阅读笔记

深度强化学习的组合优化[1] 综述阅读笔记

强化学习⚠️手把手带你走进强化学习 1⚠️ 强化学习简介

强化学习⚠️手把手带你走进强化学习 1⚠️ 强化学习简介

强化学习笔记:强化学习的约束

强化学习:概述