CNNs and Deep Q Learning
前面的一篇博文介绍了函数价值近似,是以简单的线性函数来做的,这篇博文介绍使用深度神经网络来做函数近似,也就是Deep RL。这篇博文前半部分介绍DNN、CNN,熟悉这些的读者可以跳过,直接看后半部分的Deep Q Learning Part。
Generalization
为什么要使用网络来做近似。
-
希望能使用强化学习来处理自动驾驶汽车,Atari,消费者市场,医疗,教育等等
这些领域一般都会有表格表示无法cover的高维输入特征(signals)或者说观察 -
多数上述领域有巨大的状态(state)和/或动作(action)空间
-
需要能在状态和/或动作之间泛化的Representation(模型的表示/状态-动作价值的表示/价值的表示/策略的表示)
-
那我们就用一个参数化的函数代替表格来表示一个(状态-动作/状态)价值函数
Recall: Stochastic Gradient Descent
上一篇博客概述:Linear Value Function Approximation for Prediction With An Oracle
RL with Function Approximator
- 线性价值函数器近似假定价值函数是一个一系列特征的加权组合,其中每一个特征是其状态的函数
- 线性VFA通常在给定正确的特征集的条件下表示很好
- 但是需要仔细地手动设计特征集
- 一个替代方案是使用更丰富的函数近似簇,他们能够从状态(States)中直接获取而不需要显式的规定所有的特征。
- 本地表示(local representation),其中包括基于核的方法(kernel based approach),有一些吸引人的性质(在某些情景下能得到收敛的结果等),但不能很好的扩展到巨大的空间和数据集上。
Deep Neural Networks(DNN)
DNNs本质上是多个函数的组合。
Deep Neural Networks (DNN) Specification and Fitting
- 通常同时组合了线性和非线性变换
- 线性: h n = ω h n − 1 h_n = \omega h_{n-1} hn=ωhn−1
- 非线性: h n = f ( h n − 1 ) h_n = f(h_{n-1}) hn=f(hn−1) 也被称作激活函数,比如:sigmoid、ReLU
- 为了拟合参数,需要一个loss函数(MSE,log likelihood等)
The benefit of Deep Neural Network Approximators
- 使用分布式表示而不是本地表示
- 通用型函数近似器
- 能仅需要指数级别少的节点/参数来表示同样一个函数
- 可以使用随机梯度下降来学习参数
Convolutional Neural Networks
Why Do We Care About CNNs
- CNNs广泛应用于计算机视觉
- 如果你想根据像素点做决定,对视觉输入来说是非常有用的
Fully Connected Neural Net
Images Have Structure
- 图像有本地结构和关联
- 图像在空间和频率范围中有不同的特征
Convolutional NN
Locality of Information: Receptive Fields
(Filter) Stride
Shared Weights
Feature Map
- 第一个隐藏层的所有的神经元都检测确切相同的特征,只是在输入图像的不同位置做检测
- 特征:使得神经元产生一个特堵部分响应级别的某种输入模式(pattern)(e.g.,一个局部边)
- 为什么这说得通?
- 假定weights和bias(已经学习到的)是隐藏单元能选出一个感知域内的一条竖直边
- 这种能力在图像的其他位置也是有用的
- 对图像所有位置同样的特征检测器都是有用的
产生变换(空间上的)不变形(尝试在图像的任何位置检测该特征) - 受视觉系统启发而来
Convolutional Layer: Multiple Filters
Pooling Layers
Final Layer Typically Fully Connected
Deep Q Learning
Generalization
Deep Reinforcement Learning
- 使用深度神经网络来表示
- 价值函数
- 策略
- 模型
- 使用随机梯度下降(SGD)优化loss函数
Deep Q-Networks(DQNs)
- 使用带权重集
w
\textbf{w}
w的Q-network来表示状态-动作价值函数
Q ^ ( s , a ; w ) ≈ Q ( s , a ) \hat{Q}(s,a;\textbf{w})\approx Q(s,a) Q^(s,a;w)≈Q(s,a)
Recall: Action-Value Function Approximation with an Oracle
这是在做control
- Q ^ π ( s ; a ; w ) ≈ Q π \hat{Q}^\pi(s;a;\textbf{w}) \approx Q^\pi Q^π(s;a;w)≈Qπ
- 最小化真实动作-价值函数
Q
π
Q^\pi
Qπ和近似动作-价值函数的均方误差:
J ( w ) = E π [ ( Q π ( s , a ) − Q ^ ( s , a ; w ) ) 2 ] J(\textbf{w})=\mathbb{E}_\pi[(Q^\pi(s,a)-\hat{Q}(s,a;\textbf{w}))^2] J(w)=Eπ[(Qπ(s,a)−Q^(s,a;w))2] - 使用随机梯度下降来寻找一个局部最小值
− 1 2 ∇ w J ( w ) = E π [ ( Q π ( s , a ) − Q ^ π ( s , a ; w ) ) ∇ w Q ^ π ( s , a ; w ) ] -\frac{1}{2}\nabla_{\textbf{w}}J(\textbf{w}) = \mathbb{E}_\pi[(Q^\pi(s,a)-\hat{Q}^\pi(s,a;\textbf{w}))\nabla_{\textbf{w}}\hat{Q}^\pi(s,a;\textbf{w})] −21∇wJ(w)=Eπ[(Qπ(s,a)−Q^π(s,a;w))∇wQ^π(s,a;w)]
Δ ( w ) = − 1 2 α ∇ w J ( w ) \Delta(\textbf{w})=-\frac{1}{2}\alpha\nabla_{\textbf{w}}J(\textbf{w}) Δ(w)=−21α∇wJ(w) - 随机梯度下降(SGD)采样梯度
Recall: Incremental Model-Free Control Approaches
- 如同策略评估,一个状态的真实状态-动作价值函数是未知的所以使用一个目标值来替代
- 在蒙特·卡罗尔方法,使用一个回报
G
t
G_t
Gt作为一个替代目标
Δ w = α ( G t − Q ^ ( s t , a t ; w ) ) ∇ w Q ^ ( s t , a t ; w ) \Delta_{\textbf{w}}=\alpha(G_t-\hat{Q}(s_t,a_t;\textbf{w}))\nabla_{\textbf{w}}\hat{Q}(s_t,a_t;\textbf{w}) Δw=α(Gt−Q^(st,at;w))∇wQ^(st,at;w) - 在SARSA,代替真实值的是TD目标
r
+
γ
(
s
t
+
1
,
a
t
+
1
;
w
)
r+\gamma(s_{t+1},a_{t+1};\textbf{w})
r+γ(st+1,at+1;w),它利用了当前的函数近似价值
Δ w = α ( r + γ Q ^ ( s t + 1 , a t + 1 ; w ) − Q ^ ( s t , a t ; w ) ) ∇ w ( s t , a t ; w ) \Delta_{\textbf{w}}=\alpha(r+\gamma\hat{Q}(s_{t+1},a_{t+1};\textbf{w})-\hat{Q}(s_t,a_t;\textbf{w}))\nabla_{\textbf{w}}(s_t,a_t;\textbf{w}) Δw=α(r+γQ^(st+1,at+1;w)−Q^(st,at;w))∇w(st,at;w) - 在Q-learning,替代真实值的是TD目标
r
+
γ
m
a
x
a
Q
^
(
s
t
+
1
,
a
;
w
)
r+\gamma max_a\hat{Q}(s_{t+1},a;\textbf{w})
r+γmaxaQ^(st+1,a;w),它利用了当前函数近似价值的最大值
Δ w = α ( r + γ m a x a Q ^ ( s t + 1 , a ; w ) − Q ^ ( s t , a t ; w ) ) ∇ w Q ^ ( s t , a t ; w ) \Delta_{\textbf{w}}=\alpha(r+\gamma max_a\hat{Q}(s_{t+1},a;\textbf{w})-\hat{Q}(s_t,a_t;\textbf{w}))\nabla_{\textbf{w}}\hat{Q}(s_t,a_t;w) Δw=α(r+γmaxaQ^(st+1,a;w)−Q^(st,at;w))∇wQ^(st,at;w)
DQNs in Atari
DeepMind发表在nature上的文章,源代码可以在sites.google.com/a/deepmind.com/dqn找到
- 端到端从像素集s中学习 Q ( s , a ) Q(s,a) Q(s,a)价值
- 输入状态s是最后四帧的原始像素集的堆砌
- 输出是18个控制杆/按钮位置的 Q ( s , a ) Q(s,a) Q(s,a)值
- 回报是那一步的得分
- 网络结构和超参数在所有的游戏中都是固定的
他们的核心论点是不必在每一个游戏单独使用完全不同的网络架构来做完全不同的超参数调参来获得成功,这是一个通用的结构足够针对所有的游戏去学习好的决策。它的贡献在于我们尝试得到某种通用的算法和相关配置,能超越我们其他在强化学习论文上看到的只能在三个普通例子上运行。它在50中游戏上尝试做到很好。
Q-Learning with Value Function Approximation
- 使用随机梯度下降最小化MSE损失
- 使用表格查询表示收敛到最优 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a)
- 但是使用VFA的Q-learning会发散
- 两个担忧引发了这个问题
- 采样之间的相关性
- 非驻点的目标
- Deep Q-learning(DQN)同时通过下列方式解决这两项挑战
- 经验重播(Experience replay)
- 固定Q-targets
DQNs: 经验重播
- 为了有助于移除相关性,从先前的经验中存储数据集(称作重播缓存)
D
\mathcal{D}
D
- 为进行经验重播,循环以下步骤:
- ( s , a , r , s ′ ) ∼ D (s,a,r,s')\sim\mathcal{D} (s,a,r,s′)∼D:从数据集中采样一个tuple
- 计算采样s的目标价值: r + γ m a x a ′ Q ^ ( s ′ , a ′ ; w ) r+\gamma max_{a'}\hat{Q}(s',a';\textbf{w}) r+γmaxa′Q^(s′,a′;w)
- 使用随机梯度下降来更新网络权重
∇ w = α ( r + γ m a x a ′ Q ^ ( s ′ , a ′ ; w ) − Q ^ ( s , a ; w ) ) Δ w Q ^ ( s , a ; w ) \nabla_\textbf{w} = \alpha(r+\gamma max_a' \hat{Q}(s',a';\textbf{w})-\hat{Q}(s,a;\textbf{w}))\Delta_{\textbf{w}}\hat{Q}(s,a;\textbf{w}) ∇w=α(r+γmaxa′Q^(s′,a′;w)−Q^(s,a;w))ΔwQ^(s,a;w)
不重用数据能降低内存消耗,但对弱化模型表现。经验重播相当于重用数据,而这是有帮助的。
- 可以把目标视作一个标量,但是权重将会在下一次更新,这改变了目标价值。
DQNs: fixed Q-Targets
- 为了提升稳定性,使用在多次更新中的目标计算固定目标权重
- 使用一个不同的权重来计算目标更不是更新目标
- 记参数集 w − \text{w}^{-} w−为在目标中使用的权重, w \textbf{w} w是被更新的权重
- 计算目标值时有细微的改变:
- ( s , a , r , s ′ ) ∼ D (s,a,r,s')\sim\mathcal{D} (s,a,r,s′)∼D:从数据集中采样
- 从采样s中计算目标值 r + γ m a x a ′ Q ^ ( s ′ , a ′ ; w − ) r+\gamma max_{a'}\hat{Q}(s',a';\textbf{w}^-) r+γmaxa′Q^(s′,a′;w−)
- 使用随机梯度下降来更新网络权重
Δ w = α ( r + γ m a x a ′ Q ^ ( s ′ , a ′ ; w − ) − Q ^ ( s , a ; w ) ) ∇ w Q ^ ( s , a ; w ) \Delta_{\textbf{w}} = \alpha(r+\gamma max_{a'}\hat{Q}(s',a';\textbf{w}^-)-\hat{Q}(s,a;\textbf{w}))\nabla_{\textbf{w}}\hat{Q}(s,a;\textbf{w}) Δw=α(r+γmaxa′Q^(s′,a′;w−)−Q^(s,a;w))∇wQ^(s,a;w)
这种Q-learing不是真正的梯度下降方法。GTD(gradient temporal difference) learning 是"更加"真实的梯度下降算法。这样做非常有帮助,但仍然不能保证收敛。
DQNs Summary
- DQN 使用经验重播或固定Q-targets
- 在重播缓存 D \mathcal{D} D中存储变迁 s t , a t , r t + 1 , s t + 1 s_t,a_t,r_{t+1},s_{t+1} st,at,rt+1,st+1
- 从 D \mathcal{D} D中采样随机的小批量变迁 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)
- 计算相对于旧的,固定的参数集 w − \textbf{w}^- w−的Q-learnning目标
- 优化Q-network和Q-learning 目标之间的均方误差
- 使用随机梯度下降
基本上都是用 ϵ \epsilon ϵ-greedy exploration
DQN Result in Atari
这张图来自Deep Mind团队2015年的一篇论文,他们在50中游戏上实验了DQN算法,使用了CNN处理每一帧游戏画面。在超过半数的游戏里,都能实现接近人类甚至大幅领先人类的水平,但是需要大量的数据和时间来训练。
Which Aspects of DQN were Import for Success?
哪一部分对成功贡献最大?
Deep RL
- 在Atari游戏上的成功引起了使用深度神经网络来做价值函数近似的浓厚兴趣
- 这里列举了一些在之后马上的改进(还有很多其他的)
- Double DQN (Deep Reinforcement Learning with Double Q-Learning, Van Hasselt et al, AAAI 2016)
- Prioritized Replay (Prioritized Experience Replay, Schaul et al, ICLR 2016)
- Dueling DQN (best paper ICML 2016) (Dueling Network Architectures for Deep Reinforcement Learning, Wang et al, ICML 2016)
人工智能的学术会议,大多可以免费下载论文(非IEEE),不需要权限,所以上面的链接你可以直接点)
补充一点:
2018年Deep Mind在AAAI发表了组合6中DQN改进方法(包括上述)的Rainbow,Rainbow: Combining Improvements
in Deep Reinforcement Learning
Recall: Double Q-Learning
1
:
I
n
t
i
a
l
i
z
e
Q
1
(
s
,
a
)
1:\ Intialize \ Q_1(s,a)
1: Intialize Q1(s,a) and
Q
2
(
s
,
a
)
,
∀
s
∈
S
,
a
∈
A
t
=
0
,
Q_2(s,a), \forall s \in S, a \in A \ t=0,
Q2(s,a),∀s∈S,a∈A t=0, initial state
s
t
=
s
0
s_t=s_0
st=s0
2
:
l
o
o
p
2:\ loop
2: loop
3
:
S
e
l
e
c
t
3:\ \quad Select
3: Select
a
t
a_t
at using
ϵ
\epsilon
ϵ-greedy
π
(
s
)
=
a
r
g
m
a
x
a
Q
1
(
s
t
,
a
)
+
Q
2
(
s
t
,
a
)
\pi(s)=argmax_a Q_1(s_t,a)+Q_2(s_t,a)
π(s)=argmaxaQ1(st,a)+Q2(st,a)
4
:
O
b
s
e
r
v
e
(
r
t
,
s
t
+
1
)
4:\ \quad Observe \ (r_t,s_{t+1})
4: Observe (rt,st+1)
5
:
i
f
5:\ \quad if
5: if(with 0.5 probability) then
6
:
Q
1
(
s
a
,
a
t
)
←
Q
1
(
s
t
,
a
t
)
+
α
6:\ \quad \quad Q_1(s_a,a_t) \leftarrow Q_1(s_t,a_t)+\alpha
6: Q1(sa,at)←Q1(st,at)+α
7
:
e
l
s
e
7:\ \quad else
7: else
8
:
Q
2
(
s
t
,
a
t
)
←
Q
2
(
s
t
,
a
t
)
+
α
8:\ \quad \quad Q_2(s_t,a_t) \leftarrow Q_2(s_t,a_t)+\alpha
8: Q2(st,at)←Q2(st,at)+α
9
:
e
n
d
i
f
9:\ \quad end if
9: endif
10
:
t
=
t
+
1
10:\ \quad t= t+1
10: t=t+1
11
:
e
n
d
l
o
o
p
11: end \ loop
11:end loop
这是在将我们如何选择action与评估那个action的价值分离开,以解决过估计的问题。
Double DQN
- 扩展Double Q-Learning的思想到DQN
- 当前Q-network的 w \textbf{w} w用于选择动作
- 旧的Q-network的
w
−
\textbf{w}^-
w−用于评估动作
Δ w = α ( r + γ Q ^ ( a r g m a x a ′ Q ^ ( s ′ , a ′ ; w ) ; w − ) − Q ^ ( s , a ; w ) ) \Delta_\textbf{w}=\alpha(r+\gamma \hat{Q}(argmax_{a'}\hat{Q}(s',a';\textbf{w});\textbf{w}^-)-\hat{Q}(s,a;\textbf{w})) Δw=α(r+γQ^(argmaxa′Q^(s′,a′;w);w−)−Q^(s,a;w))
Double DQN
在Atari游戏中,Double DQN通常会有很大帮助。
Refresher: Mars Rover Model-Free Policy Evaluation
先选择 ( s 2 , a 1 , 0 , s 1 ) (s_2,a_1,0,s_1) (s2,a1,0,s1),0+ γ V ( s 1 ) \gamma V(s_1) γV(s1),再选择 ( s 3 , a 1 , 0 , s 2 ) (s_3,a_1,0,s_2) (s3,a1,0,s2),这跟蒙特·卡罗尔方法一样,意味着没有误差。所以重播时选择元组的顺序是有影响的。
Impact of Replay
- 在表格法TD-learning中,重播更新的顺序能加速学习
- 重复某些更新能比其他更新看起来能够更好地反向传播信息
- 如何系统化的做prioritize updates?
Potential Impact of Ordering Episodic Replay Updates
- Schaul, Quan, Antonoglou, Silver ICLR 2016
- 黑盒(Oracle): 选择 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)元组来重播将会降低全局loss
- 在收敛方面能有指数级别的提升
- 收敛需要的更新数量
- 黑盒不是一个实际的方法但是描述了顺序的影响
Prioritized Experiemce Replay
让我们来根据TD error赋予一些元组优先级
- 记 i i i是第 i i i个经验元组 ( s i , a i , r i , s i + 1 ) (s_i,a_i,r_i,s_{i+1}) (si,ai,ri,si+1)
- 采样元组以使用优先级函数来更新
- 一个元组的优先级和DQN error成比例
p i = ∣ r + γ m a x a ′ Q ( s i + 1 , a ′ ; w − ) − Q ( s i , a i ; w ) ∣ p_{i} = | r+\gamma max_{a'} Q(s_{i+1},a';\textbf{w}^-) - Q(s_i,a_i;\textbf{w}) | pi=∣r+γmaxa′Q(si+1,a′;w−)−Q(si,ai;w)∣
(两边竖线绝对值的意思) - 每一个元组都更新 p i p_i pi
- 其中一个方法
1
^1
1: 成比例(随机优先化)
P ( i ) = p i α ∑ k p i α P(i)=\frac{p_i^\alpha}{\sum_k p_i^\alpha} P(i)=∑kpiαpiα - α = 0 \alpha=0 α=0的话会产生了什么样的规则在现有的元组中做选择?
均匀采样
α 的 选 取 是 一 个 平 衡 点 \alpha的选取是一个平衡点 α的选取是一个平衡点
1 ^1 1请从上面的论文链接里查阅原论文以获得更详细的信息。
Performance of Prioritized Replay vs Double DQN
Value & Advantage Function
Advantage Fuction在采取一个动作和另一个动作的差别之间做度量。希望能理解哪一些动作会有更好的价值。
- 直观理解:用来确定价值的需要特比注意的特征,可能会和那些决定动作收益特征的不同
- E.g.
- 游戏得分和预测 V ( s ) V(s) V(s)是相关的
- 但是在揭示相关动作价值时不是必须的
- 所以提出了优势函数(Advantage function, Baird 1993)
A π ( s , a ) = Q π ( s , a ) − V π ( s ) A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s) Aπ(s,a)=Qπ(s,a)−Vπ(s)
Dueling DQN
Identifiability
- 优势函数(Advantage function)
A π ( s , a ) = Q π ( s , a ) − V π ( s ) A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s) Aπ(s,a)=Qπ(s,a)−Vπ(s) - (优势是)可辨识的吗?
- 不可辨别
指定优势函数,做了一些预先设定的假设
- Unidentifiable
- 观点1:如果a是选择的动作,强迫
A
(
s
,
a
)
=
0
A(s,a)=0
A(s,a)=0
Q ^ ( s , a ; w ) = V ^ ( s ; w ) + ( A ^ ( s , a ; w ) − m a x a ′ ∈ A A ^ ( s , a ′ ; w ) ) \hat{Q}(s,a;\textbf{w})=\hat{V}(s;\textbf{w})+(\hat{A}(s,a;\textbf{w})-max_{a' \in \mathcal{A}}\hat{A}(s,a';\textbf{w})) Q^(s,a;w)=V^(s;w)+(A^(s,a;w)−maxa′∈AA^(s,a′;w)) - 观点2:使用平均值作为baseline(更稳定)
Q ^ ( s , a ; w ) = V ^ ( s ; w ) + ( A ^ ( s , a ; w ) − 1 ∣ A ∣ ∑ a ′ A ^ ( s , a ′ ; w ) \hat{Q}(s,a;\textbf{w})=\hat{V}(s;\textbf{w})+(\hat{A}(s,a;\textbf{w})-\frac{1}{|\mathcal{A}|}\sum_{a'}\hat{A}(s,a';\textbf{w}) Q^(s,a;w)=V^(s;w)+(A^(s,a;w)−∣A∣1∑a′A^(s,a′;w)
Dueling DQN V.S. Double DQN with Prioritized Replay
Practical Tips for DQN on Atati (From J. Schulman)
以下是来自伯克利博士John Schulman,OpanAI老大的在Atari上使用DQN的建议: