文章目录
参考资料
1. 基本介绍
- 强化学习(Reinforcement Learning)讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去最大化它能获得的奖励(reward)。
- 如上图所示,在强化学习过程中,agent 跟 environment 一直在交互。Agent 在环境里面获取到状态,agent 会利用这个状态输出一个动作(action),即一个决策。Agent通过执行这个决策,环境会相应地输出agent下一个状态以及当前的这个决策所获得的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
2. 强化学习与监督学习的区别
2.1 监督学习
- 监督学习(supervised learning) 就是在有一大堆标注的数据中,比如车、飞机、凳子这些标注的图片,这些图片都要满足独立同分布(i.i.d.),即它们之间是没有关联的。为了分辨出这个图片是车辆还是飞机,我们训练一个分类器,即一个神经网络。训练过程中,我们把真实的标签(训练集)给了这个网络。当这个网络做出一个错误的预测,比如现在输入了汽车的图片,它预测出来是飞机,我们就会直接告诉网络,这个预测是错误的,正确的标签应该是车。这个错误就是所谓的损失函数(loss function),我们通过**反向传播(Backpropagation)**来训练这个网络。
- 在监督学习过程中,有两个假设:
- 在监督学习过程中,输入的数据(标注的数据)都是没有关联的,尽可能没有关联 。通常假设样本空间中全体样本服从一个未知分布,我们获得的每个样本都是 独立 地从这个分布上采样获得的,即独立同分布(independent and identically distributed,简称 i.i.d.)。
- 事先告诉学习器(learner)正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。
2.2 强化学习
在强化学习里面,监督学习的两点假设其实都不满足。举一个 Atari Breakout 游戏的例子,这是一个打砖块的游戏,控制木板左右移动把球反弹到上面来消除砖块。
- 在游戏过程中,大家可以发现这个 agent 得到的观测不是个独立同分布的分布,上一帧下一帧有非常强的连续性,得到的数据是相关的时间序列数据,不满足独立同分布。
- 在玩游戏的过程中,并没有立刻获得反馈,没有告诉你哪个动作是正确动作。我们没有事先约定的标签来说明你现在这个动作是正确还是错误,必须等到游戏结束才可能说明,这个游戏可能十秒过后才结束。现在这个动作到底对最后游戏结束能赢是否有帮助,其实是不清楚的。这里就面临延迟奖励(Delayed Reward),所以就使得训练这个网络非常困难。
2.3 监督学习 VS 强化学习
-
强化学习输入的是序列数据,而不是像监督学习里面这些样本都是独立的。
-
学习器并没有被告诉你每一步正确的行为应该是什么。学习器需要自己去发现哪些行为可以得到最多的奖励,只能通过不停地尝试来发现最有利的动作。
-
Agent 获得自己能力的过程中,其实是通过不断地试错探索(trial-and-error exploration)。
- 探索(exploration):你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。
- 利用(exploitation):采取已知的可以获得最大奖励的行为。
- 需要在探索和利用之间取得一个权衡,这也是在监督学习里面没有的情况。
-
在强化学习过程中,只有一个奖励信号(reward signal),并且这个奖励信号是延迟的,就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。这也是强化学习和监督学习不同的地方。
-
监督学习获取的这些监督数据,其实是让人来标注的。人类的这个标注结果决定了它永远不可能超越人类。
-
对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。
-
监督学习假设模型的决策不会影响环境,而强化学习假设模型的决策会改变环境。
2.4 强化学习特征
通过跟监督学习比较,我们可以总结出强化学习的一些特征。
- 强化学习有试错探索(trial-and-error exploration)机制,它需要通过探索环境来获取对环境的理解。
- 强化学习 agent 会从环境里面获得延迟奖励。
- 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有时间关联的(sequential data),而不是独立同分布的。
- Agent 的行为会影响它随后得到的数据。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 去跟环境交互来得到数据。
2.4.1 深度强化学习
- 把强化学习跟深度学习结合起来,就形成了深度强化学习(Deep Reinforcemet Learning)。简单来说就是深度神经网络与强化学习的结合。
- Standard RL:是没有结合神经网络的强化学习,它先设计特征(这个手工特征可以描述现在整个状态),然后通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。
- Deep RL:有了深度学习,有了神经网络,这个过程就变成一个端到端训练(end-to-end training)的过程。直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。
3. 强化学习专有名词概念
3.1 Reward
- 奖励是由环境给的一个标量的反馈信号(scalar feedback signal),这个信号显示了 agent 在某一步采取了某个策略的表现如何。
- 强化学习的目的就是为了最大化 agent 可以获得的奖励,agent 在这个环境里面存在的目的就是为了极大化它的期望的累积奖励(expected cumulative reward)。
3.2 Sequential Decision Making
- 在一个强化学习环境里面,agent 的目的就是选取一系列的动作来极大化它的奖励,所以这些采取的动作必须有长期的影响。但在这个过程里面,它的奖励其实是被延迟了,现在采取的某一步决策可能要等到时间很久过后才知道这一步到底产生了什么样的影响。
- 例如在玩Atari 的 Pong 游戏,可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间采取的 up 或 down 行为,并不会直接产生奖励。
- 在跟环境的交互过程中,agent 会获得很多观测(observation),将观测经过处理后得到状态(State)。在每一个状态下会采取一个动作,它也会得到一个奖励。所以历史是状态、行为、奖励的序列: H t = S 1 , R 1 , A 1 , … , A t − 1 , S t , R t H_t=S_1,R_1,A_1,…,A_{t−1},S_t,R_t Ht=S1,R1,A1,…,At−1,St,Rt。Agent 在采取当前动作的时候会依赖于它之前得到的这个序列,所以可以把整个游戏的状态看成关于这个历史的函数: S t = f ( H t ) S_t=f(H_t) St=f(Ht)。
状态和观测有什么关系?
这两者主要有两种不同的说法。
说法1:从环境中直接获取到的信息我们称之为观测量,这个观测量在实际使用时有可能包含其它无用的信息,经过筛选处理后才得到所需要的状态。
说法2:状态(state)是对世界的完整描述,不会隐藏世界的信息。观测(observation)是对状态的部分描述,可能会遗漏一些信息。在深度强化学习中,我们几乎总是用一个实值向量、矩阵或者更高阶的张量来表示状态和观测。
- 环境有自己的函数 S t e = f e ( H t ) S_{t}^{e}=f^{e}\left(H_{t}\right) Ste=fe(Ht) 来更新状态,在 agent 的内部也有一个函数 S t a = f a ( H t ) S_{t}^{a}=f^{a}\left(H_{t}\right) Sta=fa(Ht)来更新状态。当 agent 的状态跟环境的状态等价的时候,即当 agent 能够观察到环境的所有状态时,我们称这个环境是完全可观测的(fully observed)。在这种情况下面,强化学习通常被建模成一个MDP(Markov decision process)的问题。
- 但是有一种情况是 agent 得到的观测并不能包含环境运作的所有状态,因为在强化学习的设定里面,环境的状态才是真正的所有状态。例如在玩雅达利游戏的时候,观测到的只是当前视频这一帧的信息,并没有得到游戏内部里面所有的运作状态。当 agent 只能看到部分的观测,我们就称这个环境是部分可观测的(partially observed)。在这种情况下面,强化学习通常被建模成一个 POMDP (Partially Observable Markov Decision Processes)的问题。
当Agent的状态跟Environment的状态等价的时候,我们就说现在Environment是
full observability
(全部可观测),
当Agent能够观察到Environment的所有状态时,我们称这个环境是fully observed
(完全可观测)。
当Agent不能观察到Environment的所有状态时,我们称这个环境是partially observed
(部分可观测)。
3.3 Action Space
- 在给定的环境中,有效动作的集合经常被称为动作空间(action space)。有离散动作空间(discrete action spaces)(agent 的动作数量是有限的)和连续动作空间(continuous action spaces) (动作是实值的向量)。
- 例如,
走迷宫机器人如果只有东南西北这 4 种移动方式,则其为离散动作空间;
如果机器人向 36 0 ∘ 360^{\circ} 360∘ 中的任意角度都可以移动,则为连续动作空间。
3.4 Policy
Policy 是 agent 的行为模型,它决定了这个 agent 的行为。这里有两种 policy:
stochastic policy(随机性策略)
:当你输入一个状态的时候,输出是一个概率分布,然后进一步对这个概率分布进行采样,得到真实的采取的行为deterministic policy(确定性策略)
:采取它的极大化,采取最有可能的动作,即 a ∗ = arg max a π ( a ∣ s ) a^{*}=\arg \underset{a}{\max} \pi(a \mid s) a∗=argamaxπ(a∣s)- 从 Atari 游戏来看的话,策略函数的输入就是游戏的一帧。
3.5 Value Function
- 价值函数是未来奖励的一个预测,用来评估状态的好坏。
- 价值函数里面有一个
discount factor(折扣因子)
,我们希望尽可能在短的时间里面得到尽可能多的奖励。 - 价值函数的定义其实是一个期望,如下式所示:
v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] , for all s ∈ S v_{\pi}(s) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid S_{t}=s\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} \mid S_{t}=s\right], \text { for all } s \in \mathcal{S} vπ(s)≐Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s], for all s∈S
这里有一个期望 E π \mathbb{E}_{\pi} Eπ,这里有个小角标是 π \pi π 函数,表示在我们已知某一个策略函数 π \pi π的时候,到底可以得到多少的奖励期望 E π \mathbb{E}_{\pi} Eπ。 - 还有一种价值函数:Q 函数。Q 函数里面包含两个变量:状态和动作,其定义如下式所示:
q π ( s , a ) ≐ E π [ G t ∣ S t = s , A t = a ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] q_{\pi}(s, a) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid S_{t}=s, A_{t}=a\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} \mid S_{t}=s, A_{t}=a\right] qπ(s,a)≐Eπ[Gt∣St=s,At=a]=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a]
期望取决于你当前的状态和当前的行为。因为当我们得到这个 Q 函数后,在某一种状态下,智能体最优的行为就可以通过这个 Q 函数来得到。
3.6 Model
- 模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。它由两个部分组成:
- 概率:这个转移状态之间是怎么转移的,如下式所示:
P s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] \mathcal{P}_{s s^{\prime}}^{a}=\mathbb{P}\left[S_{t+1}=s^{\prime} \mid S_{t}=s, A_{t}=a\right] Pss′a=P[St+1=s′∣St=s,At=a] - 奖励函数:当你在当前状态采取了某一个行为,可以得到多大的奖励,如下式所示:
R s a = E [ R t + 1 ∣ S t = s , A t = a ] \mathcal{R}_{s}^{a}=\mathbb{E}\left[R_{t+1} \mid S_{t}=s, A_{t}=a\right] Rsa=E[Rt+1∣St=s,At=a]
- 概率:这个转移状态之间是怎么转移的,如下式所示:
4. Types of RL Agents
4.1 value-based vs policy-based
根据 agent 学习的东西不同,我们可以把 agent 进行归类。
-
基于价值的 agent(
value-based agent
)- 这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。
- 而在
value-based
的强化学习方法中,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果。 - 基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等
-
基于策略的 agent(
policy-based agent
)。- 这一类 agent 直接去学习 policy,就是说你直接给它一个状态,它就会输出这个动作的概率。在基于策略的 agent 里面并没有去学习它的价值函数。
- 在
policy-based
的强化学习方法中,智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。 - 基于策略迭代的强化学习算法有策略梯度算法等。
-
Actor-Critic agent
- 把 value-based 和 policy-based 结合起来就有了 Actor-Critic agent。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。
- Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
4.2 model-based vs model-free
通过 agent 到底有没有学习这个环境模型来分类。
-
model-based
(有模型) RL agent- 它通过学习这个状态的转移来采取动作。
- 用马尔可夫决策过程来定义强化学习任务,并表示为四元组
<S,A,P,R>
,即状态集合、动作集合、状态转移函数和奖励函数。如果这四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则机器可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境的状态和交互反应。 - 具体来说,当智能体知道状态转移函数 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t,a_t) P(st+1∣st,at)和奖励函数 R ( s t , a t ) R(s_t,a_t) R(st,at) 后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。
-
model-free
(无模型) RL agent- 它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。
- 没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。
-
model based RL
相比于model free RL
仅仅多出一个步骤,即对真实环境进行建模。因此,一些有模型的强化学习方法,也可以在无模型的强化学习方法中使用。在实际应用中,如果不清楚该用哪种,可以先思考一下在智能体执行动作前,是否能对下一步的状态和奖励进行预测,如果可以,就能够对环境进行建模,从而采用model based RL
。 -
model free RL
通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。 -
model based RL
可以在一定程度上缓解训练数据匮乏的问题 -
model free RL
的泛化性要优于model based RL
,原因是model based RL
需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了model based RL
的泛化性。
5. Exploration and Exploitation
在强化学习里面,探索 和利用 是两个很核心的问题。
- 探索是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。
- 利用是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
- 以挖油为例,
利用:我们直接在已知的地方挖油,我们就可以确保挖到油。
探索:我们在一个新的地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的油田。
5.1 K-armed Bandit
-
强化学习任务的最终奖励是在多步动作之后才能观察到,这里不妨先考虑比较简单的情形:最大化单步奖励,即仅考虑一步操作。
-
想要最大化单步奖励需考虑两个方面:一是需知道每个动作带来的奖励,二是要执行奖励最大的动作。若每个动作对应的奖励是一个确定值,那么尝试遍所有的动作便能找出奖励最大的动作。然而,更一般的情形是,一个动作的奖励值是来自于一个概率分布,仅通过一次尝试并不能确切地获得平均奖励值。
-
单步强化学习任务对应了一个理论模型,即
K-臂赌博机(K-armed bandit)
。K-臂赌博机
也被称为多臂赌博机(Multi-armed bandit)
。
- 如上图所示,K-摇臂赌博机有 K 个摇臂,赌徒在投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币,但这个概率赌徒并不知道。赌徒的目标是通过一定的策略最大化自己的奖励,即获得最多的硬币。
- 若仅为获知每个摇臂的期望奖赏,则可采用仅探索(exploration-only)法:将所有的尝试机会平均分配给每个摇臂(即轮流按下每个摇臂),最后以每个摇臂各自的平均吐币概率作为其奖赏期望的近似估计。
- 若仅为执行奖赏最大的动作,则可采用仅利用(exploitation-only)法:按下目前最优的(即到目前为止平均奖赏最大的)摇臂,若有多个摇臂同为最优,则从中随机选取一个。
- 显然,仅探索法能很好地估计每个摇臂的奖赏,却会失去很多选择最优摇臂的机会;仅利用法则相反,它没有很好地估计摇臂期望奖赏,很可能经常选不到最优摇臂。因此,这两种方法都难以使最终的累积奖赏最大化。
- 事实上,探索(即估计摇臂的优劣)和利用(即选择当前最优摇臂)这两者是矛盾的,因为尝试次数(即总投币数)有限,加强了一方则会自然削弱另一方,这就是强化学习所面临的探索-利用窘境(Exploration-Exploitation dilemma)。显然,想要累积奖赏最大,则必须在探索与利用之间达成较好的折中。
6. 面试题
-
你认为强化学习与监督学习和无监督学习有什么区别?
答:
- 首先强化学习和无监督学习是不需要标签的,而监督学习需要许多有标签的样本来进行模型的构建;
- 对于强化学习与无监督学习,无监督学习是直接对于给定的数据进行建模,寻找数据(特征)给定的隐藏的结构,一般对应的聚类问题,而强化学习需要通过延迟奖励学习策略来得到"模型"对于正确目标的远近(通过奖励惩罚函数进行判断),这里我们可以将奖励惩罚函数视为正确目标的一个稀疏、延迟形式。
- 监督学习假设模型的决策不会影响环境,而强化学习假设模型的决策会改变环境。
- 另外强化学习处理的多是序列数据,样本之间通常具有强相关性,但其很难像监督学习的样本一样满足IID条件。
-
你认为强化学习的使用场景有哪些呢?
答:序列决策问题。或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题并且当前的动作会影响环境的状态,即服从马尔可夫性的问题。同时应满足所有状态是可重复到达的(满足可学习型的)。
-
RL中所谓的损失函数与DL中的损失函数有什么区别?
答: DL中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是是奖励和的期望最大。
-
你了解model-free和model-based吗?两者有什么区别呢?
答:
- 两者的区别主要在于是否需要对于真实的环境进行建模,
- model-free不需要对于环境进行建模,直接与真实环境进行交互即可,所以其通常需要较大的数据或者采样工作来优化策略,这也帮助model-free对于真实环境具有更好的泛化性能;
- 而model-based 需要对于环境进行建模,同时在真实环境与虚拟环境中进行学习,如果建模的环境与真实环境的差异较大,那么会限制其泛化性能。现在通常使用model-free进行模型的构建工作。