1,强化学习
1.1,基本概念
强化学习起源于动物心理学的相关原理,模仿人类和动物学习的试错机制,是一种通过与环境交互,学习状态到行为的映射关系,以获得最大积累期望回报的方法。强化学习包含环境,动作和奖励三部分,其本质是 agent 通过与环境的交互,使得其作出的action所得到的决策得到的总的奖励达到最大,或者说是期望最大。DL/ML中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是是奖励和的期望最大。
在机器学习范畴内,根据反馈的不同,学习技术可以分为监督学习、非监督学习和强化学习三大类。强化学习是处于完全监督和完全缺乏预定义标签之间,又称为增强学习、加强学习和激励学习,是一种从环境状态到行为映射的学习,目的是使动作从环境中获得的累计回报(奖励)值最大。强化学习主要是智能体(Agent)与环境(Environment)的交互过程。强化学习有一个很大的优势,它可能是超越人类的。监督学习中,比如分类问题,最好的结果就是人类的标注水平,这是一个上界。而强化学习可以在环境中探索,最终可能超过人类。
- 与监督学习和非监督学习均不同,强化学习的训练样本(智能体与环境交互产生的数据)没有任何标记,仅有一个延迟的回报信号。强化学习通过对训练数据进行学习,以期获得从状态到行为的映射。
- 在监督学习和非监督学习中,数据是静态的,不需要与环境进行交互,如分类聚类,只要将训练数据输入算法中进行训练即可。并且,对于数据有更多的前提假设,如混合高斯分布、泊松分布。然而强化学习是一个序贯决策的过程,需要在于环境不断交互的过程中动态学习,该方法所需的数据也是通过与环境不断交互动态产生的,并且所产生的数据之间存在高度的相关性。相比监督学习和非监督学习,强化学习涉及的对象更多、更复杂,如果动作、环境、状态转移概率和回报函数等。
强化学习特点:
- 作为输入的顺序数据(并非独立同分布)。
- 智能体不会被告知要采取哪些行动,而是必须通过尝试来发现哪些行动产生的回报最大。
- 试错探索(探索与利用之间的平衡,Exploration and Exploitation),探索就是去一个新的餐馆。利用就是在去过的餐馆中挑一个最好吃的。探索有可能找到一个更好吃的,但也有不好吃的风险。
- 没有管理者,只有一个奖励信号,会被延迟(延迟奖励)。
- 智能体的操作会影响其接收的后续数据(智能体的操作会改变环境)。
1.2,术语
(1)智能体(Agent):通过外界环境的状态(Sate)和奖励反馈(Reward)进行学习,并根据外界的状态来做出不同的动作(Action),而学习功能是指根据外界环境的奖励来调整策略,经过数次迭代之后,智能体最终学到完成相应任务的最优动作(即最优策略)。
(2)环境(Environment):环境(Environment)是智能体(Agent)外部的所有事物,随着智能体(Agent)所做的不同动作(Action),环境的状态(State)会改变,并反馈给智能体(Agent)相应的奖励(Reward)。区分智能体和环境:不能被智能体随意改变的东西被认为是该智能体的外部环境。比如:回报,智能体没有权限去任意改变它,因此作为回报就属于外部环境。智能体和外部环境的边界代表了智能体绝对控制的权限,而不是其学习和推理、进化的权限。
(3)状态(State):状态(State)是对环境的描述。动作(Action)是对智能体的描述。
(4)基本原理:如果Agent的某个行为导致了环境对Agent正的奖励,则Agent以后采取这个行为策略的趋势会加强。反之,若某个行为策略导致了负的奖赏,那么Agent此后采取这个动作的趋势会减弱。
(5)基本结构(学习过程):Agent选择一个动作Action作用于环境,环境接收该动作后发生改变,同时产生强化信号反馈给Agent,Agent再根据强化信号和环境的当前状态State再选择下一个动作,选择的原则是使收到正的奖赏值的概率增大。选择的动作不仅影响立即奖赏值,而且还影响下一时刻的状态及最终强化值。强化学习的目的就是寻找一个最优策略,使得Agent在运行中所获得的累计奖赏值最大。
(6)策略:策略是决定智能体行为的机制,是状态到行为的映射,其目的是在长期运行过程中接收的累计回报最大,用
表示,它定义了智能体在各个状态下的各种可能的行为概率,分为确定性策略与随机性策略。
- 确定性策略会根据具体状态输出一个动作,如
。
- 随机性策略则会根据状态输出每个动作的概率分布(概率值大于等于0,小于等于1),输出值为一个概率分布。
一个策略完整定义了智能体的行为方式,也就定义了智能体在各个状态下的各种可能的行为方式及其概率大小。策略仅和当前的状态有关,与历史信息无关。统一状态下,策略不会发生改变,发生变化的是依据策略可能产生具体行为,因为具体的行为是有一定的概率的,策略就是用来描述各个不同行为的概率。同时某一确定的概率是静态的,与时间无关,但是智能体可以随着时间更新策略。
策略描述针对状态集合S中的每一个状态s,Agent应完成动作集A中的一个动作a,策略
:
是一个从状态到动作的映射。关于任意状态所能选择的策略组成的集合 F,称为允许策略集合
。在允许策略集合中找出使问题具有最优效果的策略
,称为最优策略。
(7)状态转移概率:状态转移概率
是在智能体根据当前状态做出一个动作后,环境在下一状态为
的概率。
(8)总回报:总回报是给定策略
后,智能体与环境交互作用结束后所得到的累计奖励Return:
如果没有终止情况,即
,则利用折扣率
,Return定义为:
G 是从初始时刻计算得到的总回报,而从
时刻开始的总回报定义为:
(9)目标函数:目标函数是总回报的期望值。由于每次状态转移都是随机性的,所以学习的目标是agent执行一系列动作来获得尽可能多的平均汇报:
(10)状态值函数:值函数代表智能体在给定状态下的表现,或者给定状态下采取某个行为的好坏程度。这里的好坏用未来的期望回报表示,而回报和采取的策略相关,所有值函数的估计都是基于给定的策略进行的。
从状态
开始,遵循当前策略
所获得的期望回报;或者说在执行当前策略
时,衡量智能体所处状态
时的价值大小。这个值可以用来评价一个状态的还坏,指导智能体选择动作,使得其转移到具有较大值函数的状态上去。
其中,
和
分别为在时刻
的立即奖赏和状态,衰减系数
使得临近的奖赏比未来的奖赏更重要。这里有一个期望
,这里有个小角标是
函数,这个
函数就是说在已知某一个策略函数的时候,到底可以得到多少的奖励。
(11)状态-行为值函数
:状态行为值函数
又称为行为值函数。该指标表示针对当前状态
执行某一具体行为
后,继续执行策略
所获得的的期望回报;也表示遵循策略
时,对当前状态
执行行为
的价值大小。
可以认为Q值是对奖赏的一种预测,如果状态
的奖赏值低,并不意味着它的Q值就低,因为如果s的后续状态产生较高的奖赏,仍然可以得到较高的Q值。估计值函数的目的是得到更多的奖赏,然而动作的选择是基于Q值判断的。也就是说,Agent选择这样一个动作,以使产生的新状态具有跟高的Q值,而不是转移到新状态时有最高的即时奖励,因为从长远来看,这些动作将产生更多的奖赏。然而确定值函数要比确定奖赏难的很多,因为奖赏往往是环境直接给定的,而Q值则是Agent在其整个生命周期内通过一系列观察,不断地估计得出的。事实上,绝大部分强化学习算法的研究就是针对如何有效快速的估计值函数,值函数是强化学习算法的关键。
1.3,RL方法的分类
随机性策略和确定性策略:
- 随机性策略:就是
函数
。当你输入一个状态
的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过采样就可以得到一个 action。
- 确定性策略:就是说你这里有可能只是采取它的极大化,采取最有可能的动作,即
。 你现在这个概率就是事先决定好的。通常情况下,强化学习一般使用随机性策略。
- 在学习时可以通过引入一定随机性来更好地探索环境;随机性策略的动作具有多样性,这一点在多个智能体博弈时也非常重要。采用确定性策略的智能体总是对同样的环境做出相同的动作,会导致它的策略很容易被对手预测。
无模型和有模型:
- 无模型:在实际的强化学习任务中,很难知道环境的反馈机制,如状态转移概率、环境反馈的回报等。这时候只能使用不依赖环境模型的方法,这种方法叫做无模型方法,如蒙特卡洛、时序差分法都属于此类方法。
- 有模型:假定智能体与环境交互过程中,环境的反馈机制已知,或者假定智能体已经对环境进行了建模,能在智能体内部模拟出于环境相同或近似的状况。即:知道环境在任一状态
,接受任一行为
,转移到任一状态
的概率,和在任一状态
,接收任意行为
得到的回报
。这种在已知模型的环境中学习及求解的方法叫作模型方法,如动态规划。
- 两者的区别主要在于是否需要对于真实的环境进行建模,model-free不需要对于环境进行建模,直接与真实环境进行交互即可,所以其通常需要较大的数据或者采样工作来优化策略,这也帮助model-free对于真实环境具有更好的泛化性能; 而model-based 需要对于环境进行建模,同时再真实环境与虚拟环境中进行学习,如果建模的环境与真实环境的差异较大,那么会限制其泛化性能。现在通常使用model-free进行模型的构建工作。
基于值函数和基于策略函数:
- 基于值函数:求解时仅估计状态函数,不去估计策略函数,最优策略在对值函数进行迭代求解时间接得到。如:动态规划、蒙特卡罗、时序差分、值函数逼近法。
- 基于策略函数:最优行为或策略直接通过求解策略函数产生,不去求解各状态值的估计函数。所有的策略函数逼近方法都属于基于策略的方法,包括蒙特卡罗策略梯度、时序差分策略梯度等。
on-policy和off-policy:on-policy和off-policy最本质的区别是更新
值使用的方法是使用既定的策略(on-policy)还是使用新策略(off-policy)。
- on-policy:生成样本的策略跟网络更新参数时使用的policy相同。典型为SARAS算法,基于当前的策略直接执行一次动作选择,然后用这个样本更新当前的策略,因此生成样本的policy和学习时的policy相同。
- off-policy:生成样本的策略跟网络更新参数时使用的策略不同。典型为Q-learning算法,计算下一状态的预期收益时使用了max操作,直接选择最优动作,而当前策略不一定能选择到最优动作,因此这里生成样本的策略和学习时的策略不同。off-policy先探索某概率分布下的大量数据,从这些最优策略的数据中寻求目标策略。虽然收敛慢,但是数据更具有全面性。
2,马尔可夫决策
2.1,马尔可夫过程
如果某一状态信息蕴含了所有相关的历史信息,只要当前状态可知,所有的历史信息都不再需要,即当前状态可以决定未来,则认为该状态具有马尔可夫性。例如,围棋未来的走法只和当前棋面有关,知道历史棋面信息对于当前该怎么走没有多大帮助。因此围棋的棋面是马尔可夫的,它已经涵盖了导致这种局面的所有重要信息。
即下一个状态只取决于当前状态,而不会受到过去状态的影响。
凡是具有马尔可夫性的随机过程都叫马尔可夫过程,又叫马尔可夫链。它是一个无记忆的随机过程,可以用一个元组
表示,其中
是有限数量的状态集,
是状态转移概率矩阵。假设一共有
个状态,此时
。状态转移矩阵
定义了所有状态对之间的转移概率,即
矩阵中第
行第
列元素
表示从状态
转移到状态
的概率,我们称
为状态转移函数。从某个状态出发,到达其他状态的概率和必须为 1,即状态转移矩阵
的每一行的和为 1。
例如天气,马尔可夫性限制的模型仅表示晴天可以跟着雨天的情况下,具有相同概率,无论过去的天气是晴还是阴。这不是一个非常现实的模型,因为从常识知道明天下雨的机会不仅取决于当前的情况,还取决于季节、纬度和地区等。因为我们设计的系统模型符合马尔可夫性,可以用使用转换矩阵捕获转换概率,转换矩阵是一个N*N的方阵,其中N是模型中的状态数。矩阵中的i行和j列中的每个单元包含系统从状态i转换到状态j的概率。
晴天 雨天 晴天 0.8 0.2 雨天 0.1 0.9 在这种情况下,如果有一个晴天,那么第二天将有80%的可能性是晴天,20%的可能性是雨天。如果观察到一个雨天,那么天气变好的概率为10%,第二天下雨的可能性为90%。
很多强化学习问题的关键假设就是Agent与环境间的交互可以被看成一个马尔可夫决策过程(MDP),因此强化学习的研究主要集中于对马尔可夫问题的处理。马尔可夫决策过程的本质:当前状态向下一状态转移的概率和奖赏值只取决于当前状态和选择的动作,而与历史状态和历史动作无关。
在强化学习过程中,智能体通过观察其与环境交互改善自己的行为。在时刻点
处观察某个系统,一个有限的Maakrov决策过程是五元组:
其中
为系统的状态空间,对
,
是在状态
下所有可能动作集合。
为报酬函数,
是目标函数。若转移概率函数
和报酬函数
与决策时刻
无关,即不随时间段的变化而变化,则称是平稳的,此时MDP称为平稳的MDP。
2.2,马尔可夫奖励过程
为了引入奖励,需要扩展马尔可夫过程模型。首先,需要从状态到状态的过渡增加一个标量,表示奖励值。其次就是在模型中添加折扣因子
。使用折扣因子是为了在计算当前状态的累计回报时,将未来时刻的立即回报也考虑进来。这种做法类似于人类追求眼前利益的同时,也会考虑具有不确定性的远期利益。
马尔可夫过程中将观察到一系列状态转换,马尔可夫奖励过程仍是如此,但对每次转换,都有一定奖励值的损失。所以现在,所有的观察都有一个奖励值附加到系统的每个转换。对于每一个episode,这里定义时间
的收益为:
对于每个时间点,都将收益计算为后续奖励的总和,但是更远的奖励乘以在时间
离开起点的步数增加的折扣因子。折扣因子代表智能体的前瞻性,如果
等于1,则收益
恰好等于所有后续奖励的总和,表明偏重考虑远期的利益,对应于任何后续奖励的完全可见性的智能体(会导致奖励无限制)。如果
等于0,收益
将只是立即奖励而没有任何后续状态并且对应于绝对短视。参数
在RL中非常重要,可以把它看作是衡量展望未来有多远来估计未来回报的一个标准:越接近1,面前的步数就就越多。
- 有些马尔可夫过程是带环的,它并没有终结,可以避免这个无穷的奖励。
- 并没有建立一个完美的模拟环境的模型,也就是说,对未来的评估不一定是准确的,不一定完全信任的模型,因为这种不确定性,所以对未来的预估增加一个折扣。想把这个不确定性表示出来,希望尽可能快地得到奖励,而不是在未来某一个点得到奖励。
- 如果这个奖励是有实际价值的,可能是更希望立刻就得到奖励,而不是后面再得到奖励(现在的钱比以后的钱更有价值)。
- 在人的行为里面来说的话,大家也是想得到即时奖励。
【折扣因子例子】我现在给你100和1年后给你100,你肯定选择现在100;但是现在给你80,未来给你120,选择就可能持平了,未来的100不如现在的100好,但是未来的120可能跟现在的80一样,这就是为啥需要折扣因子。
这个回报量
在实践中并不是很有用,因为它从马尔可夫奖励过程中观察到的每个特定链条所定义的,因此即使对于同一个状态,它也可以有很大的不同。但是,如果分析一个极端情况,计算任何状态的回报的数学期望(评估平均大量的链),这里将获得更有用的数量,称为状态值:
对于每个状态
,值
是通过按马尔可夫奖励过程得到的平均(或预期)回报。
状态值函数还有另外一种形式:
写成矩阵的形式:
但实际上,解析解的计算复杂度是
,
是状态个数,所以这种方法只适用很小的马尔可夫奖励过程。求解较大规模的马尔可夫奖励过程中的价值函数,我们可以使用动态规划(Dynamic Programming),蒙特卡洛法(Monte-Carlo method),时序差分法(Temporal Difference)。
def compute(P, rewards, gamma, states_num): ''' 利用贝尔曼方程矩阵形式计算解析解,states_num是MRP的状态数 ''' rewards = np.array(rewards).reshape((-1,1)) #rewards写成列向量形式 value = np.dot(np.linalg.inv(np.eye(states_num, states_num) - gamma * P), rewards) return value V = compute(P, rewards, gamma, 6) print("MRP中每个状态价值分别为\n", V)
下图是一个具有 6 个状态的马尔可夫过程的简单例子。其中每个绿色圆圈表示一个状态,每个状态都有一定概率(包括概率为零)转移到其他状态,其中
通常被称为终止状态(terminal state),因为它不会再转移到其他状态,可以理解为它永远以概率 1 转移到自己。状态之间的虚线箭头表示状态的转移,箭头旁的数字表示该状态转移发生的概率。从每个状态出发转移到其他状态的概率总和为 1。比如说,
有 90%概率保持不变,有 10%概率转移到
,而在
又有 50%概率回到
,有 50%概率转移到
。
可以写出这个马尔可夫过程的状态转移矩阵:
如果我们选取
为起始状态,设置
,采样到一条状态序列为
,就可以计算
的回报
,得到:
import numpy as np np.random.seed(0) # 定义状态转移概率矩阵P P = [ [0.9, 0.1, 0.0, 0.0, 0.0, 0.0], [0.5, 0.0, 0.5, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.6, 0.0, 0.4], [0.0, 0.0, 0.0, 0.0, 0.3, 0.7], [0.0, 0.2, 0.3, 0.5, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 1.0], ] P = np.array(P) rewards = [-1, -2, -2, 10, 1, 0] # 定义奖励函数 gamma = 0.5 # 定义折扣因子 # 给定一条序列,计算从某个索引开始到序列最后得到的回报 def compute_return(start_index, chain, gamma): G = 0 # for i in reversed(range(start_index, len(chain))): # G = gamma * G + rewards[chain[i] - 1] # 代码中从0开始 for i in range(start_index, len(chain)): G += gamma ** i * rewards[chain[i] - 1] return G # 一个状态序列,s1-s2-s3-s6 chain = [1, 2, 3, 6] start_index = 0 G = compute_return(start_index, chain, gamma) print("根据本序列计算得到回报为:%s" % G)
2.3,马尔可夫决策过程
首先,添加一组必须是有限的动作(A),这是智能体的动作空间。然后需要用动作来调节这里的转换矩阵,这基本意味着该矩阵需要一个额外的动作维度,将它变成三维。智能体不再被动地观察状态转换,而是可以每次都主动选择要采取的动作。因此,对于每个状态,没有数字列表,而是一个矩阵,它的深度维度包含智能体可以采取的动作,另一个维度是目标状态系统将在执行此动作后跳转到的状态,它通过智能体来执行。
策略是一组控智能体行为的规则。即使对于相当简单的环境,也可以制定各种策略,策略的不同进而导致访问不同的状态集,得到不同收益。RL中智能体的主要目标是尽可能多地收集收益(定义为折扣累计奖励)。因此,找到一个好的策略变得很重要。形式上,策略被定义为每种可能状态的动作上的概率分布:
如果策略是固定的而不是动态的,那么马尔可夫决策过程就变成了马尔可夫奖励过程,因此可以通过策略的概率减少转换和奖励矩阵并摆脱动作维度。
3,贝尔曼方程
3.1,概述
马尔可夫决策过程为强化学习问题提供了基本的理论框架,几乎所有的强化学习问题都可以用马尔可夫决策过程(MDP)进行建模,而贝尔曼方程则是用来求解马尔可夫决策过程问题时用到的最基础的方程。
贝尔曼方程也称为动态规划方程,其基本思想是将待求解问题分解成若干个子问题,从这些问题的解得到原问题的解。
【例1】根据策略计算值
- 智能体总是向下:
- 智能体总是向右:
- 智能体50%向右,50%向下:
- 智能体10%向右,90%向下:
上面例子中,可能会产生错误的想法,即应该始终采取最高奖励的动作。一般来说,并非如此简单。
- 智能体总是向下:
- 智能体总是向右:
- 智能体50%向右,50%向下:
- 智能体10%向右,90%向下:
3.2,贝尔曼期望方程
状态值函数
: 表示从状态
开始,遵循当前策略
时所获得的的期望回报:
其中,
变成
,因为回报的期望等于回报期望的期望。
即,证明:
从结果来看,
分解成了两部分,第一部分是该状态下的立即回报奖励,该项是常数项,因此立即回报期望等于立即回报
本身;第二部分是下一时刻状态函数的折扣期望。
状态行为值函数
:它等于通过在状态
中执行动作
可以获得的总奖励期望。
(1)基于状态
,采取动作
,求
在遵循策略
时,状态
的值函数体现在为该状态下采取所有可能行为的价值
与行为发生概率
的乘积的和(通过定义可以直接理解)。
(2)采取行为
,状态转变至
,求
在遵循策略
时,行为状态价值
体现为两项之和。第一项是取行为
后,获得的立即回报
,第二项是所有可能的状态值
乘以状态转移概率
代衰减求和。
(3)基于状态
,采取行为
,状态转变至
,求
结合(1)(2)可得:
(4)采取行为
,状态转变至
,采取行动
,求
结合(1)(2)可得:
3.3,贝尔曼方程求解
假设存在如下求职马尔可夫决策过程:
【步骤一】求解状态值:设
分别表示(Java开发,人工智能,机器学习,强化学习,深度学习),折扣因子为 1,
,根据状态值公式(3):
可列出:
求解方程组可得:
【步骤二】求解状态值:折扣因子为 1,
,根据状态值公式(2):
.......
可以通过矩阵求逆把这个
的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是
。所以当状态非常多的时候,比如说从十个状态到一千个状态,到一百万个状态。那么当有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的矩阵,这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去求解的方法只适用于很小量的 MRP。
3.4,最优的Bellman方程
贝尔曼最优方程表达的是当前最优值函数(或最优行为值函数)和它后继最优值函数(或最优行为值函数)的关系,以及最优值函数和最优行为值函数之间的关系。
其中,最优值函数
是指在所有策略中最大的值函数,即:
相应地,最优行为值函数
是指所有策略中最大的行为值函数:
(1)基于状态
,采取动作
,求取
当前状态的最优值函数
等于从该状态
出发,采取的所有行为中对应的那个最大的行为为值函数。
最佳价值函数的定义为:
即我们去搜索一种 policy
来让每个状态的价值最大。
就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy),即
。Optimal policy 使得每个状态的价值函数都取得最大值。所以如果我们可以得到一个 optimal value function,就可以说某一个 MDP 的环境被解。在这种情况下,它的最佳的价值函数是一致的,就它达到的这个上限的值是一致的,但这里可能有多个最佳的 policy,就是说多个 policy 可以取得相同的最佳价值。
(2)基于状态
,采取动作
,求取
在某个状态
下,采取某个行为的最优价值
由两部分组成,部分是离开状态
的立即回报
,另一部分则是所有能达到的状态
的最优状态价值
按出现的概率求和:
(3)基于状态
,采取行为
,状态转变至
,求
结合(1)(2):
(4)采取行为
,状态转变至
,采取行动
,求
结合(1)(2):
3.5,最优策略求解
强化学习:定一个一离散时间的折扣马尔可夫决策过程
,其中
为状态集,
为动作集,
是转移概率,
为回报函数,
为折扣因子。
为时间步,
为一个轨迹序列,
,对应的累计回报为
。则强化学习的目标是:找到最优策略
,使得该策略下的累计回报期望最大,即
最优策略:对于任何状态
,当且仅当遵循策略
的价值不小于遵循策略
的价值时,则称策略
优于策略
,即:
对于任何MDP(马尔可夫过程),存在一个最优策略,即满足如下公式:
每个策略对应着一个状态价值函数,最优策略自然对应着最优状态值函数。
求解最优策略:根据策略最优定理可知,当值函数最优时采取的策略也是最优的;反过来,策略最优时值函数也最优,所以可以通过求取最优值函数
或
来求取最优策略。
如果拥有(后续:值迭代法)
,基于每一个状态
,做一步搜索,一步搜索之后,出现的最优行为将会是最优的,对应的最优行为集合就是最优策略。
如果拥有最优行为值函数
,则求解最优策略将变得更为方便。对于任意的状态
,直到找到最大化
对应的行为,最优策略求取公式:
对于任何MDP问题,总存在一个确定性的最优策略,找到最优行为价值函数,就相当于找到了最优策略。
4,动态规划
4.1,基本原理
动态规划是求解决策过最优化的数学方法,其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。适合于用动态规划求解的问题,经分解得到的子问题往往不是互相对立的,因次解决子问题的时候,其结果通常需要存储起来以解决后续复杂问题。这样就可以避免大量的重复计算,节省时间。
当问题具有以下特征时,可以考虑使用动态规划来求解:
- 一个复杂的最优解由数个小问题的最优解构成,可以通过寻找子问题的最优解来得到复杂问题的最优解。
- 子问题在复杂问题内重复出现,使得子问题的解可以被存储起来重复利用。
马尔可夫决策过程(MDP)具有上述两个特性。贝尔曼方程把问题问题递归为求解子问题,价值函数相当于存储了一些子问题的解,可以复用。因此可以使用动态规划来求解马尔可夫决策过程(MDP)。
使用动态规划算法求解马尔可夫决策过程(MDP)模型,也就是在清楚模型结构(包括状态转移率、回报率等)的基础上,用动态规划方法来进行策略评估和策略改进,最终获得最优策略。
- 策略评估(预测):给定一个马尔可夫决策过程模型MDP:
和一个策略
,要求输出基于当前策略
的所有状态的值函数
。
- 策略改进(控制):给定一个马尔可夫决策过程模型MDP:
和一个策略
,要求确定最优值函数
和最优策略
。
4.2,策略评估
策略评估要解决的问题是,给定一个策略
,如何计算在该策略下的值函数
。因为实际中涉及的马尔可夫模型规模一般比较大,直接求解效率低,因此可使用迭代法进行求解。考虑应用贝尔曼期望方程进行迭代:
状态
处的值函数
,可以利用后继状态
的值函数
来表示,依次类推。
初始所有状态值函数(
)全部为:0 ,第 k+1 次迭代求解
时,使用第
次计算出来的值函数
更新计算
。迭代时使用公式如下:
对于模型已知的强化学习算法,概率和回报都是已知数,唯一的未知数是值函数,因此该方法通过反复迭代最终将收敛。
4.3,策略改进
计算值函数的目的是利用值函数找到最优策略。既然值函数已经获得,接下来要解决的问题是如何利用值函数进行策略改善,从而得到最优策略。
一个很自然的方法是针对每个状态采用贪心策略对当前策略进行改进,即:
其中,
在当前策略
的基础上,利用贪心算法选取行为,直接将所选择的动作改变为当前最优的动作。
令动作改变后对应的策略
,
为在状态
下遵循策略
选取的动作,同理
为在状态
下遵循策略
选取的动作。改变动作的条件是
,则可得到(详细证明在后面):
可见,值函数对于策略的每一点改进都是单调递增的,因此对于当前策略
,可以放心地将其改进。
直到
与
一致,不再变化,收敛至最优策略。
贪心这个词在计算机领域是指在对问题求解时,总是做出在当前看来是最好的选择,不从整体最优上加以考虑,仅对短期行为(即一步搜索)求得局部最优解。将贪心算法应用在强化学习中求解最优策略函数实际上可以获得全局最优解,因为贪心策略公式中的值函数
已经考虑了未来的回报。因此在策略改进时,可以放心使用贪心算法求得全局最优解。
4.4,策略迭代
将策略评估算法和策略改进算法合起来便有了策略迭代算法。策略迭代算法通常由策略评估和策略改进两部分构成:
- 在策略评估中,根据当前策略计算值函数。
- 在策略改进中,通过贪心算法选择最大值函数对应的行为。
策略评估和策略改进两部分交替进行不断迭代。
- 假设我们有一个初始策略
,策略迭代算法首先评估该策略的价值(用
表示),得到该策略的价值函数
或
,
- 下一步,策略迭代算法会借助贪心算法对初始策略
进行改进(用
表示),得到
。接着对改进后的策略
进行评估,在进一步改进当前策略,如此循环迭代,直到策略收敛至最优。
其中,
为初始策略,
表示策略评估,
表示策略改进。策略评估过程中,对于任意的策略
,通过贝尔曼方程进行迭代计算得到
。
策略改进部分,用贪心算法得到更新策略:
或
在策略评估过程中,往往需要等到值函数收敛之后才能进行策略改进,这其实是没有必要的。可以在进行一次策略评估之后就开始策略改进,如此循环往复执行这两个过程,最终会收敛到最优值函数和最优策略。
广义策略迭代(generalized policy iteration:GPI):
- GPI包含两个过程:策略评估和策略改进,两者可以以各种粒度交错进行。(如:值函数收敛之后进行策略改进,也可以进行一次策略评估之后就开始策略改进)
- 几乎所有强化学习方法都可以被描述为GPI,是一个普遍的方法。
- 评估、改进过程稳定,不再发生变化,则得到最优值函数和最优策略。
- 评估、改进过程可看作竞争与合作的过程,都把对方往相反地方拉,最终得到最优解。
- 直接朝着一个目标会导致远离另一个目标。联合过程更接近优化总目标。
4.5,策略迭代(案例)
当智能体位于网格世界边缘时,任何使其离开网格世界的行为都会使其停留在当前位置。当智能体位于宝藏区时,则无论采取何种行为,均会产生0回报,且位置不变。使用策略迭代法对此问题求解,假设初始策略为均匀随机策略:
(1)首先评估给定随机策略下的值函数,使用贝尔曼期望方程迭代计算直至值函数收敛。初始化所有状态值函数为0,使用如下公式进行迭代值函数:
注意,
表示当前状态的期望,而不是目标状态的期望。
表示目标状态的状态值。
......
(2)使用如下公式:
对收敛的值函数
,使用贪心算法进行策略改进,求取
对应的改进后策略
,则有
:
......
继续使用贝尔曼期望方程求取当前策略
下的值函数,直至值函数收敛,过程同(1):
针对值函数
进行第二次策略改善,得到
继续求取
对应的值函数(策略评估),针对收敛的值函数
进行改进,得到
经过三次策略改进,策略收敛。
4.6,值迭代
策略迭代算法在每次进行策略评估时,采用贝尔曼期望方程更新值函数。而值迭代算法借助的是贝尔曼最优方程,直接使用行为回报的最大值更新原来的值。
值迭代算法将策略改进视为值函数的改善,每一步都求取最大的值函数,即:
假设在状态
下,有一个初始值函数
,基于当前状态,有多个可选行为
。每个行为
会引发一个立即回报
,一个或多个状态转移,如从状态
转换至状态
。不同状态
对应有不同的值函数
整个的
称为
的回报。值迭代直接使用所有行为引发的行为回报中取值最大的那个值来更新原来的值,得到
。如此迭代下去,直至值函数收敛,整个过程没有遵循任何策略。
虽然算法中没有给出明确的策略,但是根据公式:
可以看出策略迭代改进是隐含在值迭代过程中执行的。
4.7,值迭代(案例)
在进行一次策略评估(即求出当前策略下的值函数)之后就进行策略改进,这种方法被称为值函数迭代算法。即,在每次进行值函数计算时,直接选择那个是的值函数最大的行为。