强化学习基础
基本概念
强化学习(reinforcementlearning, RL)是近年来机器学习和智能控制领域的主要方法之一。强化学习关注的是智能体如何在环境中采取一系列行为,从而获得最大的累计回报
通过强化学习,一个智能体知道在什么状态下应该采取什么行为。RL是从环境状态到动作的映射学习,我们把这个映射称为策略(Policy)
强化学习和监督学习的区别
- 增强学习是试错学习(Trail-and-error),由于没有直接的指导信息,智能体要以不断与环境进行交互,通过试错的方式来获得最佳策略。
- 延迟回报,增强学习的指导信息很少,而且往往是在事后(最后一个状态)才给出的,这就导致了一个问题,就是获得正回报或者负回报以后,如何将回报分配给前面的状态。
马尔科夫决策过程
马尔科夫链是指,从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。
马尔可夫决策过程(Markov Decision Process,MDP)也具有马尔可夫性,与上面不同的是MDP考虑了动作,即系统下个状态不仅和当前的状态有关,也和当前采取的动作有关
马尔科夫决策过程推导
一个马尔科夫决策过程由一个四元组构成
- :表示状态集(states), 有, 表示第步的状态
- : 表示一组动作(actions),有, 表示第步的动作
- :表示状态转移概率。表示的是在当前状态下,经过作用后,会转移到的其他状态的概率分布情况。比如,在状态下执行动作,转移到的概率可以表示为
- : R是回报函数(reward function)。如果一组转移到了下个状态,那么回报函数可记为。如果对应的下个状态是唯一的,那么回报函数也可以记为
MDP的动态过程如下:某个智能体(agent)的初始状态为,然后从 中挑选一个动作执行,执行后,agent 按概率随机转移到了下一个状态,。然后再执行一个动作,就转移到了,接下来再执行…,我们可以用下面的图表示状态转移的过程。
如果回报r是根据状态s和动作a得到的,则MDP还可以表示成下图:
值函数
强化学习学到的是一个从环境状态到动作的映射(即行为策略),记为策略。而强化学习往往又具有延迟回报的特点:因而需要定义值函数(value function,又叫效用函数)来表明当前状态下策略的长期影响。
用表示策略下,状态的值函数。表示未来第步的立即回报,常见的值函数有一下三种
- 未来有限h步的期望立即回报总和:
- 采用策略π的情况下期望的平均回报:
- 值函数最常见的形式:
接下来我们只讨论第三种形式,式中称为折合因子,表明了未来的回报相对于当前回报的重要程度。特别的,时,相当于只考虑立即不考虑长期回报,时,将长期回报和立即回报看得同等重要。
现在将值函数的第三种形式展开,其中表示未来第步回报,表示下一步状态,则有:
给定策略和初始状态,则动作,下个时刻将以概率转向下个状态,那么上式的期望可以拆开,可以重写为:
上面提到的值函数称为状态值函数(state value function),需要注意的是,中,和初始状态是我们给定的,而初始动作是由策略和状态决定的,即。
定义**动作值函数(action value function)**如下:
给定当前状态和当前动作,在未来遵循策略,那么系统将以概率转向下个状态,上式可以重写为:
在,不仅策略和初始状态是我们给定的,当前的动作a也是我们给定的,这是和的主要区别。
一个MDP的最优策略表示如下
即我们寻找的是在任意初始条件下,能够最大化值函数的策略。
Temporal-Difference learning
在介绍时间差分学习(TD learning)之前,先引入蒙特卡罗算法,称为constant-α MC,它的状态值函数更新公式如下:
其中是每个episode结束后获得的实际累积回报,是学习率,这个式子的直观的理解就是用实际累积回报作为状态值函数的估计值。具体做法是对每个episode,考察实验中的实际累积回报和当前估计的偏差值,并用该偏差值乘以学习率来更新得到的新估值。
现在我们将公式修改如下,把换成,就得到了TD(0)的状态函数更新公式:
回忆下状态值函数的定义:
利用真实的立即回报和下个状态的值函数来更新,这种就方式就称为时间差分(temporal difference)。
Sarsa
强化学习算法可以分为在线策略(on-policy)和离线策略(off-policy)两类。sarsa算法属于on-policy算法。sarsa算法估计的是动作值函数而非状态值函数。也就是说,我们估计的是策略下,任意状态上所有可执行的动作的动作值函数。
sarsa的动作值函数更新公式如下:
由于动作值函数的每次更新都与相关,因此算法被命名为sarsa算法。sarsa算法的完整流程图如下:
Q-learning
在sarsa算法中,选择动作时遵循的策略和更新动作值函数时遵循的策略是相同的,即的策略,而在接下来介绍的Q-learning中,动作值函数更新则不同于选取动作时遵循的策略,这种方式称为离线策略(Off-Policy)。Q-learning的动作值函数更新公式如下:
可以看到,Q-learning与sarsa算法最大的不同在于更新Q值的时候,直接使用了最大的Q(st+1,a)值——相当于采用了Q(st+1,a)值最大的动作,并且与当前执行的策略,即选取动作at时采用的策略无关
Q-learning和Sarsa算法对比
从算法来看, 这就是他们两最大的不同之处了. 因为 Sarsa 是说到做到型, 所以我们也叫他 on-policy, 在线学习, 学着自己在做的事情. 而 Q learning 是说到但并不一定做到, 所以它也叫作 Off-policy, 离线学习. 而因为有了 maxQ, Q-learning 也是一个特别勇敢的算法。
Deep Q Network
我们使用表格来存储每一个状态 state, 和在这个 state 每个行为 action 所拥有的 Q 值. 而当状态很多的时候,使用表格存储效率就很低了.DQN利用神经网络,将状态和动作当成神经网络的输入,然后经过神经网络分析后得到动作的 Q 值, 这样我们就没必要在表格中记录 Q 值, 而是直接使用神经网络生成 Q 值. 还有一种形式的是这样, 我们也能只输入状态值, 输出所有的动作值, 然后按照 Q learning的原则,直接选择拥有最大值的动作当做下一步要做的动作. 我们可以想象, 神经网络接受外部的信息, 相当于眼睛鼻子耳朵收集信息, 然后通过大脑加工输出每种动作的值, 最后通过强化学习的方式选择动作.
算法流程如下所示:
Policy Gradient
简介
强化学习是一个通过奖惩来学习正确行为的机制. 家族中有很多种不一样的成员, 有学习奖惩值, 根据自己认为的高价值选行为, 比如 Q learning, Deep Q Network, 也有不通过分析奖励值, 直接输出行为的方法, 这就是今天要说的 Policy Gradients 了. 甚至我们可以为 Policy Gradients 加上一个神经网络来输出预测的动作. 对比起以值为基础的方法, Policy Gradients 直接输出动作的最大好处就是, 它能在一个连续区间内挑选动作, 而基于值的, 比如 Q-learning, 它如果在无穷多的动作中计算价值, 从而选择行为, 这, 它可吃不消.
核心思想
举个简单的例子来说明policy gradient的核心思想。假设一个智能体有左右两个可选动作。假如这次的观测信息让神经网络选择了右边的行为, 右边的行为随之想要进行反向传递, 使右边的行为下次被多选一点, 这时, 获得了一个正的奖励。 告诉我们这是好行为, 那我们就在这次反向传递的时候加大力度, 让它下次被多选的幅度更猛烈! 这就是 Policy Gradients 的核心思想了。