本章将开始介绍「强化学习」与适应性控制。在监督学习中,对于训练集我们均有明确的标签,算法只需要模仿训练集中的标签来给出预测即可。但对于某些情况,例如序列性的决策过程和控制问题,我们无法构建含有标签的训练集。即无法提供一个明确的监督学习算法来进行模仿。
在强化学习的框架下,我们只会给出一个「奖励函数」(reward function),该函数会告知学习程序(leaning agent)什么时候的动作是好的,什么时候的是不好的。算法的工作是找出随着时间推移如何选择动作来得到最大的奖励。
强化学习已经成功用于多种场景,包括:无人直升机的自主飞行、机器人行走、手机网络路由、市场策略选择、工厂控制、高效率的网页索引等。我们将从「马尔可夫决策过程」开始介绍强化学习,其给出了强化学习问题的常见形式。
1 马尔可夫决策过程
一个马尔可夫决策过程是一个五元组
,其中:
是一个「状态」集。例如在无人直升机的自主飞行中,
可以是直升机所有可能的位置与方向;
是一个「动作」集。例如你可以推动直升机控制摇杆的所有方向;
是状态转移概率,对于每个状态
以及动作
,
为状态空间上的分布。简单来说,
给出当我们在状态
采取了行动
时,下一个状态的分布;
被称为「折扣因子」(discount factor);
为「奖励函数」。有时候奖励函数被写作仅与状态
相关,即
。
马尔可夫决策过程(MDP)的执行如下:我们从某个状态
开始,选择某个动作
来执行 MDP;作为选择的结果,MDP 的状态将随机转移到某个后继状态
;然后,我们需要选择另一个动作
,作为结果,状态会转移至
;接下来再选择一个动作
,以此类推。
该过程可以用下图表示:
遍历序列中的所有状态和动作,总的收益为:
当将奖励函数仅与状态相关时,收益变为:
本章将主要使用简单的状态奖励函数
,推广至
并不困难。
在强化学习中,我们的目标就是找到一组动作,来最大化总收益的期望:
注意在时间步
的奖励通过参数
进行了缩减。因此,为了使得期望较大,我们希望尽可能早地积累正奖励,尽可能推迟负奖励。
「策略」(policy)指的是将状态映射为动作的任意函数
。任意时刻,当我们处在状态
,我们采取了行动
,则我们执行了策略
。我们定义一个策略
的「值函数」为:
即为从状态
开始,根据策略
选择动作所积累的折扣奖励函数的期望。注意
并非随机变量,上述表示只是一种习惯。
给定一个策略
,其值函数满足「贝尔曼等式」:
这表示期望和由两部分组成:
贝尔曼等式可以用于求解
。在一个有限状态的 MDP 中,我们可以对于每个状态
写出其
的等式,这可以给出一个含有
个变量的
个线性方程,用于进行求解,变量即每个状态的未知
。
我们定义「最优值函数」为:
其表示在所有策略中,可以得到的最大期望和。该函数同样满足贝尔曼等式:
第一部分与之前一样,为即时奖励;第二部分为所有动作中最大的未来期望和。
我们可以定义策略
为:
给出了动作
来使得
式最大化。
根据上述定义,我们可以推导出如下事实:对于每一个状态
和每一种策略
,都有:
这个公式表明
式中定义的策略即为最优策略。注意
有一个有趣的特性:其为所有状态
的最优策略,因为其定义为状态集到动作集的映射。这意味着无论 MDP 的初始状态是什么,我们都可以使用同样的最优策略
。
2 值迭代和策略迭代
下面介绍求解有限状态 MDP 的两种高效算法:值迭代和策略迭代。我们目前只考虑「有限」状态和动作空间的 MDP。
2.1 值迭代
值迭代算法的流程为:
- 对于每个状态
,初始化
- 重复下述过程直至收敛:对于每个状态
,更新
该算法可以理解为不断更新
式中的值函数。算法的内循环有两种更新方法:
,然后全部替换旧的值
不论是异步还是同步更新,值迭代算法最终都会使
收敛至
。得到了
,我们就可以利用
式来找出最优策略。
2.2 策略迭代
策略迭代的流程为:
- 随机初始化
- 重复下述过程直至收敛:
,更新
可以看到,该算法在内循环中计算当前策略的值函数,然后使用当前值函数更新策略。该步骤中找出的策略也被称为关于
的「贪婪策略」。在有限次数的迭代后,
将收敛至
,
将收敛至
。注意:在内循环第一步中值函数的求解方式如之前所述,为含有
个变量的线性方程组。
值迭代和策略迭代是求解 MDP 的标准算法,目前没有好坏之分。一般对于较小的 MDP,策略迭代往往更快,迭代次数较少;而对于较大状态空间的 MDP,求解
相对较难,通常使用值迭代。在实际应用中,值迭代比策略迭代要使用得更加频繁(因为实际问题中状态通常较多)。
3 马尔可夫过程的模型学习
在实际问题中,我们无法得知状态转移概率和奖励函数,因此需要基于「数据」来进行估计。例如我们进行了一系列实验,得到如下所示的一系列马尔可夫过程:
其中
表示实验
的时间点
的状态,其对应的动作为
。在实际中,每个实验可以运行至马尔可夫过程终止,或某个较大但有限的时间点。
基于上述"经验",我们可以利用极大似然估计来求出状态转移概率:
如果比例为
,则使用
替代。当我们进行更多的实验,得到更多的"经验"时,我们可以用一种较高效的方法来更新状态转移概率:具体来说,我们可以记录上式的分子与分母值,新的数据直接在旧数据的基础上累加即可。类似地,如果奖励函数
未知,我们可以用状态
的「期望即时奖励估计」
来作为其平均奖励。
在学习出 MDP 的模型后,我们可以使用值迭代或策略迭代来求解 MDP,找出最佳策略。例如,将模型学习和值迭代结合在一起,我们可以得出下面的算法,用于未知概率转移矩阵的 MDP 的学习:
- 随机初始化
- 重复下述过程:
若干次来得到样本(下一步的状态通过观察得到)
(以及
,如果需要)
- 基于估计的状态转移概率和奖励函数应用值迭代算法,得到一个新的
的估计
为关于
的贪婪策略
对于该算法,可以通过下述手段来使其运行更快:在第二步的值迭代的内循环中,每次不初始化
为 0,而初始化为上一次外循环中得到的结果。
4 连续状态马尔可夫决策过程
到目前为止,我们都在讨论有限数量状态下的 MDP,现在我们将开始讨论「无限状态」下的 MDP (
)。
4.1 离散化
求解连续状态 MDP 的最简单的方法就是「离散化状态空间」,然后使用之前提到的值迭代或状态迭代算法。例如,对于一个二维状态
,我们可以用一个网格来进行离散化:
每一个网格细胞代表一个独立的离散状态
,然后我们就可以用一个离散状态的 MDP
来估计连续状态下的 MDP,使用值迭代或策略迭代来求解
和
。当实际的系统处于某个连续值的状态
时,我们先计算其对应的离散状态
,然后执行最优策略
。
离散化的方法对很多问题都有较好的效果,但其存在两点不足:
第一点是对
和
的表达过于 naive,即假设其在离散的区段上取值不变。例如下面的线性回归问题,如果使用离散化来表达,则得到如下结果:
可以看出离散化对光滑数据的拟合并不好,我们可能需要更加精确的离散化(非常小的网格)来获得精确的估计。
第二点是「维度诅咒」(curse of dimensionality)。假设
,且我们将每个维度的状态离散化为
个值,则总的离散状态数为
。其随着维数的增加呈指数上升趋势,难以推广至大型问题。从经验上来说,离散化对 1 维和 2 维问题的效果最好,如果注意离散化的方法,则其对 4 维以下问题也效果不错,如果你特别牛批,甚至能应用到 6 维问题,再高的话基本上就不行了。
4.2 值函数近似
下面介绍另一种直接在连续状态 MDP 中寻找最佳策略的方法。我们将直接估计
,而不去进行离散化。该方法称为「值函数近似」,已经成功应用于许多强化学习问题。
4.2.1 使用一个模型或模拟器
为了设计一个值函数估计算法,需要先假设我们有一个「模型」(或「模拟器」)。对于 MDP,通俗来说,模拟器就是一个黑盒子,接收输入状态
(连续值)和动作
,根据状态转移概率
输出下一个状态
,:
我们有多种方式来得到上述模型。第一种方法是使用物理模拟。例如使用软件包来对某些问题进行物理描述,进行模拟;第二种方法是从已有的数据中进行学习。例如,假设我们在一个 MDP 中执行
次「试验」,每次试验包含 T 个时间步,动作的选择可以随机或是执行某种特定的策略,或是其他方式。然后,我们会得到如下的
个观察序列:
我们会使用一个学习算法来将
表示为
和
的函数。一种可能的线性模型如下:
我们可以使用试验中收集到的数据来估计参数:
学习到了
和
后,一种选择是建立一个「决定性」模型,即给定输入
和
后,输出
,例如式
;另一种选择是建立一个「随机」模型,即
是输入的随机函数:
其中
是噪声项,分布为
,
也可以从数据中学习。
需要注意,上面我们所列举的都是「线性」模型,实际上非线性模型(例如定义
)或非线性学习算法(例如局部加权线性回归)都可以用于构建模拟器。
4.2.2 拟合值迭代
下面介绍用于估计连续状态 MDP 值函数的「拟合值迭代」算法。这里假设状态空间连续,但动作空间较小且离散(一般来说,动作集的离散化相对容易很多)。
在值迭代中,我们会进行如下更新:
注意这里对于连续值需使用积分。拟合值迭代的主要思想就是:基于有限的状态样本
对上述过程进行估计。
具体来说,我们会使用一个监督学习算法(线性回归),将值函数用状态的线性或非线性函数估计:
其中
是状态的某种适当的特征映射。
对于
个有限状态样本中的每一个状态
,拟合值迭代会先计算一个量
,作为对
的估计,然后使用监督学习算法尝试去让
接近
(即接近
),从而学习出参数
。
具体来说,算法的过程如下:
- 随机采样
个状态
- 初始化
- 重复下述过程:
。在本算法中,我们希望
,使用监督学习算法:
上述算法使用了线性回归,实际上其他的回归算法也可以使用,如加权线性回归。
与离散状态集的值迭代不同,拟合值迭代并不一定总是会收敛。不过在实际应用中,其通常会收敛(或近似收敛)。需要注意的是,如果我们使用「决定性」模型(模拟器),那么算法中
,因为下一个状态只有一个确定的值;否则我们需要取
个样本并求均值(即随机模型)。
最终,拟合值迭代输出
,其为对
的估计。由于状态集连续,所以我们无法直接给出针对所有状态的完整最优策略,而是根据特定的状态选择特定的动作。当系统处于状态
时,可以通过下面的公式来选择动作:
上式计算的过程与算法的内循环类似,对于每一个动作,我们采样
,类似地,如果使用决定性模型,则
。
在实际应用中,还有其他方法来估计上述值,例如:如果模拟器的形式为
,其中
是某个决定性函数(如
),
是 0 均值高斯噪声,则可以通过下述公式选择动作:
可以理解为令
(忽略模拟器中的噪声)及
。我们也可以通过下述公式推导:
其中期望是针对
的。第一步可以参考 Jensen 不等式(只要噪声项很小,则估计一般合理)。对于无法使用上述估计方法的问题,则可能需要采样
个样本,这通常计算量较大。
5 思维导图