强化学习的基本概念

强化学习是机器学习领域的一个分支,通过不断的与环境交互,不断的积累经验,最后让Agent学会如何在目标环境中取得最高的得分。在本篇文章中,笔者将介绍一些强化学习的基础知识,文章中不会涉及任何数学公式。

强化学习的基本过程

强化学习RL的整个过程就好比一个游戏玩家去探索一款新的游戏,通过一次一次的与游戏交互,学会一套操作得到最高分。

玩家是怎么探索游戏的呢?首先玩家观察游戏的场景,往往是游戏当前的图像。然后,玩家输入一套操作作用于游戏,然后游戏会给玩家一个反馈,比如得分,之后游戏转换到下一个场景。最后,玩家通过得分来判断自己的操作的优劣,如果分数增加,那么下一次遇到整个场景的时候就继续使用这一套操作,如果分数减少,那么就换一套操作。整个过程不断反复,玩家最终学会一套操作来拿到最高分。

在强化学习中玩家一般被称为智能体(Agent)而游戏被称为环境(Environment),智能体根据环境的状态(State),通过一个策略函数,输出一个行为(Action),将行为作用于环境,环境再给予智能体奖励(Reward),同时环境会转移到下一个状态。最终,找到一个最优的策略,使得智能体可以尽可能多的获得来自环境的奖励。整个过程如下图所示:

强化学习的基本概念

Model-based和Model-free

在强化学习领域,对于强化学习模型的分类可以分为Model-based和Model-free。这里的Model-based和Model-free,很多人给翻译成了有模型和无模型,笔者不赞成这种翻译,容易造成误导。事实上无论是Model-based还是Model-free,他们都具有算法模型。

两者的不同之处在于,前者会观察环境的状态,模拟环境的工作机制,可以理解为创建一个虚拟的环境。通过这个虚拟的环境,预测动作可能造成的环境状态的变化以及可能收集到的奖励,再通过动态规划的方式找出一条最优路径,即最优的动作决策。说的直白一点就是Model-based类的强化学习模型会通过模仿环境,在脑海里先演算一下采取某种动作之后会造成环境怎样变化,环境变化之后再采取某种动作,如此反复,最后找出一个最优的决策,最后再落实到真实环境中。就好比下象棋的时候,玩家会在脑海里先思考自己下某一步棋之后,对手会如何反应,对手反应之后自己应该如何应对,思考n步之后的情况,找出最有优势的一套下棋步骤再去落子一样。

因此,在判断模型是Model-based还是Model-free,只需要思考,该模型是否能预测往后n步的环境状态。

由于Model-based模型需要创建一个虚拟的环境,可以理解为需要了解环境的运作机制,所以笔者倾向于将Model-based翻译为环境相关性模型。而Model-free模型不需要了解环境的运作机制,所以笔者倾向于翻译为环境无关性模型。

基于概率和基于值

强化学习的模型有两种流派,一种是基于值的模型,另一种是基于概率的模型。两者的区别在于,模型到底如何去选择哪种动作,即策略函数的输出。

基于值的模型,在接受到环境的状态信息之后,会输出动作空间中每一个动作反馈到环境中可能得到的奖励,一般取得到奖励最大的那个动作即可。基于值的模型,往往用于解决离散型动作空间的情况。经典的模型有基于Q-learning算法得到的DQN,Double-DQN等模型。

基于概率的模型,在接受到环境的状态信息之后,会直接输出动作空间中,采取每一个动作的概率,之后根据动作空间的概率分布作采样,得到一个或者一组动作。基于概率的模型,往往用于解决连续型动作空间的情况。经典模型有Policy Gradient算法以及Actor-crictic模型等等。

离散型动作空间和连续型动作空间

这里讲一下什么是离散型动作空间,什么是连续型动作空间。离散型动作空间很好理解,比如玩游戏时,控制角色前后左右移动,就是一个离散的行为,就是这么确定的一组行为。连续型动作空间指的是例如汽车方向盘转动的角度,可选范围可以是0~360度,甚至可以更细化一些,细化到什么粒度无法确定。

其实将连续型动作空间按某种粒度切分,例如将0~360度划分为0,1,...,360,那么其实也可以作为离散值。那么为什么还要提出基于概率的模型来解决这个问题呢?原因在于,即使通过某种粒度将连续型动作划分成离散值,但是划分之后的动作空间会相当大,预测每一个动作的值很耗费计算资源,其次采样也变得很耗时。而输出动作分布之后,则可以根据分布进行随机采样,得出一个或者一组动作。当然,连续型动作空间的采样也很费时,不过DeepMind已经提出了DDPG模型来解决了这个问题。

回合更新和单步更新

在强化学习模型的训练过程中,更新模型参数的方式有两种,一种是回合更新,另一种是单步更新。单步更新意味着,在每一次模型和环境交互之后,立即更新参数。另一种是执行完一个行为序列,即多个交互之后,将梯度收集在一起,再作更新。这就好比玩游戏,回合更新指的是在一个游戏回合之后进行参数更新,单步更新指的是在每一步进行参数更新。

实际上,在进行模型训练的时候,会倾向于选择可以单步更新的模型,因为单步更新的效率比回合更新要高一些。

在线学习和离线学习

在线学习和离线学习针对的是在强化学习模型在训练过程中交互数据的使用方式。在线学习的强化学习模型,会在一个交互之后,立即用本次交互得到的经验进行训练。而离线学习的强化学习模型,往往是先将多个交互的经验存储起来,然后在学习的时候,从存储的经验中取出一批交互经验来学习。

在线学习看起来好像和单步更新差不多,离线学习好像也和回合更新差不多,但实际上毫无关联,不能混淆。在线学习模型,可以采用回合更新的方式,即在回合中每次交互之后的时候将梯度计算好,保存起来,回合结束之后批量更新。离线学习模型也可以采用单步更新的方式,每一个交互产生之后,就从存储的经验中拿出一批数据计算梯度,更新参数,这一过程称为经验回放。

数据相关性

这里的数据指的是智能体与环境交互而得来的经验。那么什么是数据相关性呢?数据相关性指的是数据之间的依赖关系。在强化学习的过程中,环境当前所处的状态,往往由上一个状态转移过来,环境未来的状态,也是由当前状态转移过去的。因此,数据之间有着时间上的依赖。

在线学习模型中,这种相关性导致了对交互经验的利用不充分,一份交互经验往往只会学习一次,或者比较少的几次。这种情况下,模型并不能充分完成经验的学习。离线学习模型的提出,就是为了解决这一问题。通过将交互经验存储起来,通过经验回放的方式进行学习,一份经验可以学习多次,这样就可以让模型充分利用现有的经验。

到此,强化学习的一些基本概念介绍完成了。强化学习涉及到的领域知识非常多,笔者根据自己所了解的知识,总结了以上基本概念,欢迎批评指正。

Reference

https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/1-1-B-RL-methods/

https://blog.csdn.net/ppp8300885/article/details/78524235

关注【Java与Android技术栈】

更多精彩内容请关注扫码

强化学习的基本概念