强化学习近几年成为了研究的热门,AlphaGo的故事家喻户晓。作为一个准研究生,抱着极大的好奇心来学习这门理论,虽然网上已经有了许多参考资料,但知识还不是自己的。希望写这样一个系列的博客,能够在对这个领域有一些浅显的认识。所有文章的角度都会从一个小白出发,希望能给大家提供一些帮助。如有错误,请各位积极帮助指正。
  本系列的参考书籍为《Easy RL》,获取原文可点此处。提取码2022。所以整系列博客的布局都是按照该书章节完成的。另外之前总有人倾力推荐李宏毅老师的强化学习课程,这个在B站上能够找到资源。但经过我亲身感受来看,如果你只知道强化学习这四个字儿,最好还是先不要去看,其中涉及到很多前续课程,直接听很容易懵的。
  强化学习毕竟是一个理论课,其中不可避免的会涉及到一些数学知识。这对我来说也很苦恼,但要想学明白还是要努力克服。好了,让我们开始进入正题吧!
  作为引言,本文希望能够讲清楚如下几个问题?
    1.什么是强化学习?
    2.强化学习中一些关键的基础概念
    3.强化学习的组成结构

 1.什么是强化学习?

要想介绍强化学习,就不得不说一下下面这个图:

 先不考虑强化学习,回想一下人本身是如何成长的。当我们学习东西时,最开始是不知道哪种行为是正确的。一般就是每一个都试试,如果哪个受到了肯定(可能有多种行为受到肯定,但大小是不同)我们在下次面临同样的情况时就会有倾向去做这个动作,久而久之我们对于这种情况的处理的就越来越好。
  把上面的例子和上上面的图对应起来,人就是智能体,东西是从环境中获取的。智能体最开始会有一种状态(好比人啥也不会),在状态下可以执行多种动作,执行完每次动作后就能够得到这次动作的反馈(就是指图里的奖励)。得到奖励后,智能体又会进入一个新的状态(比如人会了第一步怎么做),于是又可以再执行动作。反复循环,最后智能体的能力就会越来越强,
  所以我觉得强化学习就是研究一个小白如何通过和环境的交互成长为一个大神。可能最开始小白也不知道怎么成为一个大神,但是会在不断地试错中不断成长。
  学习强化学习就要明确它和监督学习的区别。
  首先什么是监督学习,我也管它叫有标签学习。就是每干一件事都会有个结果,而标签就是正确的结果。每次干完都会和标签做比较,对了结束,不对吸取失败经验继续干。这样往往最后都能够得到正确的情况。但监督学习有两个条件需要满足:
  1)训练的数据必须要有标签
  2)数据要服从独立同分布
  细看这两个要求其实都很难满足,现在完成训练标签的主要标注手段还是人工,但效率实在太低。所以比较好的方式是无标签的。同时真实场景中采取不同动作会进入不同的状态,不同状态后续看到的场景也是不同的,所以说明前后的数据是时间序列相关的。这两个是监督学习的难点,却恰恰是强化学习的主要针对目标。运用强化学习,就能够顺利解决这两个问题(换句话说RL适合解决数据有时间序列相关性问题)。但强化学习有它自身的4个难点:
  1)延时奖励
  2)要不断学习
  3)需要有一个好的结果
  4)环境带给你的是有条件的
  延时奖励说明的就是:和监督学习不同,监督学习中每一步都会和标签进行比对。而诸如下围棋这种强化学习场景,只有最终棋局结束时才能得到一个奖励。前面每步的作用都不直接体现,甚至无法判断每步的正确与否,但是都间接影响着最终的结果。奖励的延时性显然是不利于模型训练的。应该意识到在RL中,环境可能会告诉你这种行为是错误的(奖励为负),但并不会告诉你正确的行为是什么。
  不断学习指RL没有固定的标准,只要效果更好就可以继续学习。那什么时候停止就是一个问题,学习的目的自然是希望好的结果,如果效果坏的话那就没有意义了。
  一个很直白的问题就是: 智能体是如何获得能力的?其实是通过不断试错探索。所以RL中研究的一个重点是:在试错探索的前提下,智能体的行为如何稳步提升。
 
  2.强化学习一些常见的概念
  智能体(agent):优化行为的对象
  环境(environment):智能体通过和环境交互来学习行为,在博弈中指对手
  策略(policy):智能体采取行动的方式,不是具体的行动,但指导行动的发生。抽象为函数时,输入为状态,输出为动作。分类包括随机性策略、确定性策略(为了防止对手观测,使用随机性策略较多)
  动作(action):智能体实际的行动,会体现在环境中,改变环境的状态
  动作空间(action space):环境确定情况下,有效动作的集合称为动作空间。根据采取动作的性质可分为离散动作空间、连续动作空间
  状态(state):可以有两种(智能体state和环境state),但主要关注的是环境的state。认为智能体从环境中获取的state是用来反应环境的
  观测(observation):主体是智能体,代表智能体从环境中看到的信息。
  注:那状态和观测有什么区别呢?
  这里举一个例子:如果以图像为例,state可以认为是我们采集的一张原始图像,而observation则是对原始图像采集特征点,observation依旧可以反应图像,但其实是图像的精炼。但在算力逐渐提高的今天,其实可以模糊两个概念的区别,认定能够观测到所有的数据,所以现在统一称为state
  完全可观测(full observed):智能体能够观察到环境中所有的状态
  部分可观测(partially observed):智能体只能够观察到环境中的部分状态
  奖励(reward):奖励指按照一定的policy执行,能够收获的价值。按照时间段长短,价值也可以分成从头到尾的价值、执行一步的价值、当前状态到最后的价值。
  以上主要说明了六个概念:
    agent environment policy
    action state reward
  把以上的六个概念分为两组,前面三个描述了宏观上的强化学习交互过程。就是agent通过policy和环境交互得到结果,用结果不断改进policy。而具体的落实过程是后面一组完成的:在某个state情况下执行action得到reward,又会进入下一个state然后反复循环。两组之间的联系在于state是从environment中获得的,每次执行的action其实是在policy的指导下完成的。
  对于一个agent,内部也是由多方面组成的,主要包括三部分:
  1)策略函数(policy function):智能体通过policy function确定下一步的动作
  2)价值函数(value function):利用value function对当前进行评估,说明了当前策略对后续回报的影响,也是未来奖励的预测。
  3)模型(model):代表agent对世界的理解。模型决定了下一个状态是什么样的。模型包括概率函数(也叫状态转移函数)和奖励函数。给出其定义及数学化表达式:
 
  概率函数:状态之间如何转移(也就是在状态s采取动作a进入状态s’的概率)
