RL夏令营第一讲回顾--强化学习介绍和Value-Based方法
动态规划
如果我们对环境的所有信息都了解,那么便可以用动态规划来求解问题。但是对于RL问题,大多数情况下我们是不知道环境的所有信息的,即不知道 P s s ′ a \mathscr{P}_{s s^{\prime}}^{a} Pss′a和 R s ′ a \mathscr{R}_{s^{\prime}}^{a} Rs′a,于是我们就不能直接应用贝尔曼方程。
- 对于预测问题:
- 输入:MDP模型和策略
π
\pi
π
- 输出:值函数 v π v_{\pi} vπ
- 输入:MDP模型和策略
π
\pi
π
- 对于控制问题
- 输入:MDP模型
- 输出:最优值函数 v ∗ v_{*} v∗和 π ∗ \pi_{*} π∗
策略评价(Policy Evaluation)
问题:对于给定的策略
π
\pi
π来计算值函数。
解决方法:对贝尔曼期望方程进行反向迭代。
如下图的更新方式:
策略提升(Policy Improvement)
- 考虑一种确定性的策略 a = π ( s ) a = \pi(s) a=π(s)
- 可以采用贪婪的方法得到更好地策略,也就是策略提升
π ′ ( s ) = argmax a ∈ A q π ( s , a ) \pi^{\prime}(s)=\underset{a \in \mathscr{A}}{\operatorname{argmax}} q_{\pi}(s, a) π′(s)=a∈Aargmaxqπ(s,a)
如果满足下式在,则策略提升可以停止:
q π ( s , π ′ ( s ) ) = max a ∈ A q π ( s , a ) = q π ( s , π ( s ) ) = v π ( s ) q_{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathscr{A}} q_{\pi}(s, a)=q_{\pi}(s, \pi(s))=v_{\pi}(s) qπ(s,π′(s))=a∈Amaxqπ(s,a)=qπ(s,π(s))=vπ(s)
因为此时贝尔曼最优方程已经满足:
v π ( s ) = max a ∈ A q π ( s , a ) v_{\pi}(s)=\max _{a \in \mathscr{A}} q_{\pi}(s, a) vπ(s)=a∈Amaxqπ(s,a)
所以此时的策略 π \pi π是最优策略。
策略迭代
对于策略迭代来说要学到最优策略不用等到
v
π
(
s
)
v_{\pi}(s)
vπ(s)收敛。
价值迭代
问题:找到最优策略
π
\pi
π
解决方法:利用贝尔曼最优方程反向迭代
model free的方法
对于model-based方法,我们选择策略的时候采用的是如下的方式:
π
′
(
s
)
=
arg
max
a
∈
A
(
R
s
a
+
P
s
s
′
a
V
(
s
′
)
)
\pi^{\prime}(s)=\underset{a \in \mathscr{A}}{\arg \max }\left(\mathscr{R}_{s}^{a}+\mathscr{P}_{s s^{\prime}}^{a} V\left(s^{\prime}\right)\right)
π′(s)=a∈Aargmax(Rsa+Pss′aV(s′))
而对于model-free的方法,我们无法知道状态转移矩阵和奖励函数的大小,所以我们需要用Q函数来进行greedy采样:
π
′
(
s
)
=
arg
max
a
∈
A
Q
(
s
,
a
)
\pi^{\prime}(s)=\underset{a \in \mathscr{A}}{\arg \max } Q(s, a)
π′(s)=a∈AargmaxQ(s,a)
Off-Poicy Learning
Off-Policy的意思就是通过follow行为策略(behavior policy) μ ( a ∣ s ) \mu(a|s) μ(a∣s),来评价目标策略(target policy) π ( a ∣ s ) \pi(a|s) π(a∣s)。
重要性采样
从一个不同的分布中估计期望
E
X
∼
P
[
f
(
X
)
]
=
∑
P
(
X
)
f
(
X
)
=
∑
Q
(
X
)
P
(
X
)
Q
(
X
)
f
(
X
)
=
E
X
∼
Q
[
P
(
X
)
Q
(
X
)
f
(
X
)
]
\begin{aligned} \mathbb{E}_{X \sim P}[f(X)] &=\sum P(X) f(X) \\ &=\sum Q(X) \frac{P(X)}{Q(X)} f(X) \\ &=\mathbb{E}_{X \sim Q}\left[\frac{P(X)}{Q(X)} f(X)\right] \end{aligned}
EX∼P[f(X)]=∑P(X)f(X)=∑Q(X)Q(X)P(X)f(X)=EX∼Q[Q(X)P(X)f(X)]
重要性采样是沿着整个episode进行累乘。
G
t
π
/
μ
=
π
(
A
t
∣
S
t
)
μ
(
A
t
∣
S
t
)
π
(
A
t
+
1
S
t
+
1
)
μ
(
A
t
+
1
∣
S
t
+
1
)
…
π
(
A
T
∣
S
T
)
μ
(
A
T
∣
S
T
)
G
t
G_{t}^{\pi / \mu}=\frac{\pi\left(A_{t} \mid S_{t}\right)}{\mu\left(A_{t} \mid S_{t}\right)} \frac{\pi\left(A_{t+1} S_{t+1}\right)}{\mu\left(A_{t+1} \mid S_{t+1}\right)} \ldots \frac{\pi\left(A_{T} \mid S_{T}\right)}{\mu\left(A_{T} \mid S_{T}\right)} G_{t}
Gtπ/μ=μ(At∣St)π(At∣St)μ(At+1∣St+1)π(At+1St+1)…μ(AT∣ST)π(AT∣ST)Gt
这样的话,重要性采样会极大地增加variance。
Q-learning
Q-learning不需要重要性采样,在Q-learning中target policy是greedy策略,behavior policy策略是
ϵ
−
g
r
e
e
d
y
\epsilon-greedy
ϵ−greedy。
所以target策略的Q函数的更新方式就如下:
R
t
+
1
+
γ
Q
(
S
t
+
1
,
A
′
)
=
R
t
+
1
+
γ
Q
(
S
t
+
1
,
argmax
a
′
Q
(
S
t
+
1
,
a
′
)
)
=
R
t
+
1
+
max
a
′
γ
Q
(
S
t
+
1
,
a
′
)
\begin{array}{l} R_{t+1}+\gamma Q\left(S_{t+1}, A^{\prime}\right) \\ =R_{t+1}+\gamma Q\left(S_{t+1}, \underset{a^{\prime}}{\operatorname{argmax}} Q\left(S_{t+1}, a^{\prime}\right)\right) \\ =R_{t+1}+\max _{a^{\prime}} \gamma Q\left(S_{t+1}, a^{\prime}\right) \end{array}
Rt+1+γQ(St+1,A′)=Rt+1+γQ(St+1,a′argmaxQ(St+1,a′))=Rt+1+maxa′γQ(St+1,a′)
有关Cliff Walking的思考
在前500个回合的时候,Q-learning的reward会比SARSA的要低。但最终的话,Q-learning学得到最优路径,但reward并没有比SARSA高。原因是:
Q-Learning可以收敛出Optimal Policy而SARSA却选择的是Safe Path,本质上是因为Q-Learning的Target Policy是绝对的greedy策略,绝对的greedy策略保证了Agent在Q值进入收敛后不会也不可能再记录可能掉入悬崖的状态动作的Q值,也可以说是Off-Policy类的控制方法并不会受到greedy策略无探索性的影响,所以才能够产生Optimal Policy。
然而SARSA算法使用的epsilon-greedy策略来更新Q值,也就是说不论何时,Agent总是有epsilon的概率选择非最优的动作,其中掉入悬崖的动作也始终有一定的概率被选中,并在Q函数更新时被记录下来,所以整个Grid的Q函数变成了越靠近悬崖,值越小的分布,最终导致了SARSA选择的是safe path。
Q-Learning的Target Policy是基于Q值的完全greedy policy,但在学习探索过程中决定Agent行走的Behavior Policy的更新却和SARSA同是epsilon-greedy policy。在进入收敛后,由于Q-Learning的Agent每次选择的都是Optimal Path但又因为Behavior Policy保持了一定的探索性,所以总是有一定的概率选择掉入悬崖的动作,虽然这些动作产生的Q值并不会被更新记录。SARSA的Agent在进入收敛后,基本上选择的是Safe Pass,掉入悬崖的概率比Q-Learning的Agent要小很多。所以,SARSA算法平均每个episode获得的Reward值通常要比Q-Learning更接近实际的步数乘上-1,也就是说SARSA的在线学习的效果比Q-Learning更好。
Value Function Approximation
在状态和动作空间很大的时候,我们再也不能用查表的方式进行Q值估计,所以需要采用一个Function Approximation来逼近。所以常规想法的流程是这样的:
-
我们的目标是估计一个动作-价值函数
q ^ ( S , A , w ) ≈ q π ( S , A ) \hat{q}(S, A, \mathbf{w}) \approx q_{\pi}(S, A) q^(S,A,w)≈qπ(S,A) -
计算两者的差值,并利用梯度下降来更新参数
J ( w ) = E π [ ( q π ( S , A ) − q ^ ( S , A , w ) ) 2 ] Δ w = α ( q π ( S , A ) − q ^ ( S , A , w ) ) ∇ w q ^ ( S , A , w ) J(\mathbf{w})=\mathbb{E}_{\pi}\left[\left(q_{\pi}(S, A)-\hat{q}(S, A, \mathbf{w})\right)^{2}\right]\\ \Delta \mathbf{w}=\alpha\left(q_{\pi}(S, A)-\hat{q}(S, A, \mathbf{w})\right) \nabla_{\mathbf{w}} \hat{q}(S, A, \mathbf{w}) J(w)=Eπ[(qπ(S,A)−q^(S,A,w))2]Δw=α(qπ(S,A)−q^(S,A,w))∇wq^(S,A,w)
但这里存在的问题是我们是不知道 q π ( S , A ) q_{\pi}(S,A) qπ(S,A)的。
所以我们需要替换 q π ( S , A ) q_{\pi}(S,A) qπ(S,A)。
对于MC而言,target是
G
t
G_{t}
Gt:
Δ
w
=
α
(
G
t
−
q
^
(
S
t
,
A
t
,
w
)
)
∇
w
q
^
(
S
t
,
A
t
,
w
)
\Delta \mathbf{w}=\alpha\left(G_{t}-\hat{q}\left(S_{t}, A_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{q}\left(S_{t}, A_{t}, \mathbf{w}\right)
Δw=α(Gt−q^(St,At,w))∇wq^(St,At,w)
对于TD而言,target是
R
t
+
1
+
γ
q
^
(
S
t
+
1
,
A
t
+
1
w
)
R_{t+1}+\gamma \hat{q}\left(S_{t+1}, A_{t+1} \mathbf{w}\right)
Rt+1+γq^(St+1,At+1w):
Δ
w
=
α
(
R
t
+
1
+
γ
q
^
(
S
t
+
1
,
A
t
+
1
,
w
)
−
q
^
(
S
t
,
A
t
,
w
)
)
∇
w
q
^
(
S
t
,
A
t
,
w
)
\Delta \mathbf{w}=\alpha\left(R_{t+1}+\gamma \hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}\right)-\hat{q}\left(S_{t}, A_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{q}\left(S_{t}, A_{t}, \mathbf{w}\right)
Δw=α(Rt+1+γq^(St+1,At+1,w)−q^(St,At,w))∇wq^(St,At,w)
对于Q-learning来说参数更新方式如下:
- 根据 ϵ − g r e e d y \epsilon-greedy ϵ−greedy来采取动作和观察 ( s , a , r , s ′ ) (s,a,r,s^{'}) (s,a,r,s′);
- 参数的变化采用如下的方式:
Δ w = α ( r + γ max a ′ q ^ ( s ′ , a ′ , w ) − q ^ ( s , a , w ) ) ∇ w q ^ ( s , a , w ) \Delta \mathbf{w}=\alpha\left(r+\gamma \max _{a^{\prime}} \hat{q}\left(s^{\prime}, a^{\prime}, \mathbf{w}\right)-\hat{q}(s, a, \mathbf{w})\right) \nabla_{\mathbf{w}} \hat{q}(s, a, \mathbf{w}) Δw=α(r+γa′maxq^(s′,a′,w)−q^(s,a,w))∇wq^(s,a,w)
但这样的更新方式存在以下两个问题:
- 状态和状态之间是强相关的,是有时序关系的,不符合神经网络的输入的基本假设;
- 目标值 r + γ max a ′ q ^ ( s ′ , a ′ , w ) r+\gamma \max _{a^{\prime}} \hat{q}\left(s^{\prime}, a^{\prime}, \mathbf{w}\right) r+γmaxa′q^(s′,a′,w)是一直在变化的。
所以DQN的提出就是为了解决这两个问题。
DQN
DQN使用了experience replay和target network来解决。
这里采用memory buffer(解决连续状态之间的相关性)和冻结参数(使得在N步之内,target value是不变的)的思想来分别对应两个解决问题的方法。
DQN存在的问题
DQN的Q值存在过估计的问题。谈到过估计(overestimate)问题的时候,我们需要先交代一下背景,现在训练神经网络的时候,不是一张图一张图的进行训练,我们是通过一个batch一个batch去训练,每个batch里面包含了N张图,所以经常在看到别的网络参数的时候会有一个batch size的参数。
假设N=32,就是32张图分别经过CNN网络计算,然后计算出32个Loss,然后会把这32个Loss求和或者求平均转换成1个Loss,最后才使用back propagate更新网络的参数。
在更新网络的时候,DQN求得的Q值的公式为:
max
a
′
Q
(
S
t
+
1
,
a
′
;
θ
−
)
\max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime} ; \theta^{-}\right)
a′maxQ(St+1,a′;θ−)
每次求得的Q target都是通过取max得到的,然而我们做的是需要对计算出来的Q值取平均之后才能更新我们的网络,我们都知道
E
(
max
(
X
1
,
X
2
)
)
≥
max
(
E
(
X
1
)
,
E
(
X
2
)
)
E(\max (X 1, X 2)) \geq \max (E(X 1), E(X 2))
E(max(X1,X2))≥max(E(X1),E(X2))
可以看出,我们把N(设为32)个Q值先通过取max操作之后,然后求平均(期望),会比我们先算出32个Q值取了期望之后再max要大。这就是overestimate的原因。
Double DQN解决DQN的问题
DQN中有这样一步操作:
max
a
′
Q
(
s
′
,
a
′
;
w
−
)
=
Q
(
s
′
,
arg
max
a
′
Q
(
s
′
,
a
′
;
w
−
)
;
w
−
)
\max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; \mathbf{w}^{-}\right)=Q\left(s^{\prime}, \arg \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; \mathbf{w}^{-}\right) ; \mathbf{w}^{-}\right)
a′maxQ(s′,a′;w−)=Q(s′,arga′maxQ(s′,a′;w−);w−)
等式两边是等价的。DQN有一个显著的问题,就是DQN估计的Q值往往会偏大。这是由于我们Q值是以下一个s’的Q值的最大值来估算的,但下一个state的Q值也是一个估算值,也依赖它的下一个state的Q值…,这就导致了Q值往往会有偏大的的情况出现。于是有人想到一个互相监察的想法。
这个思路也很直观。如果只有一个Q网络,它不是经常吹牛嘛。那我就用两个Q网络,因为两个Q网络的参数有差别,所以对于同一个动作的评估也会有少许不同。我们选取评估出来较小的值来计算目标。这样就能避免Q网络吹牛的情况发生了。
所以Double DQN的更新方式就变成这样了:
r
+
γ
Q
(
s
′
,
arg
max
a
′
Q
(
s
′
,
a
′
;
w
)
;
w
−
)
r+\gamma Q\left(s^{\prime}, \underset{a^{\prime}}{\arg \max } Q\left(s^{\prime}, a^{\prime} ; \mathbf{w}\right) ; \mathbf{w}^{-}\right)
r+γQ(s′,a′argmaxQ(s′,a′;w);w−)
DoubleDQN的算法如下:
这里的参数采用了软更新的更新方式。
Dueling DQN
我们只需要稍微改动DQN中的神经网络的结构,就能大幅提升学习效果,加速收敛,这种新方法叫做Dueling DQN。用一句话概括Dueling DQN就是:它将每一个动作的Q拆分成了state的Value加上每个动作的Advantage。
我们看一下Dueling DQN的神经网络架构和普通DQN有什么不同:
我们可以很明显地看出,上面普通的DQN只有一个输出,就是每一个动作的Q值;而Dueling DQN则拆成了state的Value和每个动作的Advantage。
我们再来看一下公式:
Q
(
s
,
a
;
θ
,
α
,
β
)
=
V
(
s
;
θ
,
β
)
+
A
(
s
,
a
;
θ
,
α
)
Q(s, a ; \theta, \alpha, \beta)=V(s ; \theta, \beta)+A(s, a ; \theta, \alpha)
Q(s,a;θ,α,β)=V(s;θ,β)+A(s,a;θ,α)
它分成了这个state的值,加上每个动作在这个state上的advantage。因为有时候在某种state,无论做什么动作,对下一个state都没有多大的影响,故这样的做法可以加速学习,快速收敛。
Prioritized Experience Replay
创新点:在抽取经验池中过往经验样本时,采取按优先级抽取的方法。
改进原因:原来随机抽取经验忽略了经验之间的重要程度,实际上如人脑中一定会有更为重要的记忆。
带来益处:使得算法更快收敛,效果更好。
有待以后深入地进行研究
DDPG
在连续动作空间我们如何进行 a r g m a x argmax argmax的操作呢?
TD3:Twin Delayed DDPG
对DDPG进行修正。
DQN使用的注意事项
- 先在简单的任务上进行应用,确保我们的应用是正确的;
- 更大的replay_buffer能够提高稳定性;
- 训练好一个DQN是需要时间的;
- 希望一开始用较大的 ϵ \epsilon% ϵ然后逐渐衰减,learning_rate也是如此;
- DDQN可能会更有用;
- 尝试多种随机数种子,每个随机数种子之间差异会比较大。
控制算法的收敛性分析
对于神经网络来说一般来说都是不收敛的。