共计 8820 个字符,预计需要花费 23 分钟才能阅读完成。
作者 | Jane
导读
本文次要介绍了强化学习(Reinforcement Learning,RL)的基本概念以及什么是 RL。强化学习让智能体通过与环境的交互来学习如何做出决策,以取得最大的累积处分。文章还介绍了策略梯度(Policy Gradient,PG)和近端策略优化(PPO)等强化学习算法。
全文 7099 字,预计浏览工夫 18 分钟。
01 强化学习(Reinforcement Learning,RL)
1.1 基本概念 & 什么是 RL
强化学习(reinforcement learning,RL)专一于让智能体(agent)通过与环境的交互来学习如何做出决策,以使其在一直变动且不确定的环境中取得最大的累积处分。
这个过程能够用以下几个因素来形容:
智能体(Agent):智能体是执行动作并与环境进行交互的实体。它能够是一个机器人、一个虚构角色、一个算法等。
环境(Environment):环境包含智能体所处的所有上下文,包含内部条件、状态变量和其余影响智能体的因素。
动作(Action):智能体能够在环境中执行的操作,这些操作可能会扭转环境的状态。
状态(State):状态是形容环境的当前情况的信息。智能体的决策通常依赖于以后状态。
处分(Reward):在每个工夫步,智能体执行一个动作后会取得一个处分信号,用于批示动作的好坏。指标是最大化累积处分。
策略(Policy):策略定义了智能体如何依据以后状态抉择动作。强化学习的指标之一是找到一个最优策略,使智能体可能取得最大的累积处分。
价值函数(Value Function):价值函数掂量了在某个状态下执行某个策略可能取得的预期累积处分。这个函数帮忙智能体评估不同状态的重要性。
学习过程:强化学习的外围是智能体通过尝试不同的动作并察看处分信号来学习适应性策略。它能够应用不同的算法,如 Q -learning、Deep Q-Networks(DQN)、Policy Gradient 等。
△图 1 强化学习过程
其中状态(State)是对整个环境的残缺形容,包含了所有对智能体的决策和口头有影响的信息。状态通常用来领导智能体的决策,因为它提供了无关环境以后状态的全副信息。
观测(Observation)则是对状态的一种形象形容,它可能会疏忽或省略一些状态信息。在理论问题中,有时候智能体无奈间接观测到残缺的状态,而只能获取到一部分信息,即观测。这可能是因为某些信息无奈间接测量,或者因为为了简化问题而对状态进行了形象。
因而,智能体基于它的观测来做出决策,而不是间接应用残缺的状态。这就须要智能体具备从观测中学习无关状态的信息的能力,以便更好地进行决策和口头。
上面举一些可利用强化学习的示例:
1、在电子游戏中,摇杆是智能体,主机是环境,显示屏上的游戏画面(像素)是观测,击杀怪物得分则是处分。
2、在阿法狗围棋对弈中,阿法狗是智能体,人类棋手是环境,棋局是观测,围棋的输赢则是处分。
在强化学习中,智能体继续与环境进行交互,采取一系列的动作,从而造成一个状态和动作的序列,这个序列被称为轨迹(trajectory):
一个交互序列被称为一个回合(episode),在每个回合中,智能体依据以后状态抉择动作,与环境互动,并依据处分信号进行学习和策略优化,以取得最大化累积处分。
这里须要留神的是,环境对咱们来说是黑盒,是不可控的,它在以后状态下跳转到下一状态是遵从肯定的散布的,也就是说它是有肯定的随机性的,那么它产出的处分也具备了肯定的随机性。咱们可控的是 actor 的 policy,即能够通过学习,让 policy 在面对状态 s 时采取一个能让他取得最大处分的 action。所以实际上咱们的指标是 最大化冀望的累积处分(expected cumulative reward)。
1.2 RL 和监督学习的区别
监督学习:
1. 数据独立同散布(i.i.d.):监督学习假如样本是从一个未知散布中独立地采样失去的,数据之间没有时序关联。
2. 标签信息:在监督学习中,每个样本都有正确的标签信息,即模型须要学习从输出到标签的映射关系。
3. 训练指标:监督学习的指标是使模型的预测尽可能地靠近实在标签,通常通过最小化预测与实在标签之间的损失函数来实现。
4. 局限性:监督学习在须要大量标记数据、难以获取所有可能状态的标签信息或者数据之间存在时序关联的状况下可能受限。
强化学习:
1. 时序关联数据:强化学习中智能体的观测是时序关联的,以后的决策会影响将来的观测和处分。
2. 提早处分:强化学习中智能体在做出决策后不会立刻失去处分,处分可能在将来的工夫步骤才会呈现,这就须要智能体通过试错来学习哪些决策导致了最终的处分。
3. 摸索与学习:强化学习中智能体须要在摸索和利用之间找到均衡,以发现可能最大化长期累积处分的无效策略。
4. 超过人类体现:强化学习的一个劣势在于它能够在某些状况下超过人类体现,因为智能体能够自主摸索环境并发现人类难以想象的优化策略。
1.3 RL 算法类型
按不同类型的智能体办法划分:
1. 基于价值的智能体(Value-Based Agents):智能体显式地学习价值函数,而后从学习到的价值函数中隐式地推导出策略,例如 Q -learning 和 Sarsa,这些算法在训练过程中更新状态 - 动作值函数(Q 值),而后依据 Q 值抉择最佳动作。
2. 基于策略的智能体(Policy-Based Agents):智能体间接学习策略,即在给定状态下抉择每个动作的概率分布。策略梯度(Policy Gradient)办法是一种常见的基于策略的强化学习办法,它通过梯度降落或其余优化算法来更新策略参数,以最大化累积处分。
3. 演员 - 评论员智能体(Actor-Critic Agents):这是一种综合了前两种办法的智能体。演员(Actor)负责学习策略,而评论员(Critic)负责学习价值函数。演员依据策略抉择动作,评论员基于环境的反馈和学习的价值函数提供无关动作的评估。这种联合能够帮忙解决价值和策略学习中的某些艰难问题,并且在理论利用中体现出很好的性能。
按是否须要对环境建模来划分:
1.Model-Based 办法:须要对环境建模,包含状态转移函数(形容状态之间如何转换)和处分函数(形容在每个状态下取得的处分)。一旦模型被建设,智能体能够在模型中进行 ” 心算 ”,即通过模型进行推演,而无需真正地与环境进行交互。这使得智能体能够在模型上进行试错,寻找在实在环境中体现良好的策略。然而,这种办法的要害挑战在于如何精确地建设一个模型,因为环境可能非常复杂且不确定。
2.Model-Free 办法:不须要显式地构建环境模型,而是智能体间接与环境交互,通过尝试和察看来学习策略。这种办法通常须要更多的交互工夫和数据,因为智能体须要通过理论的试验来逐渐改良策略。Model-free 办法能够分为基于价值和基于策略的办法,前者关注学习状态或状态 - 动作的价值函数,后者则间接学习策略。
在理论利用中,”model-based” 办法可能须要更少的交互次数来找到较优策略,因为它在模型上进行预测和布局。然而,这个模型的建设可能会面临挑战,尤其是在简单和不确定的环境中。”model-free” 办法则更加实用于无奈精确建模的状况,但可能须要更多的理论交互来学习策略。抉择应用哪种办法通常取决于问题的性质以及可用的数据和计算资源。
02 策略梯度(Policy Gradient,PG)
强化学习的 3 个外围组成部分:actor(policy、agent)、环境 和 处分函数。环境和处分函数不是咱们能够管制的,咱们能做的是调整 Actor 的策略,使得它取得最大的处分。策略个别记作 \(\pi\),如果应用深度学习来做强化学习,策略就是一个 network,其参数记作 \(\theta\)。其输出是观测(或 states),输入是动作空间的一个概率分布。(同一个 states,同一个 env,所采去的 action 也是可能不同的,所以这里是概率分布,action 是具备肯定的随机性的)。
△图 2 神经网络作为策略
处分的稠密性和提早性?
如果把玩一场游戏看做一个回合(episode),在一个 episode 里,actor 一直与环境进行交互,即在 s1 时采取了 action a1,并取得处分 r1,环境接管 a1 后跳转到 s2,actor 看到 s2 后采取了 action a2,并取得处分 r3,…,直至达到某个条件完结游戏。这一个 episode 里,把环境输入 s 和 actor 输入 a 以及处分输入 r 的序列组合起来,就造成了一个轨迹(trajactory):
△图 3 最大化处分
计算某个轨迹产生的概率就是:
指标是通过调整 actor 的参数 \(\theta\),最大化整个轨迹中取得的 total 处分:\(R(\tau)=\sum_{t=1}^T r^t\)
然而因为采取 action 的随机性,环境输入 states 的随机性,失去的 reward 也是有随机性的,所以在计算中咱们须要最大化的不是某个回合的处分,而是最大化冀望处分。(直观上了解:均匀意义上的处分最大化了,那么某个具体的回合他的处分也不会小到哪儿去),所以指标就是最大化 \(R(\tau)\)的期望值
最大化问题,能够应用梯度回升(gradient ascent)来求解,应用梯度更新公式来更新参数,这就是 策略梯度 算法。(外围就是采样数据,更新参数,再采样数据,再更新参数。。。)
接下来就是计算 \(\bar{R_{\theta}}\)的梯度
再看下 \(\bar{R_{\theta}} =\sum_{\tau} R(\tau)p_{\theta}(\tau) = E_{\tau \sim p_{\theta}} [R(\tau)]\) 冀望的这个公式的意义:从散布 \(p_{\theta}(\tau)\)采样一个轨迹 \(\tau\),计算 \(R(\tau)\)的期望值,就是 冀望处分(expected reward)。咱们要最大化冀望处分。即相当于咱们穷举所有的轨迹,每个轨迹对应一个概率。但这个冀望无奈计算,因为没法穷举所有的轨迹。如何解决呢?=> 大数定理:做 N 次采样,用均匀代替冀望。
留神,\(p(s_1)\)和 \(p(s_{t+1}|s\_t,a\_t)\)来自环境,由环境决定,\(\theta\)与 无关,因而 \(\nabla \log p(s_1)=0\),\(\nabla\sum_{t=1}^{T}\log p(s_{t+1}|s\_t,a\_t)=0\)
2.1 2 个问题
接下来探讨 2 个问题:
1. 如果采取每个 action 的处分都是正的,只是有大有小,会呈现什么问题?
2. 整个 episode 里每个(s, a)pair 都应用了同一个 total reward 适合吗?这样偏心吗?一场游戏输了那外面的每个 step 的操作都是失败的吗?一场游戏赢了,两头就不会有失误吗?
如何解决这些问题?
解决问题 1:减少 baseline
如果采取每个 action 的处分都是正的,只是有大有小,会呈现什么问题?
例如如果所有的 r >= 10,那么 r =10 就相对来说是『负』的。也就是说在采样中,没有被采样到的动作的概率会被降落,但该动作不肯定是不好的动作,因而处分最好是有正有负的,这能够减少 baselinse 解决:
通过这种办法,当 \(R(\tau)-b>0\)时即总处分 \(R(\tau)>b\),就让 \((s,a)\)的概率回升;当 \(R(\tau)<b\),即使 \(R(\tau)\)是正的,但如果它值很小也是不好的,就让 \((s,a)\)的概率降落。
\(b\)可通过对 \(\tau\)值取冀望来进行设置,即计算 \(\tau\)的平均值,令 \(b \approx E[R(\tau)]\)。实际中把训练期间的 \(R(\tau)\)的值一直记下来而后计算平均值,用来设置 b。
解决问题 2:调配适合的分数
1、reward-to-go:将来的总回报
把 \(\nabla\log p_{\theta}(a_{t}^n|s_t^n)\)后面的 \((R(\tau)-b)\)看作是它的权重,表征了动作 a 的好坏。这个权重原先是整个轨迹上处分的总和,当初改成从某个时刻 \(t\)开始,始终到游戏完结失去的所有处分的总和。也就是说计算某个状态 - 动作对的处分的时候,不再是把整场游戏失去的处分全副加起来,而是只计算从这个动作执行当前失去的处分。直观上也比拟容易了解:因为这场游戏在执行这个动作之前产生的事件是与执行这个动作是没有关系的,所以在执行这个动作之前失去的处分都不能算是这个动作的奉献。咱们把执行这个动作当前产生的所有处分加起来,才是这个动作真正的奉献。
2、discount 有折扣的:衰减的回报
进一步,咱们在将来的处分中引入折扣因子。为什么要把将来的处分做一个折扣呢?因为尽管在某一时刻,执行某一个动作,会影响接下来所有的后果(有可能在某一时刻执行的动作,接下来失去的处分都是这个动作的功绩),但在个别的状况下,工夫拖得越长,该动作的影响力就越小。
折扣因子 \(\gamma \in [0,1]\),个别设置为 0.9 或 0.99。其中 \(G\_t = r\_t^n + \gamma r_{t+1}^n + \gamma^2 r_{t+2}^n + \gamma^3 r_{t+3}^n +…+ \gamma^{T\_n-t} r\_{T\_n}^n =r\_t^n+\gamma G_{t+1}\)
。从 \(G_t\)的展开式能够看到将来的处分在离 t 时刻越远时,折扣就越多,这样显然更正当。
2.2 重要性采样
策略梯度算法的毛病:
1. 采样效率低:每次以后 actor 策略与环境交互收集到一批训练材料后,策略一更新,这批数据就不能再应用了,因为 actor 曾经产生了变动,须要从新拿新的 actor 再次与环境与做交互,拿到新的一批训练材料。而与环境做交互是十分费时间的(绝对于在 GPU 上作训练),整个过程可能大部分工夫在做交互收集(采样)数据。
2. 迭代步长过长,或步长 / 学习率难以确定,训练不稳固。
采样效率低的问题,思考下能不能用另外一个策略 \(\pi_{\theta‘}\)和一个 actor\(\theta’\)与环境交互,用 \(\theta’\)采样到的数据去训练 \(\theta\),并且利用这些数据去让 \(\theta\)屡次执行梯度回升,屡次更新参数,这样就能大幅晋升效率。
如何实现这个过程呢?
这个公式能够看做是先从 \(q\)外面从采样 \(x\),再计算 \(f(x) \frac{p(x)}{q(x)}\),再取期望值。所以即使没法从 \(p\) 外面采样数据,但从 \(q\)外面采样数据,咱们仍然能够通过这种变换来计算从采样 \(p\)代入 \(x\)当前的期望值。因为是从 采样数据,所以咱们从 采样进去的每一笔数据,都须要乘一个 \(\frac{p(x)}{q(x)}\)来修改这两个散布的差别,这个修改银子就叫做重要性权重(importance weight)。
对于用 actor\(\theta\)采样出 \(s_t\)与 \(a_t\)的状态 - 动作的对时,咱们应用状态 - 动作对的劣势(advantage):\(A_{\theta}(s\_t,a\_t)\),来示意累积处分减去基线这一项,这一项代表的是在状态 \(s_t\)采取动作 \(a_t\)的好坏(有没有劣势)。如果 \(A_{\theta}(s\_t,a\_t)\)是正的,就要增大概率;如果是负的,就要减小概率。
那么回到下面策略梯度的采样效率的问题,就能够思考,由一个 \(p_{\theta’}\)也就是另一个 actor(其实就是须要更新的 actor 的一个正本)去和环境做交互而后收集采样数据,再用这个数据去屡次更新 \(p_{\theta}\)以晋升采样效率。也就是说利用重要性采样,就能够把公式转化为:
上式第 3 行利用条件概率公式开展,最初去掉 \(p_{\theta}(s_t)\) 和 \(p_{\theta‘}(s_t)\) 失去最终的简化的后果。所以依据梯度公式咱们能够写出指标函数:
重要性采样解决了采样效率的问题,但也可能会引入新问题。咱们再来看下重要性采样的公式:\(E_{x\sim p}[f(x)]=E_{x\sim q}[f(x)\frac{p(x)}{q(x)}]\),尽管它们冀望是相等的,但它们的方差如何呢?依据方差计算公式 \({Var} [X]=E[X^2]-(E[X])^2\),别离计算出 \(f(x)\)和 \(f(x)\frac{p(x)}{q(x)}\)的方差:
能够看到 2 个方差的第一项是不同的,\(\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\)的第一项多乘了 \(\frac{p(x)}{q(x)}\),如果 \(\frac{p(x)}{q(x)}\)差距很大,\(p_{\theta}\left(a_{t} | s_{t}\right)\)的方差就会很大。也就是说如果 \(p_{\theta}\left(a_{t} | s_{t}\right)\)与 \(p_{\theta’}\left(a_{t} | s_{t}\right)\) 相差太大,即这两个散布相差太多,重要性采样的后果就会不好。也就是说通过无限次的采样,如果 \(p(x)\)和 \(q(x)\)的差距过大,咱们是无奈保障这个冀望的等式在采样数据上肯定成立。
怎么防止它们相差太多呢?这就是 TRPO 和 PPO 要做的事件。
2.3 TRPO
信赖区域策略优化(trust region policy optimization,TRPO)就是对 \(\theta\)与 \(\theta’\)进行一个束缚,让它们的 KL 散度小于:
尽管 TRPO 解决了散布差距不会很大的问题,但计算有难度(引入束缚项,应用拉格朗日的对偶法解决后,采纳共轭梯度法进行优化),因而咱们个别应用在实现上更容易但性能差不多的 PPO。
03 近端策略优化(PPO)
3.1 PPO1(近端策略优化惩办(PPO-penalty))
**PPO(ProximalPolicyOptimization)** 解决 TRPO 计算量大的问题,不是把束缚放在条件里,而是间接放到指标函数里:
其中惩办项 \(\beta \mathrm{KL}\left(\theta, \theta^{k}\right)\)称之为自适应 KL 散度(adaptive KL divergence),\(\beta\)能够动静调整,其调整策略为:
- 如果 \(KL(\theta,\theta^k)>KL_{max}\),则减少 \(\beta\)
- 如果 \(KL(\theta,\theta^k)<KL_{min}\),则减小 \(\beta\)
3.2 PPO2(近端策略优化裁剪(PPO-clip))
如果咱们感觉计算 KL 散度很简单,那么还有一个 PPO2 算法,PPO2 即 近端策略优化裁剪。近端策略优化裁剪的指标函数外面没有 KL 散度,其要最大化的指标函数为
- 裁剪(clip)函数,裁剪函数是指,在括号外面有 3 项,如果第一项小于第二项,那就输入 \(1-\varepsilon\);第一项如果大于第三项,那就输入 \(1+\varepsilon\)。
- \(\varepsilon\)是一个超参数,是咱们要调整的,能够设置成 0.1 或 0.2。
为什么这个式子就能够做到 \(p_{\theta}\)和 \(p_{\theta’}\)差距不会太大呢?
- 如果 \(A>0\),也就是某一个 \((a\_t,s\_t)\)是好的,则咱们心愿增大这个状态 - 动作 pair 的概率。也就是想让 \(p_{\theta}(a\_t∣s\_t)\)越大越好,但它与 \(p_{\theta^k}(a\_t∣s\_t)\)的比值不能超过 \(1+\varepsilon\);
- 如果 \(A<0\),也就是某一个 \((a\_t,s\_t)\)是不好的,那则咱们心愿把 \(p_{\theta}(a\_t∣s\_t)\)减小,当减到比值是 \(1-\varepsilon\)的时候进行。
通用这个 clip 的限度,咱们不会让 \(p_{\theta}(a\_t∣s\_t)\)和 \(p_{\theta^k}(a\_t∣s\_t)\)差距太大,并且实现这个其实也很简略,如下:
ratios = paddle.exp(cur_batch_log_probs - batch_log_probs.detach())
surr1 = ratios * A_k
surr2 = paddle.clip(ratios, 1-self.clip, 1-self.clip) * A_k
actor_loss = -paddle.minimum(surr1, surr2) # 负号,把最大化问题转化为最小化问题 ratios = paddle.exp(cur_batch_log_probs - batch_log_probs.detach())
surr1 = ratios * A_k
surr2 = paddle.clip(ratios, 1-self.clip, 1-self.clip) * A_k
actor_loss = -paddle.minimum(surr1, surr2) # 负号,把最大化问题转化为最小化问题
04 总结
——END——
参考资料:
[1]https://datawhalechina.github.io/easy-rl/#/
[2]https://speech.ee.ntu.edu.tw/~hylee/ml/2020-spring.php
举荐浏览:
浅谈对立权限治理服务的设计与开发
百度 APP iOS 端包体积 50M 优化实际(五) HEIC 图片和无用类优化实际
百度晓得上云与架构演进
百度 APP iOS 端包体积 50M 优化实际 (四) 代码优化
百度 App 启动性能优化实际篇