文章目录
1. 强化学习的应用场景1.1. 四个成熟场景1.2. 几个强化学习仿真环境1.2.1. Gridworld1.2.2. Neural MMOs1.2.3. Lab2. 强化学习的基础知识和常用术语2.1. 常用术语表2.2. 强化学习的目的2.3. 两个基本模型2.3.1. 多臂赌博机2.3.2. 马尔科夫决策过程3. 经典强化学习算法和深度强化学习3.1. 经典强化学习算法3.2. 深度强化学习4. 强化学习的学习资料1. 强化学习的应用场景
1.1. 四个成熟场景
在入门强化学习之前,我们先来具体的看看,目前强化学习可以做一些什么事情。
如下面四张图,分别是强化学习应用于:
王者荣耀绝悟挑战;训练机械臂投篮;Alpha Go与柯洁下围棋;个性化序列推荐系统。
强化学习是机器学习的一个分支,它会训练一个智能体用来探索周围环境,在图一的王者荣耀中,这个智能体是英雄,例如阿轲、公孙离;在图二的投篮中,这个智能体是机械臂;在图三中,这个智能体是下围棋的Alpha Go;在图四的推荐系统中,这个智能体是推荐算法;
智能体在一开始是很笨的,在与周围环境的不断交互中才会逐渐变得“聪明”起来。例如在上面的图中,智能体首先是用很笨拙的方法去跨越障碍,在多次失败之后,才学会了如何跳的更高去越过障碍物。
1.2. 几个强化学习仿真环境
1.2.1. Gridworld
这里介绍三个Gridworld环境:
Gym MiniGrid
最基础的GridWorld就是走迷宫,例如下图红色的智能体走到绿色的位置就算是找到了迷宫出口,除此之外还有其他的有意思的迷宫配置,可以玩一玩。
Multi Drones Monitoring
Multi Drones Monitoring是Multi-agent Reinforcement Learning中的一个小模块,提供了多个基于智能体的grid world小环境
MAgent
这是一个用于研究环境中大量智能体的竞争和协作问题的GridWorld环境
1.2.2. Neural MMOs
Neural MMOs 是由OpenAI开源的一个大型的复杂MA游戏场景,在这张大地图中,由于资源有限,agent要学着合作/竞争活下去
1.2.3. Lab
Lab是一个由DeepMind开源的强化学习环境,是一张雷神之锤III竞技场(Quake III Arena)的地图,由两个队伍,每队由两个智能体组成,在室内和户外两个场景下以第一人称视角竞争玩夺旗的游戏。
2. 强化学习的基础知识和常用术语
2.1. 常用术语表
2.2. 强化学习的目的
强化学习中包含了两个实体和三个关系,可以用下图表示:
在强化学习过程中,智能体(Agent)跟环境(Environment)一直在交互。智能体(Agent)在环境(Environment)中获取到环境的状态(State/Observation),并根据它做出一个行为(Action),这个行为(Action)会导致智能体(Agent)所处的环境的状态(Observation)发生变化,并且智能体(Agent)会从环境(Environment)的变化中得到一定的反馈(Reward),该反馈(Reward)用于智能体(Agent)判断自己刚才的行为(Action)是否合理。
显而易见,Agent 采取的 Action 能获得越高的 Reward,说明Agent越成功。强化学习的目的就是让一个智能体(Agent) 在一个复杂不确定的环境(Environment)里面去极大化它能获得的反馈(Reward)。
2.3. 两个基本模型
2.3.1. 多臂赌博机
多臂赌博机(Multi-Armed Bandit, MAB)问题可以说是强化学习的开端,最原始的强化学习算法就是从多臂赌博机问题引出来的。目前为止,主流的Bandit算法主要有两类:(1)贪心算法,例如:ϵ−greedy\epsilon-\text{greedy}ϵ−greedy;(2)置信算法,例如:UCB(Upper Confidence Bound)。
下面我们就来讲讲什么是多臂赌博机问题:
赌博机又称老虎机,它是一种通过摇动摇臂(Arms)来获得回报(Reward)的机器,每个赌博机只有一条摇臂,多个赌博机放在一起就是多臂赌博机。如下图所示是一个3臂赌博机:
上面的三个赌博机摇出金币的概率分布各不相同,也就是说它们的期望 Reward 不同。我们希望构造一个 Agent,自动去找出摇动哪一个赌博机的摇臂可以获得最高的 Reward。
我们把摇动三个赌博机的 Action 分别命名为a = [1, 2, 3]
,每次摇动摇臂(pull arm)后都会获得一个回报r
,则值函数q(a)
,即多次摇动摇臂后动作a
的所得到的回报r
的均值可以表示为:q(a)=E[Rt∣At=a]q(a)=\mathbb{E}[R_t | A_t=a]q(a)=E[Rt∣At=a]
q(s,a)=q(a)=E[Rt∣At=a]q(s,a)=q(a)=\mathbb{E}[R_t | A_t=a]q(s,a)=q(a)=E[Rt∣At=a]
注意在多臂赌博机问题中,由于每次摇动摇臂后Agent的State是不变的(Agent看到的还是那三个赌博机),因此动作值函数
q(s,a)
可以简写为q(a)
在获取了每个摇臂的 q(a) 之后,就可以利用Bandit算法来选择动作了,这里我们介绍两种 Bandit 算法(策略):
ϵ−\epsilon-ϵ−贪心策略
ϵ−\epsilon-ϵ−贪心策略设定一个概率值 ϵ\epsilonϵ 用于指定探索的程度,并规定下一个时间步要执行的动作有 1−ϵ1-\epsilon1−ϵ 的概率选用能使 qqq 值最大的动作 aaa,有 ϵ\epsilonϵ 的概率选择其他动作:a={arg maxaq(a2),P(0.9)otherwise,P(0.1)a=\begin{cases} \argmax_a q(a_2), \text{P(0.9)}\\ otherwise, \text{P(0.1)}\\ \end{cases}a=⎩⎨⎧aargmaxq(a2),P(0.9)otherwise,P(0.1)UCB1策略
UCB1策略计算了q(s,a)q(s,a)q(s,a)的置信区间上界,即q(s,a)q(s,a)q(s,a)的最大期望值,然后取能使q(s,a)q(s,a)q(s,a)最大的动作:a=arg maxa(q(s,a)+clnnna)a=\argmax_a\biggl(q(s,a)+c\sqrt{\frac{\ln n}{n_a}}\biggr)a=aargmax(q(s,a)+cnalnn)其中 q(s,a)q(s,a)q(s,a) 是指动作aaa的qqq值,ccc是一个可调参数用于指定探索的程度,nnn是指所有动作的执行次数,nan_ana是指动作aaa的执行次数
此时有了 q(a) ,也有了利用 q(a) 来选择 a 的策略,Agent就可以利用Bandit策略来根据 q(a) 选择摇动哪个摇臂 a ,从而获得最大的 r 了。
下面我们来模拟一个episode,在这个episode中我们利用了 ϵ\epsilonϵ 为 0.1 的 ϵ−\epsilon-ϵ−贪心策略:
1−ϵ=0.91-\epsilon=0.91−ϵ=0.9
摇动3个摇臂各一次,得到 [a1,a2,a3][a_1,a_2,a_3][a1,a2,a3] 的 Reward [2,4,6][2,4,6][2,4,6]:
q(a1)=E[R0=2∣A1=a1]=2q(a_1)=\mathbb{E}[R_0=2|A_1=a_1]=2q(a1)=E[R0=2∣A1=a1]=2q(a2)=E[R1=4∣A2=a2]=4q(a_2)=\mathbb{E}[R_1=4|A_2=a_2]=4q(a2)=E[R1=4∣A2=a2]=4q(a3)=E[R2=6∣A3=a3]=6q(a_3)=\mathbb{E}[R_2=6|A_3=a_3]=6q(a3)=E[R2=6∣A3=a3]=6根据ϵ−\epsilon-ϵ−贪心策略,有0.9的概率选择可以获得最大q值的动作,0.1的概率选择其他动作,假设此时选择可以获得最大q值的动作 q(a3)=6q(a_3)=6q(a3)=6,则有当前的最优动作为:a=arg maxaq(a3)=a3a=\argmax_a q(a_3)=a_3a=aargmaxq(a3)=a3摇动 a3a_3a3得到 Reward 000 更新 q(a3)q(a_3)q(a3):q(a1)=E[R0=2∣A1=a1]=2q(a_1)=\mathbb{E}[R_0=2|A_1=a_1]=2q(a1)=E[R0=2∣A1=a1]=2q(a2)=E[R1=4∣A2=a2]=4q(a_2)=\mathbb{E}[R_1=4|A_2=a_2]=4q(a2)=E[R1=4∣A2=a2]=4q(a3)=E[R2=6,0∣A4=a3]=6+02=3q(a_3)=\mathbb{E}[R_2=6,0|A_4=a_3]=\frac{6+0}{2}=3q(a3)=E[R2=6,0∣A4=a3]=26+0=3根据ϵ−\epsilon-ϵ−贪心策略,有0.9的概率选择可以获得最大q值的动作,0.1的概率选择其他动作,假设此时选择可以获得最大q值的动作 q(a2)=4q(a_2)=4q(a2)=4,则有当前的最优动作为:a=arg maxaq(a0)=a2a=\argmax_a q(a_0)=a_2a=aargmaxq(a0)=a2摇动 a2a_2a2得到 Reward 101010 更新 q(a2)q(a_2)q(a2):q(a1)=E[R0=2∣A1=a1]=2q(a_1)=\mathbb{E}[R_0=2|A_1=a_1]=2q(a1)=E[R0=2∣A1=a1]=2q(a2)=E[R1=4,10∣A5=a2]=4+102=7q(a_2)=\mathbb{E}[R_1=4,10|A_5=a_2]=\frac{4+10}{2}=7q(a2)=E[R1=4,10∣A5=a2]=24+10=7q(a3)=E[R2=6,0∣A4=a3]=6+02=3q(a_3)=\mathbb{E}[R_2=6, 0|A_4=a_3]=\frac{6+0}{2}=3q(a3)=E[R2=6,0∣A4=a3]=26+0=3根据ϵ−\epsilon-ϵ−贪心策略,有0.9的概率选择可以获得最大q值的动作,0.1的概率选择其他动作,假设此时选择其他动作 q(a1)=2q(a_1)=2q(a1)=2,则有当前的动作为:a=arg maxaq(a1)=a0a=\argmax_a q(a_1)=a_0a=aargmaxq(a1)=a0摇动 a1a_1a1得到 Reward 222 更新 q(a1)q(a_1)q(a1):q(a1)=E[R0=2,2∣A6=a1]=2+22=2q(a_1)=\mathbb{E}[R_0=2,2|A_6=a_1]=\frac{2+2}{2}=2q(a1)=E[R0=2,2∣A6=a1]=22+2=2q(a2)=E[R1=4,10∣A5=a2]=4+102=7q(a_2)=\mathbb{E}[R_1=4,10|A_5=a_2]=\frac{4+10}{2}=7q(a2)=E[R1=4,10∣A5=a2]=24+10=7q(a3)=E[R2=6,0∣A4=a3]=0+62=3q(a_3)=\mathbb{E}[R_2=6, 0|A_4=a_3]=\frac{0+6}{2}=3q(a3)=E[R2=6,0∣A4=a3]=20+6=3类似的,重复步骤2-4,Agent 就可以估算出三个摇臂的期望q值学习结束后,Agent 只需摇动期望最高的一个摇臂即可得到最高的Reward。
到此,多臂赌博机问题就找到了求解方法,也就是最原始的强化学习。
2.3.2. 马尔科夫决策过程
马尔科夫决策过程(Markov Decision Process,MDP)是强化学习的基础,相比于多臂赌博机问题,马尔科夫决策过程多了状态转移及其决策过程。
我们先来认识一下状态、状态转移以及决策三个概念:
状态
实际上状态并没有一个标准的定义,它可以是任何有助于马尔科夫链做决策的量。状态转移
是指 Agent 可以从一个状态变化到另一个状态的性质。形象地说,把自己看着 Agent ,我们从早上醒来,看到的状态是在卧室,刷牙时眼睛里看到的状态是在卫生间,出门后是在路上,到办公室后是在办公室。Agent的状态无时无刻不在改变。决策
所谓决策,就是Agent根据未来可能转移到的状态的好坏(通过Reward衡量),来决定是否要转移到某个状态。
下面就是一个马尔科夫决策过程示意图:
在上图中,我们可以找出多条轨迹,用来描述Agent的行为,例如:τ1=S1→a=a1,r=r1S2→a=a2,r=r2S3→a=a3,r=r3S4τ2=S1→a=a4,r=r4S3→a=a3,r=r3S4\begin{aligned} \tau_1 & = S_1 \xrightarrow{a=a_1,r=r_1}S_2\xrightarrow{a=a_2,r=r_2}S_3\xrightarrow{a=a_3,r=r_3}S_4 \\ \tau_2 & = S_1 \xrightarrow{a=a_4,r=r_4}S_3\xrightarrow{a=a_3,r=r_3}S_4 \\ \end{aligned}τ1τ2=S1a=a1,r=r1S2a=a2,r=r2S3a=a3,r=r3S4=S1a=a4,r=r4S3a=a3,r=r3S4τ2\tau_2τ2没有进入过状态S2S_2S2,可能是因为Agent认为要迟到了,从S1S_1S1转移状态到S2S_2S2的Reward太低,所以直接转移状态到了S3S_3S3。
马尔科夫决策过程的量化计算中有一个重要参数称为折扣因子(Discount Factor)γ\gammaγ,之所以要引入这样一个参数,有着以下三个理由:
有些马尔可夫过程是带环的,没有起始,折扣因子可以避免无穷的反馈;折扣因子可以使马尔科夫过程模拟真实的人类行为,使马尔科夫过程更加倾向于选择近期的高Reward状态;折扣因子是可以调整的,例如当折扣因子设为0时,就相当于只关注了下一步反馈。当折扣因子设为1时,就相当于对未来并没有折扣,未来的每一步获得的Reward都是一样的。
在有了Agent所处的状态SSS、折扣因子γ\gammaγ、状态转移时的回报RRR之后,我们就可以用贝尔曼方程来定义马尔科夫决策过程的折扣累计回报期望值了:
基于状态值函数Vπ(s)V_\pi(s)Vπ(s)的定义
在策略 π\piπ 下,状态s的值函数定义为从状态 SSS 出发,并采用策略 π\piπ 的折扣积累回报的期望Vπ(s)=Eπ[Gt∣St=s]=Eπ[∑k=0∞γkRt+k+1∣St=s]\begin{aligned}V_\pi(s) &=\mathbb{E}_\pi[G_t|S_t=s] \\ &=\mathbb{E}_\pi[\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s] \\ \end{aligned}Vπ(s)=Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s]基于行为值函数Qπ(s,a)Q_\pi(s,a)Qπ(s,a)的定义
在策略 π\piπ 下,在状态s采取动作a的行为值函数定义为从状态 SSS 出发,并采用策略 π\piπ 的折扣积累回报的期望Qπ(s,a)=Eπ[G∣S=s,A=a]=Eπ[∑k=0∞γkRk+1∣S=s,A=a]\begin{aligned}Q_\pi(s,a) &=\mathbb{E}_\pi[G|S=s,A=a] \\ &=\mathbb{E}_\pi[\sum_{k=0}^{\infty}\gamma^k R_{k+1}|S=s,A=a] \\ \end{aligned}Qπ(s,a)=Eπ[G∣S=s,A=a]=Eπ[k=0∑∞γkRk+1∣S=s,A=a]
假设有如下的马尔科夫决策过程:
假设Agent正处于状态S1S_1S1,目标任务是Agent到达S4S_4S4然后回到S1S_1S1。则在S1S_1S1时会有如下两条轨迹可以完成该任务:
τ1=S1→a=a1,r=2S2→a=a2,r=4S3→a=a3,r=9S4→a=a5,r=3S3→a=a6,r=7S1\tau_1 = S_1\xrightarrow{a=a_1,r=2}S_2\xrightarrow{a=a_2,r=4}S_3\xrightarrow{a=a_3,r=9}S_4\xrightarrow{a=a_5,r=3}S_3\xrightarrow{a=a_6,r=7}S_1τ1=S1a=a1,r=2S2a=a2,r=4S3a=a3,r=9S4a=a5,r=3S3a=a6,r=7S1τ2=S1→a=a4,r=6S3→a=a3,r=9S4→a=a5,r=3S3→a=a6,r=7S1\tau_2 = S_1\xrightarrow{a=a_4,r=6}S_3\xrightarrow{a=a_3,r=9}S_4\xrightarrow{a=a_5,r=3}S_3\xrightarrow{a=a_6,r=7}S_1τ2=S1a=a4,r=6S3a=a3,r=9S4a=a5,r=3S3a=a6,r=7S1设折扣因子的值为0.2,则这两条轨迹的折扣累计回报期望为:Qπ(s,a)τ1=Eπ[Gt∣St=s,At=a]=Eπ[∑k=0∞γkRt+k+1∣St=s,At=a]=15(0.20×2+0.21×4+0.22×9+0.23×3+0.24×7)=0.63904\begin{aligned}Q_\pi(s,a)_{\tau_1} &=\mathbb{E}_\pi[G_t|S_t=s,A_t=a] \\ &=\mathbb{E}_\pi[\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s,A_t=a] \\ &=\frac{1}{5}(0.2^0\times 2 + 0.2^1\times4+0.2^2\times9+0.2^3\times3+0.2^4\times7)\\ &=0.63904 \\ \end{aligned}Qπ(s,a)τ1=Eπ[Gt∣St=s,At=a]=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a]=51(0.20×2+0.21×4+0.22×9+0.23×3+0.24×7)=0.63904Qπ(s,a)τ2=Eπ[Gt∣St=s,At=a]=Eπ[∑k=0∞γkRt+k+1∣St=s,At=a]=14(0.20×6+0.21×9+0.22×3+0.23×7)=1.994\begin{aligned}Q_\pi(s,a)_{\tau_2} &=\mathbb{E}_\pi[G_t|S_t=s,A_t=a] \\ &=\mathbb{E}_\pi[\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s,A_t=a] \\ &=\frac{1}{4}(0.2^0\times 6 + 0.2^1\times9+0.2^2\times3+0.2^3\times7)\\ &=1.994 \\ \end{aligned}Qπ(s,a)τ2=Eπ[Gt∣St=s,At=a]=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a]=41(0.20×6+0.21×9+0.22×3+0.23×7)=1.994
显然,当 Agent 处于状态 S1S_1S1 时,应当采取动作a4a_4a4才能获取更高的 Reward。
3. 经典强化学习算法和深度强化学习
3.1. 经典强化学习算法
所谓经典强化学习算法,指的是表格型的强化学习算法,这种算法适用于的状态空间离散有限的马尔科夫决策过程。有限代表有终止状态,这样q(s,a)q_(s,a)q(s,a)或者v(s)v_(s)v(s)的值均可以存储在一张表格中,这就是表格型方法的名称由来。
例如一张Q表格,用来存储q(s,a)q(s,a)q(s,a):
上表中Q函数的值表示当Agent在某个State时选择了某个Action,后续总共能得到多少Reward。根据这个表格,Agent就可以知道在当前的State下选择哪个Action可以得到更大的Q值。
例如在Agent处于状态s4s_4s4时,选择动作a4a_4a4就会有最大的Q值:Q(st=s4,at=a4)=23.5Q(s_t=s_4,a_t=a_4)=23.5Q(st=s4,at=a4)=23.5
常见的表格型强化学习方法有:
动态规划 Dynamic Programing
动态规划 DP 是一种model-based的强化学习方法,它使用价值函数来结构化地组织对最优策略的搜索,由贝尔曼最优化方程计算最优价值函数,从而得到最优策略。DP又分为包括策略迭代、价值迭代两种方法蒙特卡洛 Monte Carlo
蒙特卡洛 MC 是一种model-free的强化学习方法,它从马尔可夫决策过程采样样本的经验回报中学习价值函数。时序差分 Temporal-Difference
时序差分 TD 是一种model-free的强化学习方法,它结合了MC与DP算法,采用自举法(更新基于已存在的估计)更新。TD中两个著名的方法是Saras(同轨时序差分控制)、Q-Learning(离轨时序差分控制)
推荐阅读:强化学习 - 基于表格型的求解方法
3.2. 深度强化学习
深度强化学习方法就是利用神经网络提取输入特征 或 用神经网络拟合值函数Q(s,a)Q(s,a)Q(s,a)和V(s)V(s)V(s),它适用于状态空间连续或状态数无穷多的马尔科夫决策过程。
之所以提出深度强化学习方法,是因为:
神经网络具有很强的特征提取能力
这样的能力使得强化学习算法可以直接从真实世界接收输入,例如看游戏屏幕、看棋盘。神经网络具有很强的泛化能力
神经网络可以通过拟合离散数据泛化得到连续的空间,例如下图:
神经网络可以只根据这三个q(s,a)q(s,a)q(s,a)值取泛化得到连续空间上的无穷多q(s,a)q(s,a)q(s,a)值。
常见的深度强化学习算法有:
Policy Gradient
包括:PG (Policy Gradient)、
TRPO (Trust Region Policy Optimization)、
PPO (Proximal Policy Optimization)、
DPPO (Distributed Proximal Policy Optimization);Deep Q Network
包括:DQN (Deep Q Network)、
Dueling DQN (Dueling Deep Q Network)、
Double DQN (Double Deep Q Network);Actor-Critic
包括:AC (Actor-Critic)、
A3C (Asynchronous Advantage Actor-Critic)、
DDPG (Deep Deterministic Policy Gradient) 、
TD3 (Twin Delayed Deep Deterministic policy gradient algorithm)、
SAC (Soft Actor-Critic);
4. 强化学习的学习资料
视频:
【莫烦Python】强化学习 Reinforcement Learning【李宏毅】 最新课程 (完整版) 强化学习Stanford CS234: Reinforcement Learning
书籍:
Reinforcement Learning: An Introduction (Second Edition)深入浅出强化学习:原理入门
论文:
Reinforcement Learning:A SurveyReinforcement Learning An IntroductionA Brief Survey of Deep Reinforcement LearningDeep Reinforcement Learing: An Overview主流强化学习算法论文综述:DQN、DDPG、TRPO、A3C、PPO、SAC、TD3
这一节推荐了很多相关资料,之所以要看这么多,不是因为强化学习本身很复杂,是因为不同人有不同理解,从不同角度对强化学习进行全方位的学习,才能有更深入和正确的理解。