价值学习
DQN 与 Q 学习
最优动作价值函数可以用来做控制,一旦知道状态 st,可以根据对动作的打分进行选择。
近似学习 Q∗ 最有效的方法是深度 Q 网络(deep Q network,DQN),记作 Q(s,a;ω)。训练 DQN 最常用的算法是时间差分(temporal difference,TD)。
时间差分 (TD) 算法示例
假如在出发前,模型预估北京到上海需要 q^=14 小时,经过 r=4.5 小时从北京到达济南后,再让模型预测从济南到上海需要 q^′=11 个小时,则整个旅程的最新估计时间为:
y^≜r+q^′=4.5+11=15.5
TD 算法将 y^=15.5 称为 TD 目标(TD target),它比最初的预测 q^=14 更可靠,因为它是纯粹估计的,而 TD 目标中含有事实的成分。我们希望估计值 q^ 尽量接近 TD 目标 y^,所以用两者差的平方作为损失函数:
L(ω)=21[Q("北京","上海";ω)−y^]2
此处把 y^ 看做常数,尽管它依赖于 ω。计算损失函数的梯度:
∇ωL(ω)=δ(q^−y^)⋅∇ωQ("北京","上海";ω)
此处的 δ=q^−y^=14−15.5=−1.5 称作 TD 误差(TD error)。
DQN 的贝尔曼推导与损失函数
由下列两式推导:
Ut=Rt+γ⋅=Ut+1k=t+1∑nγk−t−1⋅Rk,Q∗(st,at)=maxπE[Ut∣St=st,At=at]
可得下列定理,该定理是最优贝尔曼方程(optimal Bellman equations)的一种形式:
Ut的期望Q∗(st,at)=ESt+1∼p(⋅∣st,at)[Rt+γ⋅Ut+1的期望A∈AmaxQ∗(St+1,A)∣St=st,At=at]
贝尔曼方程的右边是个期望,我们可以对期望做蒙特卡洛近似,当智能体执行动作 at 后,环境通过状态转移函数 p(st+1∣st,at) 计算出新状态 st+1,那么当我们观测到 st, at, st+1 后则奖励 rt 也被观测到,因此可以计算:
rt+γ⋅maxa∈AQ∗(st+1,a)
它可以看做是右式期望的近似。因此,如果用神经网络 Q(s,a;ω) 替换最优动作价值函数 Q∗(s,a) 可以得到:
预测 qt^Q(st,at;ω)≈TD 目标 yt^rt+γ⋅a∈AmaxQ(st+1,a;ω)
应当鼓励 qt^≜Q(st,at;ω) 接近 yt^,定义损失函数:
L(ω)=21[Q(st,at;ω)−yt^]2
假设 y^ 是常数,计算 L 关于 ω 的梯度:
∇ωL(ω)=TD 误差 δt(qt^−yt^)⋅∇ωQ(st,at;ω)
做一步梯度下降,可以让 qt^ 更接近 yt^:
ω←ω−α⋅δt⋅∇ωQ(st,at;ω)
DQN 训练算法流程
-
收集训练数据:
我们可以用任何策略函数 π 去控制智能体与环境交互,这个 π 就叫做行为策略(behavior policy)。比较常用的是 ϵ-greedy 策略(初始时将 ϵ 设置得比较大,然后逐渐衰减):
at={argmaxaQ(st,a;ω),均匀抽取 A 中的一个动作,以概率 (1−ϵ);以概率 ϵ.
把智能体在一局游戏中的轨迹记作 s1,a1,r1,s2,a2,r2,⋯,sn,an,rn。把一条轨迹划分成 n 个 (st,at,rt,st+1) 这种四元组,存入数组,这个数组叫做经验回放数组(replay buffer)。
-
更新 DQN 参数 ω:
随机从经验回放数组中取出一个四元组,记作 (sj,aj,rj,sj+1),执行下列步骤进行参数更新:
-
对 DQN 做正向传播,得到 Q 值:
q^j=Q(sj,aj;ωnow)和q^j+1=maxa∈AQ(sj+1,a;ωnow)
-
计算 TD 目标和 TD 误差:
y^j=rj+γ⋅q^j+1和δj=q^j−y^j
-
对 DQN 作反向传播,得到梯度:
gj=∇ωQ(sj,aj;ωnow)
-
做梯度下降更新 DQN 的参数:
ωnow←ωnow−α⋅δj⋅gj
可以在智能体每执行一个动作之后,对 ω 做几次更新,也可以在每完成一局游戏后,对 ω 做几次更新。
利用表格法实现 Q 学习,首先用表格表示 Q∗,即各状态下各动作的最优动作价值函数,用下列公式更新表格中元素:
y^t≜rt+γ⋅maxa∈AQ~(st+1,a);Q~(st,at)←(1−α)⋅Q~(st,at)+α⋅y^t
- 行为策略(behavior policy):作用是收集经验(experience),即观测的状态、动作、奖励。
- 目标策略:用来控制智能体的策略函数。
- 同策略(on-policy):利用相同的行为策略和目标策略。
- 异策略(off-policy):用不同的行为策略和目标策略。
异策略的好处是可以用行为策略收集经验,将 (st,at,rt,st+1) 存储作为经验回放数组,利用这些数据训练目标策略被称作经验回放(experience replay)。
SARSA 算法
传统的强化学习用 Qπ 作为确定性的策略控制智能体,但是现在 Qπ 通常被用于评价策略的好坏,而非用于控制智能体。Qπ 常与策略函数 π 结合使用,被称作 actor-critic(演员-评委)方法。
SARSA 算法的表格法与 Q 学习类似,利用下列贝尔曼方程:
Qπ(st,at)=ESt+1,At+1[Rt+γ⋅Qπ(St+1,At+1)∣St=st,At=at]
其中左式可近似为表格中的 q(st,at),右式可根据 st+1 和策略 π 做随机抽样,得到新的动作 a~t+1∼π(⋅∣st+1)。
并用观测到的 rt、st+1 和计算出的 a~t+1 对期望做蒙特卡洛近似,然后用表格 q 近似 Qπ 得到:
y^t≜rt+γ⋅q(st+1,a~t+1)
并用下式更新表格中 (st,at) 位置上的元素:
q(st,at)←(1−α)⋅q(st,at)+α⋅y^t
然后用某种算法更新策略函数,注意这是隐性的更新,通过更新 Q 函数来间接改进策略。
SARSA 算法的目标是学到表格 q 作为动作价值函数 Qπ 的近似,经验回放数组里的经验 (sj,aj,rj,sj+1) 是过时的行为策略 πold 收集到的,与当前策略 πnow 及其对应的价值 Qπnow 对应不上,因此不能使用经验回放,只能使用同策略。
可以用神经网络 q(s,a;ω) 来近似 Qπ(s,a),称其为价值网络(value network),其训练流程基本与训练 DQN 完全相同,只是需要根据当前策略做抽样 a~t+1∼πnow(⋅∣st+1)。
单步与多步 TD 目标
SARSA 计算 TD 目标只用到一个奖励 rt,这样得到的 y^t 叫做单步 TD 目标,可将其扩展为多步 TD 目标。易知:
Ut=(∑i=0m−1γiRt+i)+γmUt+m
动作价值函数 Qπ(st,at) 是回报 Ut 的期望,而 Qπ(st+m,at+m) 是回报 Ut+m 的期望,则可以得到下列定理:
定理:设 Rk 是 Sk、Ak、Sk+1 的函数,∀k=1,⋯,n,则:
Ut的期望Qπ(st,at)=E(∑i=0m−1γiRt+i)+γm⋅Ut+m的期望Qπ(St+m,At+m)St=st,At=at
所以已知当前状态 st,用策略 π 控制智能体与环境交互 m 次,得到轨迹(不需要 rt+m):
rt,st+1,at+1,rt+1,⋯,st+m−1,at+m−1,rt+m−1,st+m,at+m
后可以计算 m 步 TD 目标用以更新价值网络和策略:
y^t=(∑i=0m−1γirt+i)+γm⋅q(st+m,at+m;ω)
蒙特卡洛与自举 (Bootstrapping) 的比较
训练价值网络 q(s,a;ω) 时,可以将一局游戏进行到底,计算回报 ut=∑i=0n−tγirt+i,使用 ut 作为目标鼓励价值网络接近 ut 不是 TD 方法,而是蒙特卡洛,因为这是用实际观测 ut 去近似期望。
-
蒙特卡洛 (Monte Carlo)
- 好处是无偏性:ut 是 Qπ(st,at) 的无偏估计,由于 ut 的无偏性,拿其作为目标训练价值网络,得到的价值网络也是无偏的。
- 坏处是方差大:随机变量 Ut 依赖于 St+1,At+1,⋯,Sn,An 这些随机变量,其中不确定性很大,可能导致观测值 ut 实际上离 E[Ut] 很远,因此拿 ut 作为目标训练价值网络收敛会很慢。
-
自举 (Bootstrapping / TD)
- 好处是方差小:单步 TD 目标的随机性只来自于 St+1 和 At+1,而回报 Ut 的随机性来自于后续所有的随机变量。很显然单步 TD 目标的随机性较小,因此方差较小,用自举训练价值网络收敛比较快。
- 坏处是有偏差:价值网络 q(s,a;ω) 是对动作价值 Qπ(s,a) 的近似,假如 q(sj+1,aj+1;ω) 低估(或高估)真实价值 Qπ(sj+1,aj+1),则会导致 q(sj,aj;ω) 低估(高估)Qπ(sj,aj)。即自举会让偏差从 (st+1,at+1) 传播到 (st,at)。
价值学习高级技巧
1. 优先经验回放 (Prioritized Experience Replay)
把智能体的轨迹划分成 (st,at,rt,st+1) 这样的四元组,存入经验回放数组。限制超参数数组的大小(记作 b),数组中只保留最近 b 条数据。
经验回放的好处在于打破序列的相关性。优先经验回放给每个四元组一个权重,根据权重做非均匀随机抽样。利用 TD 误差的绝对值 ∣δj∣ 代替无法观测的价值偏差:
pj∝∣δj∣+ϵ或pj∝rank(j)1
为了抵消非均匀抽样造成的偏差,相应调整学习率:
αj=(b⋅pj)βα
其中 b 是样本总数,β∈(0,1) 为可调超参数(论文建议逐渐增长到 1)。
2. 高估问题与目标网络 (Target Network)
用 Q 学习训练出的 DQN 会高估真实的价值,原因有两个:
- 自举导致偏差的传播:前一步的估算误差传递给当前步。
- 最大化操作造成高估:即便 DQN 是真实价值 Q∗ 的无偏估计,只要 DQN 不恒等于 Q∗,因为 E[max(Z1,⋯,Zd)]≥max(x1,⋯,xd),TD 目标也会高估真实价值。
切断自举可以使用目标网络(target network) Q(s,a;ω−),其参数更新步骤如下:
- 对 DQN 做正向传播,得到:q^j=Q(sj,aj;ωnow)
- 对目标网络做正向传播,得到:q^j+1−=Q(sj,aj;ωnow−)
- 计算 TD 目标和 TD 误差:
y^j−=rj+γ⋅q^j+1−,δj=q^j−y^j−
- 对 DQN 做反向传播得到梯度 ∇ωQ(sj,aj;ωnow)
- 做梯度下降更新 DQN 参数:
ωnew←ωnow−α⋅δj∇ωQ(sj,aj;ωnow)
- 对目标网络参数做加权平滑更新(Soft update,τ≈0.001∼0.005):
ωnew−←τ⋅ωnew+(1−τ)⋅ωnow−
3. 双 Q 学习 (Double DQN)
在双 Q 学习中,下一步最佳动作的选择依赖主网络 DQN:
a∗=argmaxa∈AQ(sj+1,a;ω)
其 TD 目标的求值使用目标网络:
y~j=rj+Q(sj+1,a∗;ω−)
因为 双 Q 学习Q(sj+1,a∗;ω−)≤用目标网络的 Q 学习a∈AmaxQ(sj+1,a;ω−),因此双 Q 学习得到的 TD 目标更小,进一步缓解了高估。
4. 对决网络 (Dueling Network)
对决网络将最优动作价值 Q∗ 分解成最优状态价值 V∗ 加最优优势 D∗:
Q∗(s,a)=V∗(s)+D∗(s,a)−恒等于零a∈AmaxD∗(s,a),∀s∈S,∀a∈A
实际实现时用近似输出:
Q(s,a;ω)≜V(s;ωV)+D(s,a;ωD)−maxa∈AD(s,a;ωD)
在实际工程中,通常用 mean 代替 max 会得到更好的效果。
5. 噪声网络 (Noisy Net)
噪声网络将全连接层的参数 ω 替换为 μ+σ∘ξ,其中 ξ 是随机噪声,每个元素独立从标准正态分布 N(0,1) 中随机抽取:
z=ReLU((Wμ+Wσ∘Wξ)x+(bμ+bσ∘bξ))
噪声 DQN 不需要使用 ϵ-greedy 策略,因为参数中的随机噪声本身就能带来足够的探索。
四合一 Rainbow DQN 参数更新流程
在实际实现 DQN 时,将优先经验回放、双 Q 学习、对决网络、噪声网络全部结合:
- 抽样:用优先经验回放,从数组中抽取一个四元组 (sj,aj,rj,sj+1)。
- 正向传播:用标准正态分布生成 ξ,对噪声 DQN 做正向传播:
q^j=Q~(sj,aj,ξ;μnow,σnow)
- 动作选择:用噪声 DQN 选出最优动作:
a~j+1=argmaxa∈AQ~(sj+1,a,ξ;μnow,σnow)
- 目标求值:生成新噪声 ξ′,用目标网络计算价值:
q~j+1−=Q~(sj+1,a~j+1,ξ′;μnow−,σnow−)
- 计算 TD 目标与误差:
y^j−=rj+γ⋅q^j+1−,δj=q^j−y^j−
- 参数更新:梯度下降更新噪声 DQN 的 μ,σ:
μnew←μnow−αμ⋅δj⋅∇μQ~,σnew←σnow−ασ⋅δj⋅∇σQ~
- 平滑追踪:更新目标网络参数:
μnew−←τ⋅μnew+(1−τ)⋅μnow−,σnew−←τ⋅σnew+(1−τ)⋅σnow−