参考文献:
[1]《机器学习》,周志华(西瓜书)
[2]《强化学习》,邹伟,等(鳄鱼书)
(今天看书总是走神,干脆总结一下,希望帮自己理清思路。如果碰巧能被大神看到,如有不正确或不严谨之处,万望指教!)
动态规划法
动态规划法是典型的有模型强化学习算法,即模型已知,对任意状态
x
x
x,
x
′
x'
x′和动作
a
a
a,在
x
x
x状态下执行动作
a
a
a转移到
x
′
x'
x′状态的概率
P
x
→
x
′
a
P_{x→x'}^a
Px→x′a是已知的,该转移所带来的奖赏
R
x
→
x
′
a
R_{x→x'}^a
Rx→x′a也是已知的。
在每执行一步策略后就进行值函数的更新。
1.策略评估
V
π
(
x
,
a
)
V^\pi(x,a)
Vπ(x,a)表示从状态
x
x
x出发,使用策略
π
\pi
π所才来的累积奖赏;
Q
π
(
x
,
a
)
Q^\pi(x,a)
Qπ(x,a)表示从状态
x
x
x出发,执行动作a后再使用策略
π
\pi
π带来的累积奖赏。
对于T步累计奖赏有
V
T
π
=
∑
a
∈
A
π
(
x
,
a
)
∑
x
′
∈
X
P
x
→
x
′
a
(
1
T
R
x
→
x
′
a
+
T
−
1
T
V
T
−
1
π
(
x
′
)
)
V_T^\pi=\sum_{a\in A}\pi(x,a)\sum_{x'\in X}P_{x→x'}^a(\frac{1}{T}R_{x→x'}^a+\frac{T-1}{T} V_{T-1}^\pi(x'))
VTπ=∑a∈Aπ(x,a)∑x′∈XPx→x′a(T1Rx→x′a+TT−1VT−1π(x′))
对于
γ
\gamma
γ折扣累计奖赏有
V
γ
π
(
x
)
=
∑
a
∈
A
π
(
x
,
a
)
∑
x
′
∈
X
P
x
→
x
′
a
(
R
x
→
x
′
a
+
γ
V
γ
π
(
x
′
)
)
V_\gamma^\pi(x)=\sum_{a\in A}\pi(x,a)\sum_{x'\in X}P_{x→x'}^a(R_{x→x'}^a+\gamma V_\gamma^\pi(x'))
Vγπ(x)=∑a∈Aπ(x,a)∑x′∈XPx→x′a(Rx→x′a+γVγπ(x′))
有了状态值函数V,就能直接计算出状态-动作值函数
Q
T
π
=
∑
x
′
∈
X
P
x
→
x
′
a
(
1
T
R
x
→
x
′
a
+
T
−
1
T
V
T
−
1
π
(
x
′
)
)
Q_T^\pi=\sum_{x'\in X}P_{x→x'}^a(\frac{1}{T}R_{x→x'}^a+\frac{T-1}{T} V_{T-1}^\pi(x'))
QTπ=∑x′∈XPx→x′a(T1Rx→x′a+TT−1VT−1π(x′))
Q
γ
π
(
x
)
=
∑
x
′
∈
X
P
x
→
x
′
a
(
R
x
→
x
′
a
+
γ
V
γ
π
(
x
′
)
)
Q_\gamma^\pi(x)=\sum_{x'\in X}P_{x→x'}^a(R_{x→x'}^a+\gamma V_\gamma^\pi(x'))
Qγπ(x)=∑x′∈XPx→x′a(Rx→x′a+γVγπ(x′))
2.策略改进
立项的策略应能最大化累积奖赏:
π
∗
=
arg max
π
∑
x
∈
X
V
π
(
x
)
\pi^*=\argmax_\pi \sum_{x\in X}V^\pi(x)
π∗=πargmax∑x∈XVπ(x)
V
T
∗
(
x
)
=
max
a
∈
A
∑
x
′
∈
X
P
x
→
x
′
a
(
1
T
R
x
→
x
′
a
+
T
−
1
T
V
T
−
1
π
(
x
′
)
)
V_T^*(x)=\max_{a\in A}\sum_{x'\in X}P_{x→x'}^a(\frac{1}{T}R_{x→x'}^a+\frac{T-1}{T} V_{T-1}^\pi(x'))
VT∗(x)=maxa∈A∑x′∈XPx→x′a(T1Rx→x′a+TT−1VT−1π(x′))
V
γ
∗
(
x
)
=
max
a
∈
A
∑
x
′
∈
X
P
x
→
x
′
a
(
R
x
→
x
′
a
+
γ
V
γ
π
(
x
′
)
)
V_\gamma^*(x)=\max_{a\in A}\sum_{x'\in X}P_{x→x'}^a(R_{x→x'}^a+\gamma V_\gamma^\pi(x'))
Vγ∗(x)=maxa∈A∑x′∈XPx→x′a(Rx→x′a+γVγπ(x′))
于是:
V
∗
(
x
)
=
max
x
∈
A
Q
π
∗
(
x
,
a
)
V^*(x)=\max_{x\in A}Q^{\pi^*}(x,a)
V∗(x)=maxx∈AQπ∗(x,a)
则最优状态-动作值函数有
Q
T
∗
(
x
,
a
)
=
∑
x
′
∈
X
P
x
→
x
′
a
(
1
T
R
x
→
x
′
a
+
T
−
1
T
max
a
′
∈
A
Q
T
−
1
∗
(
x
′
,
a
′
)
)
Q_T^*(x,a)=\sum_{x'\in X}P_{x→x'}^a(\frac{1}{T}R_{x→x'}^a+\frac{T-1}{T} \max_{a'\in A}Q_{T-1}^*(x',a'))
QT∗(x,a)=∑x′∈XPx→x′a(T1Rx→x′a+TT−1maxa′∈AQT−1∗(x′,a′))
Q
γ
π
(
x
)
=
∑
x
′
∈
X
P
x
→
x
′
a
(
R
x
→
x
′
a
+
γ
max
a
′
∈
A
Q
γ
∗
(
x
′
,
a
′
)
)
Q_\gamma^\pi(x)=\sum_{x'\in X}P_{x→x'}^a(R_{x→x'}^a+\gamma \max_{a'\in A}Q_{\gamma}^*(x',a'))
Qγπ(x)=∑x′∈XPx→x′a(Rx→x′a+γmaxa′∈AQγ∗(x′,a′))
3.策略迭代与值迭代
策略迭代:策略评估→改进策略→策略评估→改进策略……
值迭代:将策略改进视为值函数的改善,得
V
T
(
x
)
=
max
a
∈
A
∑
x
′
∈
X
P
x
→
x
′
a
(
1
T
R
x
→
x
′
a
+
T
−
1
T
V
T
−
1
(
x
′
)
)
V_T(x)=\max_{a\in A}\sum_{x'\in X}P_{x→x'}^a(\frac{1}{T}R_{x→x'}^a+\frac{T-1}{T} V_{T-1}(x'))
VT(x)=maxa∈A∑x′∈XPx→x′a(T1Rx→x′a+TT−1VT−1(x′))
V
γ
∗
(
x
)
=
max
a
∈
A
∑
x
′
∈
X
P
x
→
x
′
a
(
R
x
→
x
′
a
+
γ
V
γ
(
x
′
)
)
V_\gamma^*(x)=\max_{a\in A}\sum_{x'\in X}P_{x→x'}^a(R_{x→x'}^a+\gamma V_\gamma(x'))
Vγ∗(x)=maxa∈A∑x′∈XPx→x′a(Rx→x′a+γVγ(x′))
免模型学习
学习算法不依赖于环境建模
1.蒙特卡洛强化学习
一种直接的策略评估评估替代方法是多次“采样”,然后求取平均累积奖赏来作为期望累积奖赏的近似。
由于模型未知,从V到Q转换困难,估计对象从V转变为Q。
其本质是通过多次尝试后求平均来作为期望累积奖赏的近似,但它在求平均时是“批量处理”进行的,即在一个完整的采样轨迹完成后再对所有状态-动作对进行更新。
此类算法需在完成一个采样轨迹之后再更新策略的值估计。缺点是:未充分利用强化学习任务的MDP结构。
1.1同策略蒙特卡洛学习算法
欲较好地获得值函数的估计,就需要多条不同采样轨迹。
蒙特卡洛方法进行策略评估后,进行策略改进。被评估和被改进的是同一个策略,因此称为“同策略”蒙特卡洛强化学习算法。
同策略蒙特卡洛强化学习算法最终产生的是
ϵ
\epsilon
ϵ-贪心策略。
1.2异策略蒙特卡洛学习算法
在策略评估时引入
ϵ
\epsilon
ϵ-贪心策略,在策略改进时改进原策略。
2.时序差分学习
结合了动态规划与蒙特卡洛的思路。
将蒙特卡洛强化学习的更新过程增量式进行。设对于状态-动作对
(
x
,
a
)
(x,a)
(x,a),假设基于
t
t
t个采样已估计出值函数
Q
t
π
(
x
,
a
)
=
1
t
∑
i
=
1
t
r
i
Q_t^\pi (x,a)=\frac{1}{t}\sum_{i=1}^{t}r_i
Qtπ(x,a)=t1∑i=1tri,则在得到第
t
+
1
t+1
t+1个采样
r
t
+
1
r_{t+1}
rt+1时,通过增量求和可得
Q
t
+
1
π
(
x
,
a
)
=
Q
t
π
(
x
,
a
)
+
α
(
R
x
→
x
′
a
+
γ
Q
t
π
(
x
′
,
a
′
)
+
Q
t
π
(
x
,
a
)
)
Q_{t+1}^\pi(x,a)=Q_{t}^\pi(x,a)+\alpha (R_{x→x'}^a+\gamma Q_{t}^\pi(x',a')+Q_{t}^\pi(x,a))
Qt+1π(x,a)=Qtπ(x,a)+α(Rx→x′a+γQtπ(x′,a′)+Qtπ(x,a))
Sarsa算法是一个同策略算法,评估与执行均为
ϵ
\epsilon
ϵ-贪心策略。
将Sarsa修改为异策略算法,得到Q-学习算法
3.资格迹
状态值函数更新参考的距离在1~N之间。资格迹两种视角:
1)前向视角(理论视角):由当前状态出发向还未访问的状态观察设计,认为资格迹是连接时序差分法和蒙特卡洛方法的桥梁。
2)后向视角(工程视角):由当前状态向已访问过的状态观察设计的一种算法。
前向视角告诉我们资格迹在理论层面如何工作,后向视角告诉我们在工程层面如何实现。(一般采用后向视角实现)
3.1Sarsa(
λ
\lambda
λ)方法
Sarsa(
λ
\lambda
λ)后向算法为单个轨迹内,每进行一个时间步,都会基于这个时间步的数据对行为值函数进行更新,产生采样的策略和评估改进的策略都是
ϵ
\epsilon
ϵ-贪心策略。
3.2Q(
λ
\lambda
λ)算法
4.总结
蒙特卡洛法:更新当前状态值函数时,蒙特卡洛法中,这个距离是整个轨迹的长度,记为N。
时序差分法:状态值更新距离是1个时间步。
资格迹:状态值更新在1~N之间的距离。
值函数近似
之前的强化学习为表格型强化学习。
状态空进连续,有无穷多个状态。直接对连续状态空间的值函数进行学习。
1.线性逼近
线性逼近时选定基函数。
假定状态空间为n维实数空间
X
=
R
n
X=\textbf{R}^n
X=Rn,状态线性函数为:
V
θ
(
x
)
=
θ
T
x
=
∑
i
=
1
d
θ
i
x
i
(
s
)
V_\boldsymbol{\theta}(x)=\boldsymbol{\theta}^T\boldsymbol{x}=\sum_{i=1}^d\boldsymbol{\theta}_ix_i(s)
Vθ(x)=θTx=∑i=1dθixi(s)
这个时候
V
θ
(
x
)
V_\boldsymbol{\theta}(x)
Vθ(x)还是关于参数向量
θ
\boldsymbol{\theta}
θ的线性函数,因此还是属于线性函数逼近的范畴。此时
x
(
s
)
\boldsymbol{x}(\boldsymbol{s})
x(s)称为状态s的特征函数(基函数)。
常见基函数:1.多项式基函数;2.傅里叶基函数;3.径向基函数。
1.1增量法
针对每一步(轨迹中的每一个状态转换序列),一旦有增量发生,则立即优化近似函数。
希望学到的值函数尽可能近似真实值函数
V
π
(
s
)
V_\pi(s)
Vπ(s),近似程度常用最小而成误差来度量:
E
θ
=
E
π
[
(
V
π
(
s
)
−
θ
T
x
(
s
)
)
2
]
E_\theta=E_\pi[(\boldsymbol{V}_\pi(s)-\boldsymbol{\theta}^T\boldsymbol{x}(\boldsymbol{s}))^2]
Eθ=Eπ[(Vπ(s)−θTx(s))2]
采用梯度下降法,对误差求负倒数,整理,得到单个样本的更新规则:
θ
=
θ
+
α
(
V
π
(
x
)
−
θ
T
x
(
s
)
)
x
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(V^\pi(\boldsymbol{x})-\boldsymbol{\theta}^T\boldsymbol{x}(s))\boldsymbol{x}
θ=θ+α(Vπ(x)−θTx(s))x
由于并不知道真实函数
V
π
(
s
)
V^\pi(s)
Vπ(s)的取值,可以考虑使用任何一个无模型方法对其进行估计。
1.1.1基于蒙特卡洛方法的参数逼近
θ
=
θ
+
α
(
G
t
−
θ
T
x
(
s
t
)
)
x
(
s
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(G_t-\boldsymbol{\theta}^T\boldsymbol{x}(s_t))\boldsymbol{x}(s_t)
θ=θ+α(Gt−θTx(st))x(st)
1.1.2基于时序差分法的参数逼近
θ
=
θ
+
α
(
R
t
+
1
+
γ
θ
T
x
(
s
t
+
1
)
−
θ
T
x
(
s
t
)
)
x
(
s
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(R_{t+1}+\gamma\boldsymbol{\theta}^T\boldsymbol{x}(s_{t+1})-\boldsymbol{\theta}^T\boldsymbol{x}(s_t))\boldsymbol{x}(s_t)
θ=θ+α(Rt+1+γθTx(st+1)−θTx(st))x(st)
1.1.3基于前向TD(
λ
\lambda
λ)的参数逼近
θ
=
θ
+
α
(
G
t
λ
−
θ
T
x
(
s
t
)
)
x
(
s
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(G_t^\lambda-\boldsymbol{\theta}^T\boldsymbol{x}(s_t))\boldsymbol{x}(s_t)
θ=θ+α(Gtλ−θTx(st))x(st)
1.1.4基于后向TD(
λ
\lambda
λ)的参数逼近
整体规则:
θ
=
θ
+
α
(
Q
π
(
s
,
a
)
−
θ
T
x
(
s
,
a
)
)
x
(
s
,
a
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(Q^\pi(\boldsymbol{s},\boldsymbol{a})-\boldsymbol{\theta}^T\boldsymbol{x}(\boldsymbol{s},\boldsymbol{a}))\boldsymbol{x}(\boldsymbol{s},\boldsymbol{a})
θ=θ+α(Qπ(s,a)−θTx(s,a))x(s,a)
基于蒙特卡洛的参数逼近:
θ
=
θ
+
α
(
G
t
−
θ
T
x
(
s
t
,
a
t
)
)
x
(
s
t
,
a
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(G_t-\boldsymbol{\theta}^T\boldsymbol{x}(s_t,a_t))\boldsymbol{x}(s_t,a_t)
θ=θ+α(Gt−θTx(st,at))x(st,at)
基于Sarsa的参数逼近为:
θ
=
θ
+
α
(
R
t
+
1
+
γ
θ
T
x
(
s
t
+
1
,
a
t
+
1
)
−
θ
T
x
(
s
t
,
a
t
)
)
x
(
s
t
,
a
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(R_{t+1}+\gamma\boldsymbol{\theta}^T\boldsymbol{x}(s_{t+1},\boldsymbol{a}_{t+1})-\boldsymbol{\theta}^T\boldsymbol{x}(s_t,\boldsymbol{a}_t))\boldsymbol{x}(s_t,a_t)
θ=θ+α(Rt+1+γθTx(st+1,at+1)−θTx(st,at))x(st,at)
基于Q-学习的参数逼近为:
θ
=
θ
+
α
(
R
t
+
1
+
γ
θ
T
x
(
s
t
+
1
,
π
(
s
t
+
1
)
)
−
θ
T
x
(
s
t
,
a
t
)
)
x
(
s
t
,
a
t
)
\boldsymbol{\theta}=\boldsymbol{\theta}+\alpha(R_{t+1}+\gamma\boldsymbol{\theta}^T\boldsymbol{x}(s_{t+1},\pi(\boldsymbol{s}_{t+1}))-\boldsymbol{\theta}^T\boldsymbol{x}(s_t,\boldsymbol{a}_t))\boldsymbol{x}(s_t,a_t)
θ=θ+α(Rt+1+γθTx(st+1,π(st+1))−θTx(st,at))x(st,at)
一下给出其中一种算法的流程:
1.2批量法
针对一批历史数据(如一段轨迹)集中进行近似。
相比于增量法,数据利用率高,计算更为复杂。
批量法是把一段时间内的数据集中起来,如给定一段经验数据集
D
=
{
(
s
1
,
V
1
π
)
,
(
s
2
,
V
2
π
)
,
.
.
.
,
(
s
T
,
V
T
π
)
}
D=\{(s_1,V_1^\pi),(s_2,V_2^\pi),...,(s_T,V_T^\pi)\}
D={(s1,V1π),(s2,V2π),...,(sT,VTπ)}通过学习,找到最好的拟合函数
V
^
(
s
,
θ
)
\hat{V}(s,\theta)
V^(s,θ)使得参数能较好地符合这段时间内所有的数据,满足损失函数最小化:
L
(
θ
)
=
∑
t
=
1
T
(
V
t
π
−
θ
T
x
(
s
t
)
)
2
L(\boldsymbol{\theta})=\sum_{t=1}^T(V_t^\pi-\boldsymbol{\theta}^T\boldsymbol{x}(\boldsymbol{s}_t))^2
L(θ)=∑t=1T(Vtπ−θTx(st))2
对
θ
\theta
θ求导,求解
θ
\theta
θ.,具体各方法求解成果见鳄鱼书P148.以下给出值函数逼近Q学习算法(批量法)如下:
2.非线性逼近
2.1DQN(Deep Q-Network)方法
2.1.1算法要点
DQN在Q-learning基础上进行如下改进:1.DQN使用深度神经网络从原始数据中提取特征,近似行为值函数(Q值);2.DQN利用经历回放对强化学习过程进行训练;3.DQN设置了单独的目标网络来处理TD偏差(一个网络固定参数专门用来产生TD目标,另一个网络专门用来评估策略更新参数,逼近值函数)
2.1.2操作步骤
1.原始图片预处理;2.神经网络参数更新;3.训练;4.评估
2.1.3算法流程
2.2Double DQN(DDQN)方法
将行为选择和行为评估采用不同的值函数实现。
传统DQN中,选择行为和评估行为用的是同一个网络参数,以及同一个值函数。DDQN分别采用不同的值函数实现动作选择和评估。传统DQN自身提供了两个网络:主网络和目标网络。因此可以直接使用主网络选择动作,在用目标网络进行动作评估,不必引入河外网络。
2.3Dueling DQN方法
Dueling DQN在不对算法进行改变的基础上,关注与改造神经网络架构本身,使其训练更为容易,结果更为稳定,更适合于无模型强化学习。
2.3.1价值和优势
将Q值分解为价值(Value)和优势(Advantage)
Q
(
s
,
a
)
=
V
(
s
)
+
A
(
s
,
a
)
Q(s,a)=V(s)+A(s,a)
Q(s,a)=V(s)+A(s,a)
V
(
s
)
V(s)
V(s)可表示在该状态s下所有可能动作对应的动作值函数乘以采取该动作的概率之和。动作值函数Q(s,a)是单个动作所对应的值函数,Q(s,a)-V(s)表示当前动作值函数相对于平均值的大小。故,优势表示的是动作值函数相比于当前状态值函数的优势,是在这个状态下各个动作的相对好坏程度。
2.3.2Dueling DQN算法
其与传统DQN唯一的区别就是网络结构。
模仿学习
(这个部分我暂时不确定是不是基于值函数的方法,是读西瓜书的时候整理的,等我把鳄鱼书整理完再来看它!)
机器能获得人类专家的决策过程返利,从范例中学习,称为“模仿学习”。
1.直接模仿学习
假定获得一批人类专家决策轨迹数据
{
τ
1
,
τ
2
,
.
.
.
,
τ
m
}
\{ \tau_1,\tau_2,...,\tau_m\}
{τ1,τ2,...,τm},每条轨迹包含状态和动作序列
τ
i
=
<
s
1
i
,
a
1
i
,
s
2
i
,
a
2
i
,
.
.
.
,
s
n
i
+
1
i
>
\tau_i=< s_1^i,a_1^i,s_2^i,a_2^i,...,s_{n_i+1}^i>
τi=<s1i,a1i,s2i,a2i,...,sni+1i>,其中
n
i
n_i
ni为第i条轨迹中的转移次数。
可利用监督学习来符合人类专家决策轨迹数据的决策。
将轨迹上所有“状态-动作对”抽取出来,构造一个新的数据集合
D
D
D,即吧状态作为特征,动作作为标记,然后对这个新构造出的数据集合D适用分类或回归算法即可学得策略模型。学得的策略可作为机器新型强化学习的处事策略,在通过强化学习方法基于环境反馈进行改进,获得更好策略。
2.逆强化学习
设计奖赏函数困难,从人类专家提供的范例数据中反推出奖赏函数。
基本思想:欲使机器做出与范例一致的行为,等价于在狗哥奖赏函数的环境中求解最优策略,该最优策略所产生的轨迹与范例数据一致。也就是说,我们要寻找某种奖赏函数使范例数据最优,即可使用这个江上寒暑来训练强化学习策略。
假设将行函数能表达为状态特征的线性函数,即
R
(
x
)
=
w
T
x
R(\boldsymbol{x})=\boldsymbol{w}^T\boldsymbol{x}
R(x)=wTx,策略
π
\pi
π的积累奖赏可写为
ρ
π
=
w
T
E
[
∑
t
=
0
+
∞
γ
t
x
t
∣
π
]
\rho^\pi=\boldsymbol{w}TE[\sum_{t=0}^{+\infty}\gamma^t\boldsymbol{x}_t|\pi]
ρπ=wTE[∑t=0+∞γtxt∣π]
即状态向量加权和的期望与系数
w
\boldsymbol{w}
w的内积。
将向量期望
E
[
∑
t
=
0
+
∞
γ
t
x
t
∣
π
]
E[\sum_{t=0}^{+\infty}\gamma^t\boldsymbol{x}_t|\pi]
E[∑t=0+∞γtxt∣π]简写为
x
ˉ
π
\bar{\boldsymbol{x}}^\pi
xˉπ,可用蒙特卡洛方法通过采样近似期望。可将每条范例轨迹上的状态加权求和再平均,记为
x
ˉ
∗
\bar{\boldsymbol{x}}^*
xˉ∗,于是有:
w
∗
=
arg max
w
min
π
w
T
(
x
ˉ
∗
−
x
ˉ
π
)
\boldsymbol{w}^*=\argmax_{w}\min_\pi \boldsymbol{w}^T(\bar{\boldsymbol{x}}^*-\bar{\boldsymbol{x}}^\pi)
w∗=wargmaxminπwT(xˉ∗−xˉπ)
s
.
t
.
∣
∣
w
∣
∣
≤
1
s.t. ||\boldsymbol{w}||\leq1
s.t.∣∣w∣∣≤1