在入门强化学习之前,我们先来具体的看看,目前强化学习可以做一些什么事情。
如下面四张图,分别是强化学习应用于:
强化学习是机器学习的一个分支,它会训练一个智能体用来探索周围环境,在图一的王者荣耀中,这个智能体是英雄,例如阿轲、公孙离;在图二的投篮中,这个智能体是机械臂;在图三中,这个智能体是下围棋的Alpha Go;在图四的推荐系统中,这个智能体是推荐算法;
智能体在一开始是很笨的,在与周围环境的不断交互中才会逐渐变得“聪明”起来。例如在上面的图中,智能体首先是用很笨拙的方法去跨越障碍,在多次失败之后,才学会了如何跳的更高去越过障碍物。
这里介绍三个Gridworld环境:
Gym MiniGrid
最基础的GridWorld就是走迷宫,例如下图红色的智能体走到绿色的位置就算是找到了迷宫出口,除此之外还有其他的有意思的迷宫配置,可以玩一玩。
Multi Drones Monitoring
Multi Drones Monitoring是Multi-agent Reinforcement Learning中的一个小模块,提供了多个基于智能体的grid world小环境
MAgent
这是一个用于研究环境中大量智能体的竞争和协作问题的GridWorld环境
Neural MMOs 是由OpenAI开源的一个大型的复杂MA游戏场景,在这张大地图中,由于资源有限,agent要学着合作/竞争活下去
Lab是一个由DeepMind开源的强化学习环境,是一张雷神之锤III竞技场(Quake III Arena)的地图,由两个队伍,每队由两个智能体组成,在室内和户外两个场景下以第一人称视角竞争玩夺旗的游戏。
英文 | 中文 | 解释 |
---|---|---|
RL | 强化学习 | 即 Reinforcement Learning 的首字母缩写 |
Agent | 智能体 | 强化学习算法,或强化学习算法的作用目标 |
Environment | 环境 | Agent的作用空间,可以认为除Agent外的一切皆为环境。 |
Action | 行为 | 也称动作、策略、决策。指的是Agent的输出,作用于环境 |
State / Observation | 状态 | Observation指的是被Agent观测到的部分环境的状态,State指的是整个环境的状态。一般情况下,未特定说明的“状态”、“State”均指“Observation”,也就是被Agent观测到的部分环境的状态。表示为: S S S |
Reward | 反馈 | 量化后的反馈也称奖励。反馈指的是Action作用于Environment后,对环境中的某一个特定的变量产生的影响。表示为: R R R |
Episode | 回合 | 也称试验(Trial)。是指一次完整的强化学习训练 |
Trajectory | 轨迹 | 是指在一个 episode 中产生的 Observation-Action 序列。表示为: τ = ( s 0 , a 0 , s 1 , a 1 , . . . , s n , a n ) \tau=(s_0,a_0,s_1,a_1,...,s_n,a_n) τ=(s0?,a0?,s1?,a1?,...,sn?,an?) |
Value Function | 价值函数 | 是指某一个 π \pi π可以得到的反馈的期望。表示为: v π v_\pi vπ? |
Policy Function | 策略函数 | 策略(Policy)用于根据 Observation 确定具体的 Action。表示为: π \pi π |
Stochastic Policy | 随机性策略 | 随机性策略会得到多个Action以及它们的概率,对所有Action根据概率抽选,最终确定一个输出Action |
Deterministic Policy | 确定性策略 | 确定性策略会得到多个Action以及它们的概率,但只输出概率最高的那个Action |
Exploration | 探索 | 是指Agent会尝试新的Action来得到可能存在的更优策略,即得到Reward更大的策略。 |
Exploitation | 利用 | 是指Agent不再尝试新的Action,只采取已知的可以得到最高Reward的策略。 |
Trade-Off | 权衡 | Agent在初始的时候需要偏向于Exploration来得到合适的策略,在学习的过程中高Reward的策略被逐渐学习出来,这时候就需要偏向于Exploitation,更多的利用已知的策略,而不是把时间浪费在找新策略上。 |
Planning | 规划 | Planning是指Agent可以获得整个环境的详细信息。此时 Agent 能够计算出一个完美的模型,只需要知道当前的状态,就能够寻找到最优解。 |
Learning | 学习 | Learning是指 Agent 无法获得完整的环境信息,只能通过不断地与环境交互,逐渐改进其策略。 |
Discount Factor | 折扣因子 | 折扣因子是用于保证马尔科夫决策过程即时性的一个参数。表示为: γ \gamma γ |
Bellman Equation | 贝尔曼方程 | 贝尔曼等式是一种计算价值函数(Q和V)的工具,它描述了当前状态与未来状态的迭代关系 |
MAB | 多臂赌博机 | Multi-Armed Bandit,一个基础的强化学习场景 |
MDP | 马尔科夫决策过程 | Markov Decision Process,一个基础的强化学习场景,是带有 Action 和 Reward 的状态转移过程 |
Q / Action-Value Function | Q 函数 / 动作值函数 | 表示 Agent 在某个 State 采取某个 Action 时得到的累计 Reward 期望值 |
V / State-Value function | V 函数 / 状态值函数 | 表示 Agent 在某个 State 时具有的累计 Reward 期望值 |
Value Iteration | 价值迭代 | 利用 V 函数求取最优策略的方法 |
Policy Iteration | 策略迭代 | 利用 Q 函数求取最优策略的方法 |
Model-Free RL | 无模型的强化学习 | Model-Free RL 直接让 Agent 在环境中做出 Action,通过不断试错来找到针对特定环境的最佳策略 π \pi π。 |
Model-Based RL | 基于模型的强化学习 | Model-Based RL通过对环境进行理解,建立一个环境模型,Agent可以在模型中对下一步的状态和反馈做出预测,找出最佳策略,再在现实环境中做出动作 |
Policy-Based RL | 基于概率的强化学习 | Policy-Based RL中Agent在某一状态时的所有可能Action都有一定概率被选中,只是不同Action有不同的概率。最终会得到一个随机性策略 |
Value-Based RL | 基于价值的强化学习 | Value-Based RL中会对Agent在某一状态时的所有可能Action,按对应得到的Reward进行排序,并选用Reward最高的Action。最终会得到一个确定性策略 |
Monte-Carlo RL | 回合更新的强化学习 | MC 方法每次都需要采样一条完整的轨迹 τ \tau τ 之后才能对 π \pi π 或 v π v_\pi vπ? 进行更新 |
Temporal-Difference RL | 单步更新的强化学习 | TD 可以在每完成一步(得到一个Observation,采取一个Action并得到反馈值)之后就对策略或价值函数进行更新 |
On-Policy RL | 同轨强化学习 | On-Policy RL需要Agent直接与环境交互,即学习过程中所用到的数据与样本,都是Agent从环境中观测到的。 |
Off-Policy RL | 离轨强化学习 | Off-Policy RL不需要Agent直接与环境交互,即可以通过别的方法获取数据进行学习,不需要Agent直接通过观测环境获得。 |
强化学习中包含了两个实体和三个关系,可以用下图表示:
在强化学习过程中,智能体(Agent) 跟 环境(Environment) 一直在交互。智能体(Agent) 在 环境(Environment) 中获取到 环境的状态(State/Observation),并根据它做出一个 行为(Action),这个 行为(Action) 会导致 智能体(Agent) 所处的 环境的状态(Observation) 发生变化,并且 智能体(Agent) 会从 环境(Environment) 的变化中得到一定的 反馈(Reward),该 反馈(Reward) 用于 智能体(Agent) 判断自己刚才的 行为(Action) 是否合理。
显而易见,Agent 采取的 Action 能获得越高的 Reward,说明Agent越成功。强化学习的目的就是让一个智能体(Agent) 在一个复杂不确定的环境(Environment)里面去极大化它能获得的反馈(Reward)。
多臂赌博机(Multi-Armed Bandit, MAB)问题可以说是强化学习的开端,最原始的强化学习算法就是从多臂赌博机问题引出来的。目前为止,主流的Bandit算法主要有两类:(1)贪心算法,例如: ? ? greedy \epsilon-\text{greedy} ??greedy;(2)置信算法,例如:UCB(Upper Confidence Bound)。
下面我们就来讲讲什么是多臂赌博机问题:
赌博机又称老虎机,它是一种通过摇动摇臂(Arms)来获得回报(Reward)的机器,每个赌博机只有一条摇臂,多个赌博机放在一起就是多臂赌博机。如下图所示是一个3臂赌博机:
上面的三个赌博机摇出金币的概率分布各不相同,也就是说它们的期望 Reward 不同。我们希望构造一个 Agent,自动去找出摇动哪一个赌博机的摇臂可以获得最高的 Reward。
我们把摇动三个赌博机的 Action 分别命名为 a = [0, 1, 2]
,每次摇动摇臂(pull arm)后都会获得一个回报 r
,多次摇动摇臂后动作 a
的值函数 q(a)
可以表示为:
q
(
a
)
=
E
[
R
t
∣
A
t
=
a
]
q(a)=\mathbb{E}[R_t | A_t=a]
q(a)=E[Rt?∣At?=a]
注意在多臂赌博机问题中,由于每次摇动摇臂后Agent的State是不变的(Agent看到的还是那三个赌博机),因此动作值函数
q(s,a)
可以简写为q(a)
在获取了每个摇臂的 q(a) 之后,就可以利用Bandit算法来选择动作了,这里我们介绍两种Bandit算法(策略):
此时有了 q(a) ,也有了利用 q(a) 来选择 a 的策略,Agent就可以利用Bandit策略来根据 q(a) 选择摇动哪个摇臂 a ,从而获得最大的 r 了。
下面我们来模拟一个episode,在这个episode中我们利用了 ? \epsilon ? 为 0.1 的 ? ? \epsilon- ??贪心策略:
到此,多臂赌博机问题就找到了求解方法,也就是最原始的强化学习。
马尔科夫决策过程(Markov Decision Process,MDP)是强化学习的基础,相比于多臂赌博机问题,马尔科夫决策过程多了状态转移及其决策过程。
我们先来认识一下状态、状态转移以及决策三个概念:
下面就是一个马尔科夫决策过程示意图:
在上图中,我们可以找出多条轨迹,用来描述Agent的行为,例如: τ 1 = S 1 → a = a 1 , r = r 1 S 2 → a = a 2 , r = r 2 S 3 → a = a 3 , r = r 3 S 4 τ 2 = S 1 → a = a 4 , r = r 4 S 3 → a = a 3 , r = r 3 S 4 \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??=S1?a=a1?,r=r1??S2?a=a2?,r=r2??S3?a=a3?,r=r3??S4?=S1?a=a4?,r=r4??S3?a=a3?,r=r3??S4?? τ 2 \tau_2 τ2?没有进入过状态 S 2 S_2 S2?,可能是因为Agent认为要迟到了,从 S 1 S_1 S1?转移状态到 S 2 S_2 S2?的Reward太低,所以直接转移状态到了 S 3 S_3 S3?。
马尔科夫决策过程的量化计算中有一个重要参数称为折扣因子(Discount Factor) γ \gamma γ,之所以要引入这样一个参数,有着以下三个理由:
在有了Agent所处的状态 S S S、折扣因子 γ \gamma γ、状态转移时的回报 R R R之后,我们就可以用贝尔曼方程来定义马尔科夫决策过程的折扣累计回报期望值了:
假设有如下的马尔科夫决策过程:
假设Agent正处于状态
S
1
S_1
S1?,目标任务是Agent到达
S
4
S_4
S4?然后回到
S
1
S_1
S1?。则在
S
1
S_1
S1?时会有如下两条轨迹可以完成该任务:
τ
1
=
S
1
→
a
=
a
1
,
r
=
2
S
2
→
a
=
a
2
,
r
=
4
S
3
→
a
=
a
3
,
r
=
9
S
4
→
a
=
a
5
,
r
=
3
S
3
→
a
=
a
6
,
r
=
7
S
1
\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?=S1?a=a1?,r=2?S2?a=a2?,r=4?S3?a=a3?,r=9?S4?a=a5?,r=3?S3?a=a6?,r=7?S1?
τ
2
=
S
1
→
a
=
a
4
,
r
=
6
S
3
→
a
=
a
3
,
r
=
9
S
4
→
a
=
a
5
,
r
=
3
S
3
→
a
=
a
6
,
r
=
7
S
1
\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?=S1?a=a4?,r=6?S3?a=a3?,r=9?S4?a=a5?,r=3?S3?a=a6?,r=7?S1?设折扣因子的值为0.2,则这两条轨迹的折扣累计回报期望为:
Q
π
(
s
,
a
)
τ
1
=
E
π
[
G
t
∣
S
t
=
s
,
A
t
=
a
]
=
E
π
[
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
∣
S
t
=
s
,
A
t
=
a
]
=
1
5
(
0.
2
0
×
2
+
0.
2
1
×
4
+
0.
2
2
×
9
+
0.
2
3
×
3
+
0.
2
4
×
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.63904?
Q
π
(
s
,
a
)
τ
2
=
E
π
[
G
t
∣
S
t
=
s
,
A
t
=
a
]
=
E
π
[
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
∣
S
t
=
s
,
A
t
=
a
]
=
1
4
(
0.
2
0
×
6
+
0.
2
1
×
9
+
0.
2
2
×
3
+
0.
2
3
×
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 处于状态 S 1 S_1 S1? 时,应当采取动作 a 4 a_4 a4?才能获取更高的 Reward。
所谓经典强化学习算法,指的是表格型的强化学习算法,这种算法适用于的状态空间离散有限的马尔科夫决策过程。有限代表有终止状态,这样 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处于状态 s 4 s_4 s4?时,选择动作 a 4 a_4 a4?就会有最大的Q值: Q ( s t = s 4 , a t = a 4 ) = 23.5 Q(s_t=s_4,a_t=a_4)=23.5 Q(st?=s4?,at?=a4?)=23.5
常见的表格型强化学习方法有:
推荐阅读:强化学习 - 基于表格型的求解方法
深度强化学习方法就是利用神经网络提取输入特征 或 用神经网络拟合值函数 Q ( s , a ) Q(s,a) Q(s,a)和 V ( s ) V(s) V(s),它适用于状态空间连续或状态数无穷多的马尔科夫决策过程。
之所以提出深度强化学习方法,是因为:
常见的深度强化学习算法有:
视频:
书籍:
论文:
这一节推荐了很多相关资料,之所以要看这么多,不是因为强化学习本身很复杂,是因为不同人有不同理解,从不同角度对强化学习进行全方位的学习,才能有更深入和正确的理解。
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地...
MySQL 运维 - 从零开始学习 一、数据库类型 ? 常见的数据库类型 二、数据库管理...
display-namedefaultroot/display-name servlet servlet-namedebugjsp/servlet-n...
在用java进行web业务开发的时候,对于页面上接收到的参数,除了极少数是步可预知...
信号章节 -- 信号章节总体概要 信号基本概念 信号是异步事件,发送信号的线程可...
本文实例为大家分享了JS实现纸牌发牌动画的具体代码,供大家参考,具体内容如下 ...
无论是Windows还是macOS,都少不了各种小工具的加持。作为操作系统中必不可少的...
SQL可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据、建立...
我们在用ajax请求数据时,可能会遇到一次点击多次触发的可能。 (比如说:ajax ...
本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大...