强化学习(reinforcement learning)是受行为心理学启发的一个机器学习领域,其研究的是智能体(agent)如何在一个环境(environment)中采取动作(action)以最大化我们想要的奖励(reward)。这是一个涵盖领域非常广的问题,也在博弈论、控制论、信息论、运筹学、基于模拟的优化、多代理系统、集群智能、统计学和遗传算法等许多学科领域得到了研究。在运筹学和控制论领域,强化学习方法所在的领域被称为近似动态规划。
1956年Bellman提出了动态规划方法。
1977年Werbos提出只适应动态规划算法。
1988年sutton提出时间差分算法。
1992年Watkins 提出Q-learning 算法。
1994年rummery 提出Saras算法。
1996年Bersekas提出解决随机过程中优化控制的神经动态规划方法。
2006年Kocsis提出了置信上限树算法。
2009年kewis提出反馈控制只适应动态规划算法。
2014年silver提出确定性策略梯度(Policy Gradients)算法。
2015年Google-deepmind 提出Deep-Q-Network算法。
可见,强化学习已经发展了几十年,并不是一门新的技术。在2016年,AlphaGo击败围棋世界冠军李世石之后,融合了深度学习的强化学习技术大放异彩,成为这两年最火的技术之一。总结来说,强化学习就是一个古老而又时尚的技术。
我们先看看机器学习的分类:
可以看出机器学习包括三大类:有监督学习、无监督学习和强化学习。
回顾下前面课程讲过的有监督学习和无监督学习:
(1)有监督学习:又称为有导师的学习,即人工给定一组数据,每个数据的属性值也给出,对于数据集中的每个样本,想要算法预测并给出正确答案。以任务为驱动,主要包括两类问题:回归问题,分类问题。
(2)无监督学习:又称为无导师学习,数据一般是没有标签的。以数据为驱动,包括聚类等。
那么,什么是强化学习呢?
强化学习(Reinforcement Learning, RL) 主要用于决策和控制领域,比如下棋,开车等;根据输入信息确定行为。要解决的核心问题是在环境中执行动作以获得最大的累积奖励。
强化学习是基于当前环境的条件,而执行一个行动,以取得最大化的预期利益。其灵感源自于行为主义心理学,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的惯性行为。比如:在训练狗狗站起来时,如果狗狗站起来就给它奖励,如给它肉条吃,如果不站起来就给它一些惩罚,如用鞭子打它,这样的话,通过不断的强化,从而让狗能够学会站起来这个动作。
强化学习也是如此,就是给很多样本去学习算法,但是对于样本没有给出对错,你执行完样本后最后给出一个反馈,然后算法通过调整策略和行为来达到最优的状态。
因此,相比于有监督学习和无监督学习,强化学习有以下特点:
(1)没有监督数据,只有奖励信号;
(2)奖励信号不一定是实时的,而很可能是延后的,即一般具有延时性;
(3)时间(序列) 是一个重要因素,即强化学习的每一步与时间顺序前后关系紧密;
(4)当前的行为影响后续接收到的数据;
当前,强化学习在诸多领域内都得到广泛的应用,包括金融、医疗、教育、计算机视觉、自然语言处理等领域。
强化学习是根据当前的条件作出决策和动作,以达到某一预期目标。
智能体(Agent) 是强化学习中的动作实体,处于某一环境 中。在每个时刻,智能体和环境都有自己的状态。智能体根据当前状态确定一个动作,并执行该动作。之后它和环境进入下一个状态,同时系统给它一个反馈值,对动作进行奖励或惩罚,以迫使智能体执行正确的动作。
(1)奖励 Reward
奖励 R t R_t Rt是信号反馈,是一个标量,反映智能体在 t t t时刻做得怎么样。智能体的目标是最大化累积奖励。
强化学习主要基于这样的“奖励假设”:所有的目标都可以被描述成最大化累积奖励。
例子:玩游戏时分数的增加/减少。
(2)序列决策 Sequential Decision Making
目标:选择一系列动作来最大化未来的总体奖励;
这些动作可能产生长期的后果;
奖励可能是延迟的;
为了获得更多的长期奖励(long-term reward),有时会牺牲即时奖励(immediate reward);
例子:下棋,每一步棋没有奖励,只有在棋局结束时才有输/赢的反馈;
(3)智能体和环境 Agent and Environment
上图中,大脑代表智能体,地球代表环境。
(4)历史和状态 History and State
历史是观测(observations)、动作(actions)和奖励(rewards)的序列:
H t = O 1 , R 1 , A 1 , . . . , A t − 1 , O t , R t H_t = O_1,R_1,A_1,...,A_{t-1},O_t,R_t Ht=O1,R1,A1,...,At−1,Ot,Rt
历史决定接下来发生什么:
①、智能体选择动作;
②、环境选择观测/奖励;
状态是用来决定接下来发生什么的信息,是关于历史的一个函数:
S t = f ( H t ) S_t = f(H_t) St=f(Ht)
状态分为:环境状态、智能体状态和信息状态, 它们的含义分别如下所述:
①、环境状态 S t e S^e_t Ste是环境的私有表示,即环境用来决定下一个观测/奖励的所有数据,对智能体通常是不可见的。即使 s t e s^e_t ste是可见的,也可能包含不相关的信息。
②、智能体状态 S t a S^a_t Sta是智能体的内部表示,即智能体用来选择下一个动作的所有信息。智能体状态是强化学习算法可以利用的信息。它可以是历史的任何函数: S t a = f ( H t ) S^a_t = f(H_t) Sta=f(Ht)。
③、信息状态(又称为Markov状态)包括历史的所有有用信息。
一个状态 S t S_t St是Markov的,当且仅当:
P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S 1 , . . . , S t ] P[S_{t+1}|S_t] = P[S_{t+1}|S_1,...,S_t] P[St+1∣St]=P[St+1∣S1,...,St]
即当前状态包含了所有相关的历史,只要当前状态可知,所有的历史信息都不需要。
(5)完全可观测环境 Fully Observable Environments
(6)部分可观测环境 Partially Observable Environments
部分观测性:智能体间接观测环境,比如玩英雄联盟或者王者荣耀只能观察到有视野的部分。
在这种情况下,智能体状态 ≠ ≠ =环境状态;
这种问题是部分可观测马尔可夫决策过程(Partially Observable Markov Decision Process, POMDP);
此时,智能体必须构建自己的状态表示 S t a S^a_t Sta,例如:
①、记住完整的历史: S t a = H t S^a_t=H_t Sta=Ht;
②、使用循环神经网络(Recurrent Neural Network, RNN),只根据智能体 t − 1 t-1 t−1时刻的状态 S t − 1 a S^a_{t-1} St−1a和当前观测 O t O_t Ot来获得当前状态 S t a S^a_t Sta的表示:
S t a = σ ( S t − 1 a W s + O t W o ) S^a_t=\sigma(S^a_{t-1}W_s+O_tW_o) Sta=σ(St−1aWs+OtWo)
其中, W s W_s Ws和 W o W_o Wo表示状态和观测的权重。
(7)学习和规划 Learning and Planning
在序列决策中主要包括两类基本问题:
①、学习:环境在初始时是未知的,智能体通过与环境交互来改善它的策略;
②、规划:环境模型是已知的,智能体使用其模型执行计算,而不与环境进行任何交互,从而改善策略。
(8)探索和利用 Exploration and Exploitation
强化学习是一个试错(trail-and-error) 的学习过程,智能体需要从与环境的交互中发现好的策略,同时在这个过程中不至于丢失太多的奖励;
探索(Exploration)是为了发现关于环境更多的信息;即尝试不同的行为继而收集更多的信息、期望得到更好的决策。
利用(Exploitation)是根据现有的已知信息,采取当前认为最优的策略,从而来最大化奖励;
探索(未知信息)和利用(已有信息)这两者是矛盾的,如果“仅利用”,则可能只是得到局部最优,而得不到真正的最优策略;而“仅探索”则可能得到的策略或奖励都比较差;因此,智能体在进行决策时需要在探索和利用之间进行权衡。
比如:去餐厅吃饭,探索是尝试没有去过的餐厅吃饭,而利用是选择原先去过的餐厅中最喜欢吃的那家餐厅。
(9)预测和控制 Prediction and Control
预测:给定一个策略,来评估未来的奖励;
控制:发现一个策略, 来优化未来的奖励;
强化学习智能体(RL agent)主要由三部分组成:
(1)策略 Policy
策略是智能体的行为,是状态 s s s到动作 a a a的映射。
①、对于确定性策略,在每种状态下智能体要执行的动作是唯一的:
a = π ( s ) a = \pi(s) a=π(s)
比如:在一个红绿灯路口,状态是绿灯时,执行的动作是通过;状态是红灯时,执行的动作是停止。
②、对于不确定性(随机性)策略,智能体在一种状态下可以执行的动作有多种,策略函数给出的是执行每种动作的概率,即按概率从各种动作中随机选择一种执行:
π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a|s)=P[A_t=a|S_t=s] π(a∣s)=P[At=a∣St=s]
比如:在一个十字路口,定义3个动作:直行、左转弯和右转弯;此时这3种动作都可能被执行。
(2)价值函数 Value Function
价值函数是对未来奖励的预测,用来评价状态的好坏程度,进而来决定动作的选择,例如:
V π ( s ) = E π [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . ∣ S t = s ] {V_\pi }(s) = {{\rm E}_\pi }[{R_{t + 1}} + \gamma {R_{t + 2}} + {\gamma ^2}{R_{t + 3}} + ...|{S_t} = s] Vπ(s)=Eπ[Rt+1+γRt+2+γ2Rt+3+...∣St=s]
(3)模型 Model
模型是智能体对环境的表示,体现了智能体是如何思考环境运行机制的。
模型至少解决两个问题:
①、状态转移概率,即预测下一个状态的概率:
p s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] p_{ss'}^a = P[{S_{t + 1}} = s'|{S_t} = s,{A_t} = a] pss′a=P[St+1=s′∣St=s,At=a]
②、即时奖励,即预测可能获得的即时奖励:
R s a = E [ R t + 1 ∣ S t = s , A t = a ] R_s^a = E[{R_{t + 1}}|{S_t} = s,{A_t} = a] Rsa=E[Rt+1∣St=s,At=a]
(1)按智能体的成分分类:
①、基于价值函数(Value Based):定义了状态或动作的价值函数,来表示达到某种状态或执行某种动作后得到的奖励;倾向于选择价值最大的状态或动作;
②、基于策略(Policy Based):不需要定义价值函数,动作直接由策略函数产生,可以为动作分配概率分布,按照概率分布来执行动作;
③、Actor-Critic:既有价值函数,也有策略函数,两者相互结合解决问题。
(2)按有无模型分类:
①、有模型/基于模型(Model Based):智能体尝试建立一个描述环境动作过程的模型,以此来指导价值或策略函数的更新;主要是基于动态规划的算法,包括策略迭代算法和值迭代算法;
②、无模型/不基于模型(Model Free):智能体不需要关于环境的信息,不试图了解环境如何工作,仅聚焦于价值或策略函数;主要包括蒙特卡洛算法和时序差分学习等;
当然,还有其他分类方法,比如:按环境分类(完全可观测环境和部分可观测环境)、按使用手段分类(传统强化学习和深度强化学习)等。
为什么要介绍动态规划?
正如开篇所讲,在运筹学和控制论领域,强化学习方法所在的领域被称为近似动态规划。
动态规划是将复杂问题拆分成相互联系的小问题并按顺序进行解决,即主要用于解决多阶段决策问题,而从广义上讲,强化学习问题也是一种多阶段决策问题,即智能体通过进行多阶段决策来获得最大化收益。因此,了解动态规划对学习强化学习有很大的帮助。
用一句话解释动态规划就是”记住之前做过的事“,如果更准确些,其实是”记住之前得到的答案“。
首先说一下分治法:将原问题分解成规模更小的子问题,然后将这些子问题逐个击破,将已解决的子问题合并,最终得到原问题的解。在这里,各个子问题之间是相互独立的。
动态规划与分治法类似,但不同的是分解的各个子问题之间是是相互联系的,通常具有时间或空间上的次序性,在求解的过程中按一定次序对子问题进行求解。为了避免多次解决这些子问题,它们的结果都逐渐被计算并储存,从简单的问题直到整个问题都被解决。
因此,对于一个动态规划问题,只需要从两方面进行考虑:找出问题之间的联系以及储存子问题的结果。
下面将通过图9路径选择问题对动态规划进行详解。
如果一类活动过程可以分为若干个互相联系的阶段,在每一个阶段都需要做出决策(采取措施),一个阶段的决策确定以后,常常影响到下一个阶段的决策,从而就完全确定一个过程的活动路线,则称它为多阶段决策问题。
在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间相关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,因此有”动态“的含义,称这种解决多阶段决策最优化问题的方法为动态规划方法。
在图9中,所求解的问题是: A A A点到 E E E点;这个问题就是个多阶段决策问题。
(1)阶段:把所给求解问题的过程恰当地分成若干个相互联系的子问题,以便能够按一定次序去求解,每次求解一个子问题,则对应一个阶段。
在图9中,阶段:图中的4个阶段;
(2)状态:状态表示每个阶段开始面临的客观条件,即在求解子问题时的已知条件。状态描述了研究的问题过程中的状态。
在图9中,阶段1的状态是 A A A,阶段2的状态是 B 1 B_1 B1、 B 2 B_2 B2和 B 3 B_3 B3,以此类推。那么,各个阶段的状态可以定义为:
S 1 = { A } S_1=\{A\} S1={A}
S 2 = { B 1 , B 2 , B 3 } S_2=\{B_1, B_2, B_3\} S2={B1,B2,B3}
S 3 = { C 1 , C 2 , C 3 } S_3=\{C_1, C_2, C_3\} S3={C1,C2,C3}
S 4 = { D 1 , D 2 } S_4=\{D_1, D_2\} S4={D1,D2}
最终阶段( E E E点)在这里表示为 S 5 S_5 S5,那么此阶段的状态定义为:
S 5 = { E } S_5=\{E\} S5={E}
在这里,以上状态的定义是为了与图9相对应。而在实际应用中,我们一般以 S 0 S_0 S0作为初始状态。
(3)决策:决策表示从当前阶段的状态出发到达下一阶段的状态所做出的的选择。
在图9中,比如当前阶段是阶段1,状态是 A A A,到达下一阶段2的状态,可以选择 B 1 B_1 B1、 B 2 B_2 B2和 B 3 B_3 B3,这里的选择就是决策;
(4)策略:策略表示由所有阶段的决策组成的决策序列。
在图9中,如果4个阶段的选择分别是 B 1 B_1 B1, C 1 C_1 C1、 D 1 D_1 D1和 E E E,那么,这些选择组成的序列( A → B 1 → C 1 → D 1 → E A \rightarrow B_1 \rightarrow C_1 \rightarrow D_1 \rightarrow E A→B1→C1→D1→E)就是其中一个策略。
(5)状态转移方程:状态转移方程是确定两个相邻阶段的状态的演变过程,描述了状态之间是如何演变的。
在图9中,假设 x x x点和 y y y点是相邻两个阶段的点, d i s [ x ] dis[x] dis[x]表示从 x x x点到 E E E点的距离, d i s [ y ] dis[y] dis[y]表示从 y y y点到 E E E点的距离, m a p ( x , y ) map(x, y) map(x,y)表示从 x x x点到 y y y点的距离,那么,状态转移方程可以写成:
d i s [ x ] = d i s [ y ] + m a p ( x , y ) dis[x]=dis[y]+map(x,y) dis[x]=dis[y]+map(x,y)
(6)最优策略:最优策略表示所有策略中代价最小、性能最优的策略。
在图9中,如果寻找最优策略的话,即是求解从A点到E点的最短路径问题,这里的最优策略是: A → B 2 → C 1 → D 1 → E A \rightarrow B_2 \rightarrow C_1 \rightarrow D_1 \rightarrow E A→B2→C1→D1→E。
使用动态规划解决问题时,最重要的的是确定动态规划三要素:
(1)问题拆分:将原问题拆解为子问题,并找到子问题之间的具体联系;
(2)状态定义:定义每个阶段的状态;
(3)状态转移方程推导:找到从前一个阶段转化到后一个阶段之间的递推关系;
(1)最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。简而言之,一个最优化策略的子策略总是最优的。
(2)无后效性:某阶段状态一旦确定,这个状态的决策只与当前状态有关,与以前各个阶段的状态无关。即每个状态都是过去历史的一个完整总结。
(3)子问题重叠性:子问题之间不是相互独立的,一个子问题在下一阶段决策中可能被多次使用到。
下面通过路径迷宫 和 0-1背包 两个经典案例来温习如何通过三要素求解 动态规划问题。
问题描述:
一个机器人位于一个 m × n m \times n m×n网格的左上角(起始点在下图中标记为“ S t a r t Start Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“ F i n i s h Finish Finish”)。问总共有多少条不同的路径?
例如:上图是一个 3 × 7 3 \times 7 3×7的网格,有多少可能的路径?
根据动态规划三要素来对该问题进行求解:
(1)问题拆分:
该问题是机器人从“ S t a r t Start Start”格到“ F i n i s h Finish Finish”格,机器人到达一个格子可以通过其上边和左边的格子到达,即第 ( i , j ) (i, j) (i,j)格可以从 ( i − 1 , j ) (i-1, j) (i−1,j)格和 ( i , j − 1 ) (i, j-1) (i,j−1)格到达,因此,可以把第 ( i , j ) (i, j) (i,j)格问题拆分为 ( i − 1 , j ) (i-1, j) (i−1,j)格和 ( i , j − 1 ) (i, j-1) (i,j−1)格问题,然后这两个问题也可以按以上方式重复,直到“ S t a r t Start Start”位置。
(2)状态定义:
在问题阶段中提到第 ( i , j ) (i, j) (i,j)格会和 ( i − 1 , j ) (i-1, j) (i−1,j)格和 ( i , j − 1 ) (i, j-1) (i,j−1)格有关联,那有什么关联呢?可以这样考虑,第 ( i − 1 , j ) (i-1, j) (i−1,j)格问题的答案其实是从“ S t a r t Start Start”到第 ( i − 1 , j ) (i-1, j) (i−1,j)格的路径总数,第 ( i , j − 1 ) (i, j-1) (i,j−1)格同理。因此,我们可以把第 ( i , j ) (i, j) (i,j)格的状态定义为“从 S t a r t Start Start到第 ( i , j ) (i, j) (i,j)格的路径总数”。
(3)状态转移方程推导:
根据状态定义也知道,第 ( i , j ) (i, j) (i,j)格的总路径数等于第 ( i − 1 , j ) (i-1, j) (i−1,j)格和 ( i , j − 1 ) (i, j-1) (i,j−1)格的路径数之和,因此,状态转移方程为:
f ( i , j ) = f ( i − 1 , j ) + f ( i , j − 1 ) f(i, j)=f(i-1, j)+f(i, j-1) f(i,j)=f(i−1,j)+f(i,j−1)
注意:在实现过程中,当机器人处于第1行和第1列时,其对应路径总数都是1。
参考代码:
class Solution {
public int countPaths(int m, int n) {
int[][] f = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 || j == 0)
f[i][j] = 1;
else {
f[i][j] = f[i - 1][j] + f[i][j - 1];
}
}
}
return f[m - 1][n - 1];
}
}
问题描述:
一共有 N N N个物品,它们有各自的重量和价值,第 i i i( i i i从1开始)件物品的重量为 w [ i ] w[i] w[i],价值为 v [ i ] v[i] v[i],在总重量不超过背包承载上限 W W W的情况下,能够装入背包的最大价值是多少?
在这里,如果使用暴力穷举的方法,每件物品都存在装入和不装入两种情况,因此,一共需要 2 N 2^N 2N种情况,复杂度很高。
如果按照动态规划的方法,根据动态规划三要素来进行求解:
(1)问题拆分:
该问题的目标是使得书包内物品的总价值最大,而变量是物品和书包的限重。
定义 d p [ i ] [ j ] dp[i][j] dp[i][j]表示将前 i i i件商品装进限重为 j j j的背包可以获得的最大价值, 0 < = i < = N , 0 < = j < = W 0<=i<=N,0<=j<=W 0<=i<=N,0<=j<=W;
当背包的限重为 j j j时,对于第 i i i件物品,有两种选择:
①、背包限重充足,能够装下,选择放入;此时背包的限重减少 w [ i ] w[i] w[i],即 j − w [ i ] j-w[i] j−w[i],装入背包中物品的价值是装入前 i − 1 i-1 i−1件物品的价值与第 i i i件物品价值的总和,即 d p [ i − 1 ] [ j − w [ i ] ] + v [ i ] dp[i-1][j-w[i]] + v[i] dp[i−1][j−w[i]]+v[i];
②、背包限重不足,不放入;此时背包的限重为 j j j,价值为 d p [ i − 1 ] [ j ] dp[i-1][j] dp[i−1][j];
通过以上两种方式进行重复,直到放入物品的数量为0为止。
(2)状态定义:
根据问题阶段的描述,可以将第 i i i个阶段的状态定义为 d p [ i ] [ j ] dp[i][j] dp[i][j],即前 i i i件商品装进限重为 j j j的背包可以获得的最大价值。
(3)状态转移方程推导:
根据问题阶段和状态定义的描述,第i阶段背包的总价值为上述两种情况中取最大值的情况,即状态转移方程为:
d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − w [ i ] ] + v [ i ] ) i f j > = w [ i ] dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])\ \ if\ \ j>=w[i] dp[i][j]=max(dp[i−1][j],dp[i−1][j−w[i]]+v[i]) if j>=w[i]
参考代码:
for (int i = 0; i <= N; i++) {
for (int j = 0; j <= W; j++) {
if (j < w[i])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
在机器学习领域,环境通常被阐释成一个马尔可夫决策过程(Markov Decision Process, MDP),许多强化学习算法都是用了动态编程(dynamic programming)技术。传统技术和强化学习算法之间主要不同在于后者并不需要关于 MDP 的知识并且它们的目标是无法获取明确的方法的大型 MDP。强化学习要解决的问题可以抽象成马尔可夫决策过程。这里先介绍下马尔可夫过程,再进一步介绍马尔可夫决策过程。
(1) 马尔可夫特性 Markov Property
在上面介绍强化学习的信息状态时,介绍到:
一个状态 S t S_t St是Markov的,当且仅当:
P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S 1 , . . . , S t ] P[S_{t+1}|S_t] = P[S_{t+1}|S_1,...,S_t] P[St+1∣St]=P[St+1∣S1,...,St]
即当前状态包含了所有相关的历史,只要当前状态可知,所有的历史信息都不需要。
马尔可夫特性:当一个随机过程在给定当前状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。
(2) 马尔可夫过程 Markov Process
马尔可夫过程:又称为马尔可夫链(Markov Chain),是一个无记忆的随机过程,其中,随机过程是指一个系统的状态随着时间线随机演化。也就是说,马尔可夫过程是一个具有马尔可夫特性的随机状态序列 S 1 S_1 S1, S 2 S_2 S2, …。
马尔可夫过程可以表示成一个二元组:
< S , P > <S,P>
其中, S S S是有限的状态集合, P P P是一个状态转移概率矩阵。
对于马尔可夫状态 s s s和其后继状态 s ′ s' s′,状态转移概率定义为:
P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] P_{ss'} = P[S_{t+1}=s'|S_t=s] Pss′=P[St+1=s′∣St=s]
状态转移矩阵 P P P定义了所有状态的转移概率:
KaTeX parse error: Unknown column alignment: * at position 41: …{\begin{array}{*̲{20}{c}} {{P_{1…
其中, n n n是状态数量,矩阵中的每一行元素之和为1。
与马尔可夫过程不同的是,在马尔可夫决策过程(MDP)中,智能体可以执行动作,从该改变自己和环境的状态,并且得到反馈(即惩罚或奖励)。
MDP可以表示成一个五元组:
< S , A , P , R , γ > <S,A,P,R,γ>
其中, S S S为有限的状态集合;
A A A为有限的动作集合;
P P P为状态转移矩阵, P s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] P^a_{ss'} = P[S_{t+1}=s' | S_t=s, A_t=a] Pss′a=P[St+1=s′∣St=s,At=a];
R R R为奖励函数(reward function), R s a = E [ R t + 1 ∣ S t = s , A t = a ] R_s^a = E[{R_{t + 1}}|{S_t} = s,{A_t} = a] Rsa=E[Rt+1∣St=s,At=a];这个函数是即时奖励的期望,即在时刻 t t t时,智能体的状态为 s s s,在执行动作 a a a后,下一个时刻 t + 1 t+1 t+1立即能得到的奖励 R t + 1 R_{t+1} Rt+1的期望。
γ \gamma γ为折扣因子(discount factor), γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1];
(1)回报 Return
强化学习的目标是达到某种预期,当前执行动作的结果会影响系统后续的状态,因此,需要确定动作在未来是否能够得到好的回报,这种回报具有延时性。
定义回报(Return) G t G_t Gt是从 t t t时刻之后未来执行一组动作能够获得的奖励的总和,即:
G t = R t + 1 + γ R t + 2 + . . . = ∑ k = 0 ∞ γ k R t + k + 1 {G_t} = {R_{t + 1}} + \gamma {R_{t + 2}} + ... = \sum\limits_{k = 0}^\infty {{\gamma ^k}{R_{t + k + 1}}} Gt=Rt+1+γRt+2+...=k=0∑∞γkRt+k+1
这里,折扣因子 γ \gamma γ体现了未来的奖励在当前时刻的价值比例;
在 k + 1 k+1 k+1步后,获得的奖励 R R R在 t t t时刻体现的价值是 γ k R {\gamma} ^k R γkR;
当 γ \gamma γ接近0时,趋向于短期性评估;当 γ \gamma γ趋向于1时,趋向于考虑远期的利益;
使用折扣因子 γ \gamma γ的原因:
①、没有一个完美的模型能够拟合出未来会发生什么,未来具有不确定性,执行特定的动作不一定得到特定的状态,所以,将来的奖励所占的权重随着时间衰减;
②、如果不加上折扣因子,当状态无限时,会导致求和项趋向于无穷大,不收敛;
③、更符合人类/动物的行为:偏好即时奖励 R t + 1 R_{t+1} Rt+1;
(2)策略 Policy
策略 π \pi π是给定状态下动作的概率分布,用 π ( a ∣ s ) \pi(a|s) π(a∣s)表示在MDP中某一状态 s s s采取动作 a a a的概率:
π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a|s)=P[A_t=a|S_t=s] π(a∣s)=P[At=a∣St=s]
一个策略完整定义了智能体的行为,即定义了智能体在各个状态下各种可能的动作及其概率的大小。
MDP的策略仅和当前状态有关,与历史信息无关;
(3)价值函数 Value Function
类似于有监督学习中需要定义损失函数来评价预测函数的优劣,在强化学习中也需要对策略的优劣进行评价,为此定义了了价值函数。
价值函数包括状态价值函数(state-value function) v π ( s ) v_{\pi}(s) vπ(s)和动作价值函数(action-value function) q π ( s , a ) q_{\pi}(s,a) qπ(s,a)。
①、状态价值函数 v π ( s ) v_{\pi}(s) vπ(s)表示在状态 s s s下,遵循策略 π \pi π执行动作,能够获得的回报期望;或者说当执行策略 π \pi π时,评估智能体处在状态 s s s时的价值大小,即:
v π ( s ) = E π [ G t ∣ S t = s ] v_{\pi}(s)=E_{\pi}[G_t|S_t=s] vπ(s)=Eπ[Gt∣St=s]
②、动作价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)表示在遵循策略 π \pi π时,对当前状态 s s s执行具体的动作 a a a时所能获得的回报期望;或者说在执行策略 π \pi π时,评估处在状态 s s s时执行动作 a a a的价值大小,即:
q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] q_{\pi}(s,a)=E_{\pi}[G_t|S_t=s,A_t=a] qπ(s,a)=Eπ[Gt∣St=s,At=a]
动作价值函数除了指定状态 s s s和策略 π \pi π外,还指定了在当前状态 s s s时执行的动作 a a a。这个函数衡量的是按照某一策略,在某一状态时执行各种动作的价值。
(4)贝尔曼期望方程 Bellman Expectation Equation
状态价值函数 v π ( s ) v_{\pi}(s) vπ(s)可以分解为即时奖励与其后继状态的折扣价值之和,即:
v π ( s ) = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] v_{\pi}(s)=E_{\pi}[R_{t+1}+{\gamma}v_{\pi}(S_{t+1})|S_t=s] vπ(s)=Eπ[Rt+1+γvπ(St+1)∣St=s]
动作价值函数可以转化为即时奖励与后继状态执行相应动作的折扣价值之和,即:
q π ( s , a ) = E π [ R t + 1 + γ q π ( S t + 1 , A t + 1 ) ∣ S t = s , A t = a ] q_{\pi}(s,a)=E_{\pi}[R_{t+1}+{\gamma}q_{\pi}(S_{t+1},A_{t+1})|S_t=s,A_t=a] qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)∣St=s,At=a]
v π ( s ) v_{\pi}(s) vπ(s)和 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)之间的关系:
下面图中的空心圆圈表示状态,黑色实心圆圈表示动作,连线表示把该状态与执行的动作关联起来。
①、使用 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)表示 v π ( s ) v_{\pi}(s) vπ(s):
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) {v_\pi }(s) = \sum\limits_{a \in A} {\pi (a|s){q_\pi }(s,a)} vπ(s)=a∈A∑π(a∣s)qπ(s,a)
图 12 使 用 q π ( s , a ) 表 示 v π ( s ) 图12\ 使用q_{\pi}(s,a)表示v_{\pi}(s) 图12 使用qπ(s,a)表示vπ(s)
②、使用 v π ( s ) v_{\pi}(s) vπ(s)表示 q π ( s , a ) q_{\pi}(s,a) qπ(s,a):
q π ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) {q_\pi }(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_\pi }(s')} qπ(s,a)=Rsa+γs′∈S∑Pss′avπ(s′)
图 13 使 用 v π ( s ) 表 示 q π ( s , a ) 图13\ 使用v_{\pi}(s)表示q_{\pi}(s,a) 图13 使用vπ(s)表示qπ(s,a)
将上述两种情况组合起来,可以得到:
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ) {v_\pi }(s) = \sum\limits_{a \in A} {\pi (a|s)}(R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_\pi }(s'))} vπ(s)=a∈A∑π(a∣s)(Rsa+γs′∈S∑Pss′avπ(s′))
q π ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) {q_\pi }(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a\sum\limits_{a' \in A} {\pi (a'|s'){q_\pi }(s',a')}} qπ(s,a)=Rsa+γs′∈S∑Pss′aa′∈A∑π(a′∣s′)qπ(s′,a′)
(5)最优价值函数 Optimal Value Function
最优状态价值函数 v ∗ ( s ) v_*(s) v∗(s)是从所有策略产生的状态价值函数中,选取使状态 s s s价值最大的函数:
v ∗ ( s ) = m a x π v π ( s ) {v_*}(s) = \mathop {max}\limits_\pi {v_\pi }(s) v∗(s)=πmaxvπ(s)
类似的,最优动作价值函数 q ∗ ( s , a ) q_*(s,a) q∗(s,a)是从所有策略产生的动作价值函数中,选取使状态动作对 < s , a > <s,a>价值最大的函数:
q ∗ ( s , a ) = max π q π ( s , a ) {q_*}(s,a) = \mathop {\max }\limits_\pi {q_\pi }(s,a) q∗(s,a)=πmaxqπ(s,a)
最优价值函数明确了MDP可能的最优表现。
(6)最优策略 Optimal Policy
对于任何状态 s s s,当遵循策略 π \pi π的价值不小于策略 π ′ \pi' π′的价值时,则策略 π \pi π优于策略 π ′ \pi' π′:
π ≥ π ′ i f v π ( s ) ≥ v π ′ ( s ) , ∀ s \pi \ge \pi ' \ if \ {v_\pi }(s) \ge {v_{\pi '}}(s),\ \forall s π≥π′ if vπ(s)≥vπ′(s), ∀s
对于任何MDP:
①、存在一个最优策略,好于或等于所有其他策略;
②、所有的最优策略都实现了最优价值函数,包括最优状态价值函数和最优动作价值函数;
怎么寻找最优策略呢?
最优策略可以通过最大化最优动作价值函数 q ∗ ( s , a ) q_*(s,a) q∗(s,a)来寻找:
KaTeX parse error: Unknown column alignment: * at position 57: … \begin{array}{*̲{20}{c}} 1&{if …
对于任何MDP问题,总存在一个确定性的最优策略;
如果知道了最优动作价值函数 q ∗ ( s , a ) q_*(s,a) q∗(s,a),则表明找到了最优策略。
(7)贝尔曼最优方程 Bellman Optimality Equation
对于 v ∗ v_* v∗,一个状态的最优价值等于从该状态出发执行的所有动作中产生的动作价值中最大的那个动作价值:
v ∗ ( s ) = max a q ∗ ( s , a ) {v_*}(s) = \mathop {\max }\limits_a {q_*}(s,a) v∗(s)=amaxq∗(s,a)
对于 q ∗ q_* q∗,在状态 s s s,采取动作 a a a的最优价值由两部分组成,一部分是离开状态 s s s时的即时奖励,另一部分是其后继状态 s ′ s' s′的最优状态价值的概率求和:
q ∗ ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) {q_*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_*}(s')} q∗(s,a)=Rsa+γs′∈S∑Pss′av∗(s′)
将上述两种情况组合起来,可以得到:
v ∗ ( s ) = max a ( R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ ) ) {v_*}(s) = \mathop {\max }\limits_a (R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_*}(s')}) v∗(s)=amax(Rsa+γs′∈S∑Pss′av∗(s′))
q ∗ ( s , a ) = R s a + γ ∑ s ′ ∈ S P s s ′ a max a ′ q ∗ ( s ′ , a ′ ) {q_*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a\mathop {\max }\limits_{a'} {q_*}(s',a')} q∗(s,a)=Rsa+γs′∈S∑Pss′aa′maxq∗(s′,a′)
贝尔曼最优方程是非线性的,一般通过迭代的方法来求解贝尔曼最优方程,例如:基于动态规划的算法(价值迭代、策略迭代)、蒙特卡洛算法和时序差分学习等,这些方法在前文中强化学习的分类中有提到,后续会进行讲解。
本博客所有内容仅供学习,不为商用,如有侵权,请联系博主,谢谢。
[1] 动态规划之初识动规:有了四步解题法模板,再也不害怕动态规划
[2] 动态规划理解
[3] 路径迷宫问题
[4] 动态规划之背包问题系列
[5] David Silver强化学习公开课
[6] David Silver强化学习公开课中文讲解
[7] 机器学习原理、算法与应用
[8] 人工智能:一种现代的方法(第3版)
[9] An Introduction to Reinforcement Learning
[10] Algorithms for Reinforcement Learning