强化学习笔记专栏传送
上一篇:强化学习RL学习笔记1-概述(1)
下一篇:强化学习RL学习笔记3-gym了解与coding实践
目录
前言
强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。
本文是笔者对强化学习的一点学习记录,成文于笔者刚开始接触强化学习期间,主要内容参考LeeDeepRL-Notes,学习期间很多概念和理论框架还很不成熟,若文中存在错误欢迎批评指正,也欢迎广大学习者沟通交流、共同进步。
Major Components of an RL Agent(RL Agent中的主要构成)
- Policy:agent根据policy function选择下一步动作。
- Value function:用此对当前状态进行估价,即进入当前状态,可以对收益带来多大影响。价值函数大说明进入这个状态有利。
- Model:表示了 agent 对这个环境的状态进行理解。
1.Policy
Policy 决定了 agent 的行为,是一个输入状态输出行为的函数。这里有两种 policy:
-
stochastic policy(随机性策略),即 π 函数 π(a∣s)=P[At =a∣St =s] 。输入当前状态输出各个行为概率。然后可以进一步对这个概率分布进行采样,得到真实的采取的行为。比如说概率可能是有 70% 的概率往左,30% 的概率往右,那么通过采样就可以得到一个 action。
-
deterministic policy(确定性策略),即有可能只是采取它的极大化,采取最有可能的动作。现在概率是事先决定好的。
从 Atari 游戏来看的话,policy function 的输入就是游戏的一帧,它的输出决定你是往左走或者是往右走。
通常情况下,强化学习一般使用随机性策略。随机性策略有很多优点:
-
在学习时可以通过引入一定随机性来更好地探索环境;
-
随机性策略的动作具有多样性,这一点在多个智能体博弈时也非常重要。采用确定性策略的智能体总是对同样的环境做出相同的动作,会导致它的策略很容易被对手预测。
2.Value Function
价值函数是未来奖励的预测,用来评估状态的好坏。
价值函数里面有一个 discount factor,我们希望尽可能在短的时间里面得到尽可能多的奖励。如果说十天过后,我给你 100 块钱,跟我现在给你 100 块钱,你肯定更希望我现在就给你 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个 discount factor 放到价值函数的定义里面,价值函数的定义其实是一个期望。有期望 E π \mathbb{E}_{\pi} Eπ ,这里有个小角标是 π 函数, π 函数就是说在已知某一个 policy function 的时候,到底可以得到多少奖励。
有一种价值函数:Q 函数。Q 函数包含两个变量:状态和动作。所以未来可以获得多少奖励,它的期望取决于当前的状态行为。进入某一种状态,它最优的行为就可以通过这个 Q 函数来得到。
3.Model
模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。它由三个部分组成:
- probability,转移状态之间是怎么转移的。
- 奖励函数,当你在当前状态采取了某一个行为,可以得到多大的奖励。
- Discount factor,γ([0,1])
当有了这三个成分过后,就形成了一个 Markov Decision Process(马尔可夫决策过程)。这个决策过程可视化了状态之间的转移以及采取的行为。
看一个走迷宫的例子:
- 这个例子要求 agent 从 start 开始,然后到达 goal 的位置。
- 这里设定的奖励是每走一步,你就会得到一个负的奖励。
- 这里可以采取的动作是往上下左右走。
- 当前状态用现在 agent 所在的位置来描述。
我们可以用不同的强化学习算法来解这个环境:
- 如果采取 Policy-based RL,当我们学习好了这个环境过后,在每一个状态,我们就会得到一个最佳的行为。比如说现在在第一格开始的时候,我们知道它最佳行为是往右走,然后第二格的时候,得到的最佳策略是往上走,第三格是往右走。通过这个最佳的策略,我们就可以最快地到达终点。
- 如果采取 Value-based RL 这个算法,利用价值函数来作为导向,就会得到另外一种表征,这里就表征了你每一个状态会返回一个价值。当快接近最后终点的时候,数字变得越来越大。在拐角的时候,比如要现在在第二格 -15。然后 agent 会看上下,它看到上面值变大了,变成 -14 了,它下面是 -16,那么 agent 肯定就会采取一个往上走的策略。所以通过这个学习的值的不同,我们可以选择现在最佳的策略。
Types of RL Agents(RL Agents的类型)
1.不同决策方式的Agents
决策方式是智能体在给定状态下从动作集合中选择一个动作的依据,它是静态的,不随状态变化而变化。
不同决策方式下,Agents可以分为以下三种情况:
- 基于价值的 agent(value-based agent)。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。【 Q-learning、 Sarsa 等】
- 基于策略的 agent(policy-based agent)。这一类 agent 直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。【策略梯度算法等】
- value-based 和 policy-based 结合起来就有了 Actor-Critic agent。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。
2.是否学习环境模型
- model-based(有模型) RL agent,通过学习状态的转移来采取动作。
- model-free(免模型) RL agent,没有去直接估计状态的转移,也没有得到环境的具体转移变量。它通过学习 value function 和 policy function 进行决策。Model-free 的模型里面没有环境转移的模型。
可以用马尔可夫决策过程来定义强化学习任务,并表示为四元组 <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)后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。这种学习方法称为有模型学习。
有模型强化学习的流程图如下图所示:
然而在实际应用中,智能体并不是容易知晓 MDP 中的所有元素。通常情况下,状态转移函数和奖励函数很难估计,甚至连环境中的状态都可能是未知的,这时就需要采用免模型学习。免模型学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。
model-based和model-free的区别:
- 有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;
- 免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。
免模型学习的泛化性要优于有模型学习,原因是免模型学习相比有模型学习还引入了对虚拟环境中的学习,泛化能力更强。
Learning and Planning
1.Reinforcement Learning
reinforcement learning 中环境初始时是未知的,agent 不知道环境如何工作,agent 通过不断地与环境交互,逐渐改进策略。
2.Planning
plannning 中环境是已知的,我们被告知了整个环境的运作规则的详细信息。Agent 能够计算出一个完美的模型,并且在不需要与环境进行任何交互的时候进行计算。Agent 不需要实时地与环境交互就能知道未来环境,只需要知道当前的状态,就能够开始思考,来寻找最优解。
在这个游戏中,规则是制定的,我们知道选择 left 之后环境将会产生什么变化。我们完全可以通过已知的变化规则,来在内部进行模拟整个决策过程,无需与环境交互。
一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划。
Exploration and Exploitation
Exploration 和 Exploitation 是强化学习两个很核心的问题:
-
Exploration 是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。
-
Exploitation 是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
Exploitation 往往可以带来更好的短期 reward ,而 Exploration 牺牲短期 reward 又可以获得长期对行为的理解。所以就面临一个 trade-off,怎么通过牺牲一些短期的 reward 来获得行为的理解。
以选择餐馆为例:
- Exploitation 是说直接去最喜欢的餐馆,因为去过这个餐馆很多次了,所以知道这里面的菜都非常可口。
- Exploration 是说搜索一个新的餐馆,然后去尝试它到底好不好吃。这里的结果就是有可能这个新的餐馆非常不满意,这个钱就浪费了。
1.K-armed Bandit
与监督学习不同,强化学习任务存在延迟奖励,这里不妨先考虑比较简单的情形:最大化单步奖赏,即仅考虑一步操作。需注意的是,即便在这样的简化情形下,强化学习仍与监督学习有显著不同,因为机器需通过尝试来发现各个动作产生的结果,而没有训练数据告诉机器应当做哪个动作。
单步强化学习任务对应了一个理论模型,即 K-臂赌博机(K-armed bandit)。K-臂赌博机也被称为 多臂赌博机(Multi-armed bandit) 。如上图所示,K-摇臂赌博机有 K 个摇臂,赌徒在投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币,但这个概率赌徒并不知道。赌徒的目标是通过一定的策略最大化自己的奖赏,即获得最多的硬币。
- 若仅为获知每个摇臂的期望奖赏,则可采用仅探索(exploration-only)法:将所有的尝试机会平均分配给每个摇臂(即轮流按下每个摇臂),最后以每个摇臂各自的平均吐币概率作为其奖赏期望的近似估计。
- 若仅为执行奖赏最大的动作,则可采用仅利用(exploitation-only)法:按下目前最优的(即到目前为止平均奖赏最大的)摇臂,若有多个摇臂同为最优,则从中随机选取一个。
显然,仅探索法能很好地估计每个摇臂的奖赏,却会失去很多选择最优摇臂的机会;仅利用法则相反,它没有很好地估计摇臂期望奖赏,很可能经常选不到最优摇臂。因此,这两种方法都难以使最终的累积奖赏最大化。
事实上,探索(即估计摇臂的优劣)和利用(即选择当前最优摇臂)这两者是矛盾的,因为尝试次数(即总投币数)有限,加强了一方则会自然削弱另一方,这就是强化学习所面临的探索-利用窘境(Exploration-Exploitation dilemma)。显然,想要累积奖赏最大,则必须在探索与利用之间达成较好的折中(trade-off)。