奖励函数:当前状态采取一个动作,所获得奖励
 折扣因子(discount factor):从主观愿望看,希望尽可能在短的时间里得到多的奖励。认定越往后奖励的权重越小,就把奖励乘以折扣因子。取值在[0,1]
  存在policy function+value function+model这就组成了马尔可夫决策过程(这个将在第二章进行介绍)。可以先简单的看看下面这个图,有一个了解:

在了解了一些概念以后。再来看看RL的研究对象及目标,逐步把各类进行细分。RL整体就是围绕policy展开,有了policy就可以执行action,然后就能拿到reward。重点变成了一下三个问题:
    1)policy怎么来的?
    2)怎么评价一个policy是好是坏?
    3)policy是怎么进行优化的?
  对于以上三个问题,下面进行解答。也会陆续给出一些相关的概念。
  1)policy是怎么来的?policy从宏观上来说可以分为两类:探索和利用
    探索:指去尝试一些新的行为,带来的结果可能好可能坏。
    利用:指采取已知的可以获得最大奖励的行为
  2)怎么评价一个policy是好是坏?最简单的就是看policy能带给我们的价值,价值高就是好。这在上面对于价值函数的定义中提到了,下面来详细讲讲价值函数value function,价值函数分为两种:
  (1)状态价值函数(state value function)——价值由状态决定
数学化的表达就是:
(2)状态-行为价值函数(state-action value function)——通常称为Q函数。价值由状态和行为决定。
数学化的表达就是:
先不对这两类价值函数介绍过多,只需要明白,它们可以用来评价policy的好坏即可(其实后续policy的优化也离不开它们)
  了解到policy和value之后,RL就可以被分成两类:
    1)基于policy的学习:直接进行策略学习
    2)基于value的学习:先得到每一步的价值,根据最大价值选择最佳策略
  所以说到底,RL就是在每一个状态要确定一个最好的动作。无论是policy还是value都是为这个服务的,policy就直接一点儿,直接决定动作,value就先计算价值然后再根据价值大小决定动作,也就是策略是从学到的价值函数中推算出来的。
  当明白这两个分类以后,主要的研究对象就明确了:
    对于policy base而言,就是求解这个policy
    对于value base而言,就是求解每一步的value值
 
  那什么是学习呢?在没有任何先验知识的背景下,不可能一开始就得到最好的policy。所以通过不断与环境交互试错,不断改正policy,强化自己的model。这就是强化学习。
  在后面的过程,分别会针对policy base和value base详细介绍各自的算法。先做一个简单的介绍吧:
  对于value base有Q学习(Q-learning)、Sarsa
  对于policy base有策略梯度(policy gradient)
  其实还有一种演员-评论家算法,是对两种base的融合,汲取各自优点。
 
  现在回答上面的第三个问题,策略如何进行优化,其实就是不断学习的过程。学习伴随着迭代,迭代过程中完成优化。
  前面介绍了model是agent的组成部分之一,那有一个问题:model是怎么来的呢?其实这又引出一种RL的分类:
    1)有模型强化学习智能体
    2)免模型强化学习智能体
  之前介绍过model中包括状态转移函数和奖励函数。这里的有无指的就是这两个东西。那这个反映了什么呢?其实反映的就是现阶段是否对真实环境进行建模。如果我们是有模型的(也就是有状态转移函数和奖励函数),我们就可以根据这个选出最佳的策略(因为哪一步可以获得最佳回报是可以计算的)。但又有一个大问题就是:状态转移函数和奖励函数哪里来呢?按照之前的应用条件,连初始的数据都没有。所以更多情况下研究的对象是免模型的RL。也就是智能体只能在真实环境中通过一定策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,反复迭代直到学习到最优策略。
  用一句话总结有模型和免模型的区别:是否需要对真实环境建模
  以上讲了这么多,用一个汇总形式的分类图吧:
 内容到现在差不多了,但还是要再给出一些概念的定义:
  学习和规划:序列决策中的两个基本问题。在规划中,环境已知,可以计算出完美model。不需要与环境交互就可以了解未来环境,寻找最优解。学习就是啥也不知道,一切从头学。常用的一个解决问题的思路是:先学习环境如何工作,了解环境工作方式,即学习得到一个模型,然后利用这个模型进行规划(也就是没有模型先学一个模型,然后对模型进行优化)
  探索和利用:这个其实很像人处理事情的方式,对于有些人乐衷于用新的方式解决问题,他也不知道效果好坏。好就赚了,坏下次就不用这种方法了。有的人形成了自己的模式以后,总喜欢用一种已知效果最好的方法处理。前者就是探索,后者就是利用。
  讲到探索和利用,总喜欢举一个多臂老虎机的例子。具体多臂老虎机是啥,自己百度下。如果我们有K个摇臂,同时有K次机会。仅探索的思想就是一个摇一下,以最后的期望作为标准。仅利用的思想是,先拿一小部分每个摇一下,从中选出最好的,剩下的一大部分都摇这个。显然,探索和利用是矛盾的。也就是探索-利用窘境。所以我们必须在探索和利用之间达到折中,使回报最大化。
 
  轨迹:状态和动作的一个序列。执行一次轨迹就叫做一个回合(episode)
 ps:之前没有关注过神经网络到底有什么特别之处,只知道通过神经网络可以对图片进行特征提取然后完成分类功能。之前以为这个是直接出现的,但前面其实已经有这个过程了:只不过当初以两个独立的形式存在。特征提取+分类器,神经网络只是对两者进行了整合。这样任务就变成了端到端的。这是神经网络比较方便的地方,可以让多个过程变成端到端的。
  从上面的知识中明白,RL就是在和环境交互的过程中,确定一个策略。这个策略的价值很高,也就是最后能给我们带来极大的回报。如果利用神经网络的方法得到价值/策略函数。这种就叫做深度强化学习
 
  书后面每一章都有一些习题,我会按照自己的理解做一些解答。可能有一些是不会的,暂时空下。日后明白后会再来补充滴~
1-1基本的结构就是agent+environment+policy
1-2监督学习是有标签的,在前向学习后根据标签得到结果再通过反向传播修正参数。但是强化学习因为延迟奖励的原因,可能训练的策略到最后因为无法及时评价好坏而造成多次无效的训练
1-3基本特征包括:无标签、数据是时间序列相关
1-4最大的原因还是算力提升吧,一些概念、算法好像上世纪就有了。
1-5状态是全局的,观测到的是部分。但现在实际应用中在模糊二者的区别
1-6三部分:policy function+value function+model
1-7有模型、免模型 policy base、value base
1-8直接目标不一样:策略迭代是优化策略,价值迭代是提高价值
1-9在开始学习的时候,是否完成了对环境的建模
1-10未知环境下,没有先验数据,智能体通过和环境交互试错,选取动作,得到最大回报。最终提升智能体能力
 
1-1 未知环境下,没有先验数据,智能体通过和环境交互试错,选取动作,得到最大回报。最终提升智能体能力
1-2 监督学习和无监督学习区别在于是否有标签,而数据是已经获得的。强化学习没有标签也没有初始数据,通过和环境交互获得数据。
1-3 使用场景就是博弈、自动驾驶领域
1-4 损失函数的作用都是通过梯度下降使损失loss不断降低。深度学习中损失函数代表预测值和真实值的差异。强化学习中损失函数代表最小化负的总奖赏
1-5 区别在开始学习的时候,是否完成了对环境的建模
 
因作者水平有限,如果错误之处,请在下方评论区指出!