仔细的介绍我所认识的强化学习算法的步骤
首先我们把他们按照时间顺序介绍一下
1. Q-learning
由 Watkins 在 1989 年提出,是早期经典的强化学习算法。基于表格形式学习动作价值函数 ,适用于离散状态与动作空间,为后续众多算法奠定了基础。2. PG (Policy Gradient)
20 世纪 90 年代末开始发展,摆脱对价值函数的单纯依赖,直接对策略进行参数化,将策略表示为 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(a∣s) ,再通过梯度上升优化策略,目标是最大化累计奖励期望。
3. REINFORCE
诞生于 20 世纪 90 年代末,作为 PG 算法的一种典型实现,采用蒙特卡洛方法来估计策略梯度。依靠完整的采样轨迹计算累计回报,进而依据这些回报信息更新策略参数。4. AC (Actor-Critic)
于 21 世纪初出现,创新性地融合 “Actor”(策略网络)与 “Critic”(价值评估网络)。让策略更新借助价值评估的反馈,以此减少策略梯度估计的方差,提升学习过程的稳定性。5. DQN (Deep Q-Network)
2013 年被提出,是 Q-learning 与深度神经网络的结合体。用神经网络拟合 值函数,搭配经验回放、固定目标网络等技术,使强化学习有能力处理高维复杂的视觉类游戏场景。6. A2C (Advantage Actor-Critic)
在 AC 基础上演进而来,于 2010 年代中期逐渐受到关注。引入优势函数,借助多步 TD 误差来估计优势,达成更高效的异步并行训练效果。7. DPG (Deterministic Policy Gradient)
2014 年前后提出,专注于确定性策略,策略网络直接输出动作,这一方式简化了连续动作空间场景下的计算,不过初期算法稳定性存在不足。8. DDPG (Deep Deterministic Policy Gradient)
2014 年提出,以 DPG 为基础拓展而来。借助深度神经网络、经验回放与软更新机制,极大增强了算法稳定性,能够应用于复杂连续控制任务。9. TD3 (Twin Delayed DDPG)
2018 年发表,针对 DDPG 加以优化。采用双 Critic 网络、延迟策略更新与目标策略平滑等改进手段,减少价值估计偏差,提升算法的鲁棒性。10. SAC (Soft Actor-Critic)
2018 年前后出现,通过把熵最大化引入目标函数,达成更好的探索与利用平衡。采用软 Q 函数及自适应温度参数调节,对策略和价值函数进行优化。11. PPO (Proximal Policy Optimization)
2017 年提出,着重强调利用已有样本高效更新策略,通过限制新旧策略间的差异,实现快速且稳定的收敛,同时降低超参数调整的难度。接下来我们介绍这些算法的简要步骤
PPO
1.PPO (Proximal Policy Optimization)
1.初始化与超参数 初始化策略网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 和价值函数网络
V
ϕ
V_{\phi}
Vϕ 的参数
θ
\theta
θ 和
ϕ
\phi
ϕ。
设定超参数:剪切比例
ε
\varepsilon
ε,策略熵系数
c
2
c_2
c2,值函数损失系数
c
1
c_1
c1,学习率
α
\alpha
α,批次大小
N
N
N,更新次数
K
K
K,折扣因子
γ
\gamma
γ,GAE平滑因子
λ
\lambda
λ。
2.经验收集
使用当前策略 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(a∣s) 在环境中执行动作并收集轨迹数据 τ = { s t , a t , r t } t = 0 T \tau=\{s_t,a_t,r_t\}_{t=0}^T τ={st,at,rt}t=0T,直到收集到足够的样本数 N N N。每个时间步 t t t,根据当前状态选择动作 a t ∼ π θ ( ⋅ ∣ s t ) a_t \sim \pi_{\theta}(\cdot|s_t) at∼πθ(⋅∣st),然后观察奖励 r t r_t rt 和下一个状态 s t + 1 s_{t+1} st+1。
3.优势估计
对于每个时间步 t t t,使用蒙特卡洛方法或TD( λ \lambda λ)方法计算返回值 G t = ∑ l = 0 T − t − 1 γ l r t + l G_t = \sum_{l=0}^{T-t-1}{\gamma^lr_{t+l}} Gt=l=0∑T−t−1γlrt+l 计算优势函数 A t ^ = ∑ l = 0 T − t − 1 ( γ λ ) l δ t + l \widehat{A_t} = \sum_{l=0}^{T-t-1}{(\gamma\lambda)^l\delta_{t+l}} At =l=0∑T−t−1(γλ)lδt+l 其中TD误差定义为 δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) \delta_t = r_t + \gamma V_{\phi}(s_{t+1}) - V_{\phi}(s_t) δt=rt+γVϕ(st+1)−Vϕ(st)
4.策略更新
对于每一个时间步 t t t,计算新旧策略的概率比: r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(at∣st)πθ(at∣st) 定义剪切损失比例为: L C L I P ( θ ) = E t [ min ( r t ( θ ) A t ^ , c l i p ( r t ( θ ) , 1 − ε , 1 + ε ) A t ^ ) ) ] L^{\mathrm{CLIP}}(\theta) = E_t[\min{(r_t(\theta)\widehat{A_t},\mathrm{clip}(r_t(\theta),1-\varepsilon,1+\varepsilon)\widehat{A_t}))}] LCLIP(θ)=Et[min(rt(θ)At ,clip(rt(θ),1−ε,1+ε)At ))] 定义策略熵: H [ π θ ] = − E t [ ∑ a π θ ( a ∣ s t ) log π θ ( a ∣ s t ) ] H[\pi_{\theta}] = -E_t[\sum_{a}{\pi_{\theta}(a|s_t)}\log{\pi_{\theta}(a|s_t)}] H[πθ]=−Et[a∑πθ(a∣st)logπθ(a∣st)] 最终的策略损失函数 L π ( θ ) = − L C L I P ( θ ) − c 2 H [ π θ ] L^\pi(\theta) = -L^{\mathrm{CLIP}}(\theta) - c_2H[\pi_{\theta}] Lπ(θ)=−LCLIP(θ)−c2H[πθ] 然后通过梯度下降更新策略参数,如Adam优化器,通过反向传播最小化 L π ( θ ) L^\pi(\theta) Lπ(θ) 来更新策略参数: θ ← θ − α ∇ θ L π ( θ ) \theta \gets \theta - \alpha\nabla_\theta L^\pi(\theta) θ←θ−α∇θLπ(θ)
5.价值函数更新
定义值函数损失:
L
V
F
(
ϕ
)
=
E
t
[
(
V
ϕ
(
s
t
)
−
G
t
)
2
]
L^{\mathrm{VF}}(\phi) = E_t[(V_{\phi}(s_t) - G_t)^2]
LVF(ϕ)=Et[(Vϕ(st)−Gt)2]
通过梯度下降更新价值网络参数,如Adam优化器,通过反向传播最小化
L
V
F
(
ϕ
)
L^{\mathrm{VF}}(\phi)
LVF(ϕ) 来更新价值函数参数
ϕ
\phi
ϕ。
6.循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,计算优势函数,并再次进行策略和价值网络更新,直到满足停止条件。
SAC
2.SAC (Soft Actor-Critic)
1. 初始化与超参数 初始化演员网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 和两个评论家网络
Q
ϕ
1
(
s
,
a
)
Q_{\phi_1}(s,a)
Qϕ1(s,a) 和
Q
ϕ
2
(
s
,
a
)
Q_{\phi_2}(s,a)
Qϕ2(s,a) 的参数
θ
\theta
θ、
ϕ
1
\phi_1
ϕ1 和
ϕ
2
\phi_2
ϕ2。同时初始化目标评论家网络
Q
ϕ
1
′
(
s
,
a
)
Q'_{\phi_1}(s,a)
Qϕ1′(s,a) 和
Q
ϕ
2
′
(
s
,
a
)
Q'_{\phi_2}(s,a)
Qϕ2′(s,a),并让它们的权重与对应的评论家网络相同。
设定超参数:温度系数
α
\alpha
α(可自适应调整),策略熵系数
c
2
c_2
c2,值函数损失系数
c
1
c_1
c1,学习率
α
θ
\alpha_\theta
αθ,
α
ϕ
\alpha_\phi
αϕ,折扣因子
γ
\gamma
γ,以及软更新比例
τ
\tau
τ。
2. 经验收集
使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在环境中执行动作,并收集轨迹数据
τ
=
{
s
t
,
a
t
,
r
t
,
s
t
+
1
}
t
=
0
T
\tau=\{s_t,a_t,r_t,s_{t+1}\}_{t=0}^T
τ={st,at,rt,st+1}t=0T,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
a_t \sim \pi_{\theta}(\cdot|s_t)
at∼πθ(⋅∣st),然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。
3. 优势估计
对于每个时间步
t
t
t,计算最小的两个Q值作为返回值
G
t
=
min
(
Q
ϕ
1
(
s
t
,
a
t
)
,
Q
ϕ
2
(
s
t
,
a
t
)
)
G_t = \min(Q_{\phi_1}(s_t,a_t), Q_{\phi_2}(s_t,a_t))
Gt=min(Qϕ1(st,at),Qϕ2(st,at))
4. 演员更新
定义演员损失函数为:
L
π
(
θ
)
=
E
t
[
α
log
π
θ
(
a
t
∣
s
t
)
−
min
(
Q
ϕ
1
(
s
t
,
a
t
)
,
Q
ϕ
2
(
s
t
,
a
t
)
)
]
L^\pi(\theta) = E_t[\alpha \log{\pi_\theta(a_t|s_t)} - \min(Q_{\phi_1}(s_t,a_t), Q_{\phi_2}(s_t,a_t))]
Lπ(θ)=Et[αlogπθ(at∣st)−min(Qϕ1(st,at),Qϕ2(st,at))] 使用梯度上升更新演员网络参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
L
π
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta L^\pi(\theta)
θ←θ+αθ∇θLπ(θ)
5. 评论家更新
定义评论家损失函数为:
L
Q
i
(
ϕ
i
)
=
E
t
[
(
Q
ϕ
i
(
s
t
,
a
t
)
−
[
r
t
+
γ
E
a
t
+
1
∼
π
[
min
(
Q
ϕ
1
′
(
s
t
+
1
,
a
t
+
1
)
,
Q
ϕ
2
′
(
s
t
+
1
,
a
t
+
1
)
)
−
α
log
π
θ
(
a
t
+
1
∣
s
t
+
1
)
]
)
2
]
L^{Q_i}(\phi_i) = E_t[(Q_{\phi_i}(s_t,a_t) - [r_t + \gamma E_{a_{t+1}\sim \pi}[ \min(Q'_{\phi_1}(s_{t+1},a_{t+1}), Q'_{\phi_2}(s_{t+1},a_{t+1})) - \alpha \log{\pi_\theta(a_{t+1}|s_{t+1})} ])^2]
LQi(ϕi)=Et[(Qϕi(st,at)−[rt+γEat+1∼π[min(Qϕ1′(st+1,at+1),Qϕ2′(st+1,at+1))−αlogπθ(at+1∣st+1)])2] 其中
i
=
1
,
2
i=1,2
i=1,2 表示两个不同的评论家网络。使用梯度下降更新评论家网络参数
ϕ
i
←
ϕ
i
−
α
ϕ
∇
ϕ
i
L
Q
i
(
ϕ
i
)
\phi_i \gets \phi_i - \alpha_\phi \nabla_{\phi_i} L^{Q_i}(\phi_i)
ϕi←ϕi−αϕ∇ϕiLQi(ϕi) 随后软更新目标评论家网络的参数
ϕ
i
′
←
τ
ϕ
i
+
(
1
−
τ
)
ϕ
i
′
\phi'_i \gets \tau \phi_i + (1-\tau) \phi'_i
ϕi′←τϕi+(1−τ)ϕi′
6. 温度调节(可选)
为了确保策略具有足够的熵,可以动态调整温度系数
α
\alpha
α。定义温度损失函数为:
L
α
=
E
t
[
−
α
(
log
π
θ
(
a
t
∣
s
t
)
+
H
)
]
L^\alpha = E_t[-\alpha (\log{\pi_\theta(a_t|s_t)} + H)]
Lα=Et[−α(logπθ(at∣st)+H)] 其中
H
H
H 是期望的熵值。通过梯度上升更新
α
\alpha
α
α
←
α
+
α
α
∇
α
L
α
\alpha \gets \alpha + \alpha_\alpha \nabla_\alpha L^\alpha
α←α+αα∇αLα
7. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算Q值,并再次进行演员和评论家网络更新,直到满足停止条件。
DDPG
3. DDPG (Deep Deterministic Policy Gradient)
1. 初始化与超参数 初始化演员网络
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 和评论家网络
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a) 的参数
θ
\theta
θ 和
w
w
w。同时初始化目标网络
μ
θ
−
−
(
s
)
\mu^-_{\theta^-}(s)
μθ−−(s) 和
Q
w
−
(
s
,
a
)
Q^-_w(s,a)
Qw−(s,a) 的参数
θ
−
\theta^-
θ− 和
w
−
w^-
w−,并让它们的权重与对应的主网络相同。
设定超参数:目标网络平滑系数
τ
\tau
τ,学习率
α
θ
\alpha_\theta
αθ 和
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,噪声生成器参数(例如,Ornstein-Uhlenbeck过程的参数),以及批次大小
N
N
N。
2. 经验收集
使用当前策略
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 在环境中执行动作,并收集轨迹数据,直到收集到足够的样本数
N
N
N。每个时间步
t
t
t,根据当前状态加上噪声选择动作
a
t
=
μ
θ
(
s
t
)
+
N
t
a_t = \mu_{\theta}(s_t) + \mathcal{N}_t
at=μθ(st)+Nt,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
3. 价值网络更新
对于每个样本
(
s
i
,
a
i
,
r
i
,
s
i
′
)
(s_i, a_i, r_i, s'_i)
(si,ai,ri,si′),计算TD目标:
y
i
=
r
i
+
γ
Q
w
−
(
s
i
′
,
μ
θ
−
−
(
s
i
′
)
)
y_i = r_i + \gamma Q^-_w(s'_i, \mu^-_{\theta^-}(s'_i))
yi=ri+γQw−(si′,μθ−−(si′)) 定义评论家损失函数为:
L
Q
(
w
)
=
E
i
[
(
Q
w
(
s
i
,
a
i
)
−
y
i
)
2
]
L^{Q}(w) = E_i[(Q_w(s_i, a_i) - y_i)^2]
LQ(w)=Ei[(Qw(si,ai)−yi)2] 使用梯度下降更新评论家网络参数以最小化上述损失函数
w
←
w
−
α
w
∇
w
L
Q
(
w
)
w \gets w - \alpha_w \nabla_w L^{Q}(w)
w←w−αw∇wLQ(w)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
∼
ρ
β
[
∇
a
Q
w
(
s
,
a
)
∣
a
=
μ
θ
(
s
)
∇
θ
μ
θ
(
s
)
]
\nabla_\theta J(\theta) = E_{s\sim\rho^\beta}\left[\nabla_aQ_w(s,a)|_{a=\mu_\theta(s)}\nabla_\theta\mu_\theta(s)\right]
∇θJ(θ)=Es∼ρβ[∇aQw(s,a)∣a=μθ(s)∇θμθ(s)] 梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 目标网络软更新
为了稳定训练,使用软更新方式逐步更新目标网络参数
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w−
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算批评家和策略梯度,并再次进行更新,直到满足停止条件。
AC
AC (Actor-Critic) 方法
1. 初始化与超参数 初始化演员网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 和评论家网络
V
w
(
s
)
V_w(s)
Vw(s) 的参数
θ
\theta
θ 和
w
w
w。
设定超参数:目标网络平滑系数
τ
\tau
τ(如果使用目标网络),学习率
α
θ
\alpha_\theta
αθ 和
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,噪声生成器参数(用于探索),以及批次大小
N
N
N。
2. 经验收集
使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在环境中执行动作,并收集轨迹数据,直到收集到足够的样本数
N
N
N。每个时间步
t
t
t,根据当前状态加上噪声选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
+
N
t
a_t \sim \pi_{\theta}(\cdot|s_t) + \mathcal{N}_t
at∼πθ(⋅∣st)+Nt,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
3. 价值网络更新
对于每个样本
(
s
i
,
a
i
,
r
i
,
s
i
′
)
(s_i, a_i, r_i, s'_i)
(si,ai,ri,si′),计算TD目标:
y
i
=
r
i
+
γ
V
w
(
s
i
′
)
y_i = r_i + \gamma V_w(s'_i)
yi=ri+γVw(si′) 定义评论家损失函数为:
L
V
(
w
)
=
E
i
[
(
V
w
(
s
i
)
−
y
i
)
2
]
L^{V}(w) = E_i[(V_w(s_i) - y_i)^2]
LV(w)=Ei[(Vw(si)−yi)2] 使用梯度下降更新评论家网络参数以最小化上述损失函数
w
←
w
−
α
w
∇
w
L
V
(
w
)
w \gets w - \alpha_w \nabla_w L^{V}(w)
w←w−αw∇wLV(w)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
∼
ρ
β
[
∇
θ
log
π
θ
(
a
∣
s
)
A
w
(
s
,
a
)
]
\nabla_\theta J(\theta) = E_{s\sim\rho^\beta}\left[\nabla_\theta \log{\pi_\theta(a|s)} A_w(s,a)\right]
∇θJ(θ)=Es∼ρβ[∇θlogπθ(a∣s)Aw(s,a)] 其中优势函数
A
w
(
s
,
a
)
=
Q
w
(
s
,
a
)
−
V
w
(
s
)
A_w(s,a) = Q_w(s,a) - V_w(s)
Aw(s,a)=Qw(s,a)−Vw(s) 可以通过估计Q值或者直接用TD误差代替。这里假设我们使用TD误差作为优势估计:
A
w
(
s
,
a
)
=
r
+
γ
V
w
(
s
′
)
−
V
w
(
s
)
A_w(s,a) = r + \gamma V_w(s') - V_w(s)
Aw(s,a)=r+γVw(s′)−Vw(s) 梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 目标网络软更新(可选)
为了稳定训练,可以使用软更新方式逐步更新目标网络参数(如果使用目标网络)
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w− 请注意,这一步是可选的,取决于是否在你的实现中使用了目标网络。
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算批评家和策略梯度,并再次进行更新,直到满足停止条件。
A2C
A2C (Advantage Actor-Critic) 方法
1. 初始化与超参数 初始化演员网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 和评论家网络
V
w
(
s
)
V_w(s)
Vw(s) 的参数
θ
\theta
θ 和
w
w
w。
设定超参数:目标网络平滑系数
τ
\tau
τ(如果使用目标网络),学习率
α
θ
\alpha_\theta
αθ 和
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,噪声生成器参数(用于探索),批次大小
N
N
N,以及GAE平滑因子
λ
\lambda
λ。
2. 经验收集
使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在环境中执行动作,并收集轨迹数据,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
a_t \sim \pi_{\theta}(\cdot|s_t)
at∼πθ(⋅∣st),然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
3. 优势估计
对于每个时间步
t
t
t,通过蒙特卡洛或TD(
λ
\lambda
λ)方法计算返回值
G
t
=
∑
l
=
0
T
−
t
−
1
γ
l
r
t
+
l
G_t = \sum_{l=0}^{T-t-1}{\gamma^lr_{t+l}}
Gt=l=0∑T−t−1γlrt+l 计算广义优势估计(GAE)
A
t
^
=
∑
l
=
0
T
−
t
−
1
(
γ
λ
)
l
δ
t
+
l
\widehat{A_t}=\sum_{l=0}^{T-t-1}{\left(\gamma\lambda\right)^l\delta_{t+l}}
At
=l=0∑T−t−1(γλ)lδt+l 其中TD误差定义为
δ
t
=
r
t
+
γ
V
w
(
s
t
+
1
)
−
V
w
(
s
t
)
\delta_t=r_t+\gamma V_w(s_{t+1}) - V_w(s_t)
δt=rt+γVw(st+1)−Vw(st)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
∼
ρ
β
[
∇
θ
log
π
θ
(
a
∣
s
)
A
t
^
]
\nabla_\theta J(\theta) = E_{s\sim\rho^\beta}\left[\nabla_\theta \log{\pi_\theta(a|s)} \widehat{A_t}\right]
∇θJ(θ)=Es∼ρβ[∇θlogπθ(a∣s)At
] 梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 价值网络更新
定义评论家损失函数为:
L
V
(
w
)
=
E
t
[
(
V
w
(
s
t
)
−
G
t
)
2
]
L^{V}(w) = E_t[(V_w(s_t) - G_t)^2]
LV(w)=Et[(Vw(st)−Gt)2] 使用梯度下降更新评论家网络参数以最小化上述损失函数
w
←
w
−
α
w
∇
w
L
V
(
w
)
w \gets w - \alpha_w \nabla_w L^{V}(w)
w←w−αw∇wLV(w)
6. 目标网络软更新(可选)
为了稳定训练,可以使用软更新方式逐步更新目标网络参数(如果使用目标网络)
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w− 请注意,这一步是可选的,取决于是否在你的实现中使用了目标网络。
7. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算优势估计,并再次进行策略和价值网络更新,直到满足停止条件。
DPG
DPG (Deterministic Policy Gradient) 方法
1. 初始化与超参数 初始化演员网络
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 和评论家网络
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a) 的参数
θ
\theta
θ 和
w
w
w。
设定超参数:目标网络平滑系数
τ
\tau
τ,学习率
α
θ
\alpha_\theta
αθ 和
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,噪声生成器参数(例如Ornstein-Uhlenbeck过程的参数),以及批次大小
N
N
N。
2. 经验收集
使用当前策略
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 在环境中执行动作,并收集轨迹数据,直到收集到足够的样本数
N
N
N。每个时间步
t
t
t,根据当前状态加上噪声选择动作
a
t
=
μ
θ
(
s
t
)
+
N
t
a_t = \mu_{\theta}(s_t) + \mathcal{N}_t
at=μθ(st)+Nt,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
3. 价值网络更新
对于每个样本
(
s
i
,
a
i
,
r
i
,
s
i
′
)
(s_i, a_i, r_i, s'_i)
(si,ai,ri,si′),计算TD目标:
y
i
=
r
i
+
γ
Q
w
(
s
i
′
,
μ
θ
−
−
(
s
i
′
)
)
y_i = r_i + \gamma Q_w(s'_i, \mu^-_{\theta^-}(s'_i))
yi=ri+γQw(si′,μθ−−(si′)) 定义评论家损失函数为:
L
Q
(
w
)
=
E
i
[
(
Q
w
(
s
i
,
a
i
)
−
y
i
)
2
]
L^{Q}(w) = E_i[(Q_w(s_i, a_i) - y_i)^2]
LQ(w)=Ei[(Qw(si,ai)−yi)2] 使用梯度下降更新评论家网络参数以最小化上述损失函数
w
←
w
−
α
w
∇
w
L
Q
(
w
)
w \gets w - \alpha_w \nabla_w L^{Q}(w)
w←w−αw∇wLQ(w)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
[
∇
a
Q
w
(
s
,
a
)
∣
a
=
μ
θ
(
s
)
⋅
∇
θ
μ
θ
(
s
)
]
\nabla_\theta J(\theta) = E_s[\nabla_a Q_w(s, a)|_{a=\mu_\theta(s)} \cdot \nabla_\theta \mu_\theta(s)]
∇θJ(θ)=Es[∇aQw(s,a)∣a=μθ(s)⋅∇θμθ(s)] 梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 目标网络软更新
为了稳定训练,使用软更新方式逐步更新目标网络参数
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w−
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算批评家和策略梯度,并再次进行更新,直到满足停止条件。
A3C
A3C (Asynchronous Advantage Actor-Critic) 方法
1. 初始化与超参数 初始化共享的演员网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 和评论家网络
V
w
(
s
)
V_w(s)
Vw(s) 的参数
θ
\theta
θ 和
w
w
w。每个并行工作的代理(worker)拥有自己的局部网络副本。
设定超参数:目标网络平滑系数
τ
\tau
τ(如果使用目标网络),学习率
α
θ
\alpha_\theta
αθ 和
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,噪声生成器参数(用于探索),批次大小
N
N
N,以及GAE平滑因子
λ
\lambda
λ。
2. 经验收集
每个代理使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在各自环境中执行动作,并独立地收集轨迹数据,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
a_t \sim \pi_{\theta}(\cdot|s_t)
at∼πθ(⋅∣st),然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。代理不依赖经验回放缓冲区,而是直接使用收集到的经验进行更新。
3. 优势估计
对于每个时间步
t
t
t,通过蒙特卡洛或TD(
λ
\lambda
λ)方法计算返回值
G
t
=
∑
l
=
0
T
−
t
−
1
γ
l
r
t
+
l
G_t = \sum_{l=0}^{T-t-1}{\gamma^lr_{t+l}}
Gt=l=0∑T−t−1γlrt+l 计算广义优势估计(GAE)
A
t
^
=
∑
l
=
0
T
−
t
−
1
(
γ
λ
)
l
δ
t
+
l
\widehat{A_t}=\sum_{l=0}^{T-t-1}{\left(\gamma\lambda\right)^l\delta_{t+l}}
At
=l=0∑T−t−1(γλ)lδt+l 其中TD误差定义为
δ
t
=
r
t
+
γ
V
w
(
s
t
+
1
)
−
V
w
(
s
t
)
\delta_t=r_t+\gamma V_w(s_{t+1}) - V_w(s_t)
δt=rt+γVw(st+1)−Vw(st)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
∼
ρ
β
[
∇
θ
log
π
θ
(
a
∣
s
)
A
t
^
]
\nabla_\theta J(\theta) = E_{s\sim\rho^\beta}\left[\nabla_\theta \log{\pi_\theta(a|s)} \widehat{A_t}\right]
∇θJ(θ)=Es∼ρβ[∇θlogπθ(a∣s)At
] 梯度上升更新策略参数以最大化上述目标函数。由于是异步更新,每个代理在更新其本地参数后,将梯度应用到全局网络,并从全局网络同步最新的参数到本地。
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 价值网络更新
定义评论家损失函数为:
L
V
(
w
)
=
E
t
[
(
V
w
(
s
t
)
−
G
t
)
2
]
L^{V}(w) = E_t[(V_w(s_t) - G_t)^2]
LV(w)=Et[(Vw(st)−Gt)2] 使用梯度下降更新评论家网络参数以最小化上述损失函数。同样,更新是异步的,代理将梯度应用于全局网络。
w
←
w
−
α
w
∇
w
L
V
(
w
)
w \gets w - \alpha_w \nabla_w L^{V}(w)
w←w−αw∇wLV(w)
6. 目标网络软更新(可选)
为了稳定训练,可以使用软更新方式逐步更新目标网络参数(如果使用目标网络)
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w− 请注意,这一步是可选的,取决于是否在你的实现中使用了目标网络。
7. 循环迭代
一旦完成一轮更新,代理继续与各自的环境交互,收集新的经验数据,重新计算优势估计,并再次进行策略和价值网络更新,直到满足停止条件。所有代理同时工作,异步地更新全局网络。
PG
PG (Policy Gradient) 方法
1. 初始化与超参数 初始化策略网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 的参数
θ
\theta
θ。
设定超参数:学习率
α
θ
\alpha_\theta
αθ,折扣因子
γ
\gamma
γ,批次大小
N
N
N,以及可能的基线(baseline)估计器参数(用于减少方差),如价值函数
V
w
(
s
)
V_w(s)
Vw(s) 的参数
w
w
w。
2. 经验收集
使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在环境中执行动作,并收集轨迹数据
τ
=
{
s
t
,
a
t
,
r
t
}
t
=
0
T
\tau=\{s_t,a_t,r_t\}_{t=0}^T
τ={st,at,rt}t=0T,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
a_t \sim \pi_{\theta}(\cdot|s_t)
at∼πθ(⋅∣st),然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。
3. 基线估计(可选)
为了减少更新的方差,可以使用基线估计器来调整奖励信号。常用的是状态价值函数
V
w
(
s
)
V_w(s)
Vw(s),其可以通过单独训练得到:
L
V
(
w
)
=
E
t
[
(
V
w
(
s
t
)
−
G
t
)
2
]
L^{V}(w) = E_t[(V_w(s_t) - G_t)^2]
LV(w)=Et[(Vw(st)−Gt)2] 其中返回值
G
t
G_t
Gt 定义为
G
t
=
∑
l
=
0
T
−
t
−
1
γ
l
r
t
+
l
G_t = \sum_{l=0}^{T-t-1}{\gamma^lr_{t+l}}
Gt=l=0∑T−t−1γlrt+l 使用梯度下降更新基线估计器参数
w
←
w
−
α
w
∇
w
L
V
(
w
)
w \gets w - \alpha_w \nabla_w L^{V}(w)
w←w−αw∇wLV(w)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
τ
∼
ρ
β
[
∑
t
=
0
T
∇
θ
log
π
θ
(
a
t
∣
s
t
)
(
G
t
−
b
(
s
t
)
)
]
\nabla_\theta J(\theta) = E_{\tau\sim\rho^\beta}\left[\sum_{t=0}^T \nabla_\theta \log{\pi_\theta(a_t|s_t)} (G_t - b(s_t))\right]
∇θJ(θ)=Eτ∼ρβ[t=0∑T∇θlogπθ(at∣st)(Gt−b(st))] 这里
b
(
s
t
)
b(s_t)
b(st) 是基线,它可以是常数、状态价值函数
V
w
(
s
t
)
V_w(s_t)
Vw(st) 或者其他形式。如果未使用基线,则令
b
(
s
t
)
=
0
b(s_t)=0
b(st)=0。
梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算基线估计(如果有),并再次进行策略更新,直到满足停止条件。
TD3
TD3 (Twin Delayed Deep Deterministic Policy Gradient) 方法
1. 初始化与超参数 初始化演员网络
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 和两个评论家网络
Q
w
1
(
s
,
a
)
Q_{w_1}(s,a)
Qw1(s,a),
Q
w
2
(
s
,
a
)
Q_{w_2}(s,a)
Qw2(s,a) 的参数
θ
\theta
θ,
w
1
w_1
w1 和
w
2
w_2
w2。同时初始化目标网络
μ
θ
−
−
(
s
)
\mu^-_{\theta^-}(s)
μθ−−(s),
Q
w
1
−
′
1
(
s
,
a
)
Q'^{1}_{w^-_1}(s,a)
Qw1−′1(s,a),
Q
w
2
−
′
2
(
s
,
a
)
Q'^{2}_{w^-_2}(s,a)
Qw2−′2(s,a) 的参数,并让它们的权重与对应的主网络相同。
设定超参数:目标网络平滑系数
τ
\tau
τ,学习率
α
θ
\alpha_\theta
αθ,
α
w
1
\alpha_{w_1}
αw1,
α
w
2
\alpha_{w_2}
αw2,折扣因子
γ
\gamma
γ,噪声生成器参数(例如Clipped Normal噪声),批次大小
N
N
N,延迟更新频率
D
D
D。
2. 经验收集
使用当前策略
μ
θ
(
s
)
\mu_{\theta}(s)
μθ(s) 在环境中执行动作,并收集轨迹数据,直到收集到足够的样本数
N
N
N。每个时间步
t
t
t,根据当前状态加上噪声选择动作
a
t
=
μ
θ
(
s
t
)
+
N
t
a_t = \mu_{\theta}(s_t) + \mathcal{N}_t
at=μθ(st)+Nt,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。将经验
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t, a_t, r_t, s_{t+1})
(st,at,rt,st+1) 存储到经验回放缓冲区中。
3. 价值网络更新
从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
对于每个样本
(
s
i
,
a
i
,
r
i
,
s
i
′
)
(s_i, a_i, r_i, s'_i)
(si,ai,ri,si′),计算TD目标:
y
i
=
r
i
+
γ
Q
w
−
′
min
(
s
i
′
,
μ
θ
−
−
(
s
i
′
)
+
ϵ
)
y_i = r_i + \gamma Q'^{\min}_{w^-}(s'_i, \mu^-_{\theta^-}(s'_i) + \epsilon)
yi=ri+γQw−′min(si′,μθ−−(si′)+ϵ) 其中
ϵ
\epsilon
ϵ 是一个剪切的正态分布噪声,用于目标策略平滑,而
Q
w
−
′
min
Q'^{\min}_{w^-}
Qw−′min 表示两个目标评论家网络输出的最小值。
定义两个评论家损失函数为:
L
Q
1
(
w
1
)
=
E
i
[
(
Q
w
1
(
s
i
,
a
i
)
−
y
i
)
2
]
L^{Q_1}(w_1) = E_i[(Q_{w_1}(s_i, a_i) - y_i)^2]
LQ1(w1)=Ei[(Qw1(si,ai)−yi)2]
L
Q
2
(
w
2
)
=
E
i
[
(
Q
w
2
(
s
i
,
a
i
)
−
y
i
)
2
]
L^{Q_2}(w_2) = E_i[(Q_{w_2}(s_i, a_i) - y_i)^2]
LQ2(w2)=Ei[(Qw2(si,ai)−yi)2] 使用梯度下降分别更新两个评论家网络参数以最小化上述损失函数
w
1
←
w
1
−
α
w
1
∇
w
1
L
Q
1
(
w
1
)
w_1 \gets w_1 - \alpha_{w_1} \nabla_{w_1} L^{Q_1}(w_1)
w1←w1−αw1∇w1LQ1(w1)
w
2
←
w
2
−
α
w
2
∇
w
2
L
Q
2
(
w
2
)
w_2 \gets w_2 - \alpha_{w_2} \nabla_{w_2} L^{Q_2}(w_2)
w2←w2−αw2∇w2LQ2(w2)
4. 策略更新(每D次更新一次)
仅当评论家网络已经更新了
D
D
D 次时,才进行策略更新。定义策略梯度为:
∇
θ
J
(
θ
)
=
E
s
[
∇
a
Q
w
1
(
s
,
a
)
∣
a
=
μ
θ
(
s
)
⋅
∇
θ
μ
θ
(
s
)
]
\nabla_\theta J(\theta) = E_s[\nabla_a Q_{w_1}(s, a)|_{a=\mu_\theta(s)} \cdot \nabla_\theta \mu_\theta(s)]
∇θJ(θ)=Es[∇aQw1(s,a)∣a=μθ(s)⋅∇θμθ(s)] 这里我们只用第一个评论家网络来计算策略梯度,以保持一致性。
梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 目标网络软更新
为了稳定训练,使用软更新方式逐步更新目标网络参数
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\theta^- \gets \tau\theta + (1-\tau)\theta^-
θ−←τθ+(1−τ)θ−
w
1
−
←
τ
w
1
+
(
1
−
τ
)
w
1
−
w^-_1 \gets \tau w_1 + (1-\tau)w^-_1
w1−←τw1+(1−τ)w1−
w
2
−
←
τ
w
2
+
(
1
−
τ
)
w
2
−
w^-_2 \gets \tau w_2 + (1-\tau)w^-_2
w2−←τw2+(1−τ)w2−
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算批评家和策略梯度,并再次进行更新,直到满足停止条件。
REINFORCE
REINFORCE 方法
1. 初始化与超参数 初始化策略网络
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 的参数
θ
\theta
θ。
设定超参数:学习率
α
θ
\alpha_\theta
αθ,折扣因子
γ
\gamma
γ,以及可能的基线(baseline)估计器参数(用于减少方差),如价值函数
V
w
(
s
)
V_w(s)
Vw(s) 的参数
w
w
w。
2. 经验收集
使用当前策略
π
θ
(
a
∣
s
)
\pi_{\theta}(a|s)
πθ(a∣s) 在环境中执行动作,并收集轨迹数据
τ
=
{
s
t
,
a
t
,
r
t
}
t
=
0
T
\tau=\{s_t,a_t,r_t\}_{t=0}^T
τ={st,at,rt}t=0T,直到完成一个完整的episode。每个时间步
t
t
t,根据当前状态选择动作
a
t
∼
π
θ
(
⋅
∣
s
t
)
a_t \sim \pi_{\theta}(\cdot|s_t)
at∼πθ(⋅∣st),然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。
3. 基线估计(可选)
为了减少更新的方差,可以使用基线估计器来调整奖励信号。常用的是状态价值函数
V
w
(
s
)
V_w(s)
Vw(s),其可以通过单独训练得到:
L
V
(
w
)
=
E
t
[
(
V
w
(
s
t
)
−
G
t
)
2
]
L^{V}(w) = E_t[(V_w(s_t) - G_t)^2]
LV(w)=Et[(Vw(st)−Gt)2] 其中返回值
G
t
G_t
Gt 定义为
G
t
=
∑
l
=
0
T
−
t
−
1
γ
l
r
t
+
l
G_t = \sum_{l=0}^{T-t-1}{\gamma^lr_{t+l}}
Gt=l=0∑T−t−1γlrt+l 使用梯度下降更新基线估计器参数
w
←
w
−
α
w
∇
w
L
V
(
w
)
w \gets w - \alpha_w \nabla_w L^{V}(w)
w←w−αw∇wLV(w)
4. 策略更新
定义策略梯度为:
∇
θ
J
(
θ
)
=
E
τ
∼
ρ
β
[
∑
t
=
0
T
∇
θ
log
π
θ
(
a
t
∣
s
t
)
(
G
t
−
b
(
s
t
)
)
]
\nabla_\theta J(\theta) = E_{\tau\sim\rho^\beta}\left[\sum_{t=0}^T \nabla_\theta \log{\pi_\theta(a_t|s_t)} (G_t - b(s_t))\right]
∇θJ(θ)=Eτ∼ρβ[t=0∑T∇θlogπθ(at∣st)(Gt−b(st))] 这里
b
(
s
t
)
b(s_t)
b(st) 是基线,它可以是常数、状态价值函数
V
w
(
s
t
)
V_w(s_t)
Vw(st) 或者其他形式。如果未使用基线,则令
b
(
s
t
)
=
0
b(s_t)=0
b(st)=0。
梯度上升更新策略参数以最大化上述目标函数
θ
←
θ
+
α
θ
∇
θ
J
(
θ
)
\theta \gets \theta + \alpha_\theta \nabla_\theta J(\theta)
θ←θ+αθ∇θJ(θ)
5. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算基线估计(如果有),并再次进行策略更新,直到满足停止条件。
DQN
DQN (Deep Q-Network) 方法
1. 初始化与超参数 初始化Q网络
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a) 的参数
w
w
w 和目标Q网络
Q
w
−
−
(
s
,
a
)
Q^-_{w^-}(s,a)
Qw−−(s,a) 的参数
w
−
w^-
w−,并让它们的权重相同。
设定超参数:目标网络平滑系数
τ
\tau
τ 或者硬更新频率(例如每C步),学习率
α
w
\alpha_w
αw,折扣因子
γ
\gamma
γ,批次大小
N
N
N,经验回放缓冲区容量
M
M
M,以及探索策略参数(如
ϵ
\epsilon
ϵ-贪婪策略中的
ϵ
\epsilon
ϵ值)。
2. 经验收集
使用当前策略(例如
ϵ
\epsilon
ϵ-贪婪策略)在环境中执行动作,并收集轨迹数据,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
=
arg
max
a
Q
w
(
s
t
,
a
)
a_t = \arg\max_a Q_w(s_t, a)
at=argmaxaQw(st,a) 或以概率
ϵ
\epsilon
ϵ 随机选择动作,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。将经验
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t, a_t, r_t, s_{t+1})
(st,at,rt,st+1) 存储到经验回放缓冲区中。
3. 价值网络更新
从经验回放缓冲区中随机抽取一批样本
{
(
s
i
,
a
i
,
r
i
,
s
i
′
)
}
i
=
1
N
\{(s_i, a_i, r_i, s'_i)\}_{i=1}^{N}
{(si,ai,ri,si′)}i=1N。
对于每个样本
(
s
i
,
a
i
,
r
i
,
s
i
′
)
(s_i, a_i, r_i, s'_i)
(si,ai,ri,si′),计算TD目标:
y
i
=
r
i
+
γ
max
a
Q
w
−
−
(
s
i
′
,
a
)
y_i = r_i + \gamma \max_a Q^-_{w^-}(s'_i, a)
yi=ri+γamaxQw−−(si′,a) 定义损失函数为:
L
(
w
)
=
E
i
[
(
Q
w
(
s
i
,
a
i
)
−
y
i
)
2
]
L(w) = E_i[(Q_w(s_i, a_i) - y_i)^2]
L(w)=Ei[(Qw(si,ai)−yi)2] 使用梯度下降更新Q网络参数以最小化上述损失函数
w
←
w
−
α
w
∇
w
L
(
w
)
w \gets w - \alpha_w \nabla_w L(w)
w←w−αw∇wL(w)
4. 目标网络更新
为了稳定训练,定期使用硬更新方式更新目标网络参数,例如每C步更新一次
w
−
←
w
w^- \gets w
w−←w 或者使用软更新方式逐步更新目标网络参数
w
−
←
τ
w
+
(
1
−
τ
)
w
−
w^- \gets \tau w + (1-\tau)w^-
w−←τw+(1−τ)w−
5. 探索衰减
逐渐减少探索的概率
ϵ
\epsilon
ϵ,以平衡探索与利用。例如,可以线性地从初始值
ϵ
s
t
a
r
t
\epsilon_{start}
ϵstart 减少到最终值
ϵ
e
n
d
\epsilon_{end}
ϵend,随着训练次数增加而递减。
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,重新计算TD目标,并再次进行Q网络更新和目标网络更新,直到满足停止条件。
Q-learning
Q-learning 方法
1. 初始化与超参数 初始化Q表或Q函数
Q
(
s
,
a
)
Q(s,a)
Q(s,a) 的值,可以是随机初始化或者全部初始化为0。
设定超参数:学习率
α
\alpha
α,折扣因子
γ
\gamma
γ,探索策略参数(如
ϵ
\epsilon
ϵ-贪婪策略中的
ϵ
\epsilon
ϵ值),以及可能的衰减参数用于逐渐减少
ϵ
\epsilon
ϵ。
2. 经验收集
使用当前策略(例如
ϵ
\epsilon
ϵ-贪婪策略)在环境中执行动作,并收集轨迹数据,直到完成一个完整的episode或达到指定步数。每个时间步
t
t
t,根据当前状态选择动作
a
t
=
arg
max
a
Q
(
s
t
,
a
)
a_t = \arg\max_a Q(s_t, a)
at=argmaxaQ(st,a) 或以概率
ϵ
\epsilon
ϵ 随机选择动作,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。
3. Q值更新
对于每个时间步
t
t
t,根据观测到的经验
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t, a_t, r_t, s_{t+1})
(st,at,rt,st+1) 更新Q值:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
max
a
Q
(
s
t
+
1
,
a
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha [r_t + \gamma \max_a Q(s_{t+1}, a) - Q(s_t, a_t)]
Q(st,at)←Q(st,at)+α[rt+γamaxQ(st+1,a)−Q(st,at)] 这里,
α
[
r
t
+
γ
max
a
Q
(
s
t
+
1
,
a
)
−
Q
(
s
t
,
a
t
)
]
\alpha [r_t + \gamma \max_a Q(s_{t+1}, a) - Q(s_t, a_t)]
α[rt+γmaxaQ(st+1,a)−Q(st,at)] 是TD误差,代表了预期未来奖励与当前估计之间的差异。
4. 探索衰减
逐渐减少探索的概率
ϵ
\epsilon
ϵ,以平衡探索与利用。例如,可以线性地从初始值
ϵ
s
t
a
r
t
\epsilon_{start}
ϵstart 减少到最终值
ϵ
e
n
d
\epsilon_{end}
ϵend,随着训练次数增加而递减。
5. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,收集新的经验数据,并再次进行Q值更新,直到满足停止条件。
看了上面的算法,其实还是很有必要对MC和TD方法也进行一个阐述
MC
1. MC (Monte Carlo) 方法思想
1. 初始化与超参数 初始化动作价值函数
Q
(
s
,
a
)
Q(s,a)
Q(s,a) 的值,可以是随机初始化或者全部初始化为0。
设定超参数:学习率
α
\alpha
α,折扣因子
γ
\gamma
γ,探索策略参数(如
ϵ
\epsilon
ϵ-贪婪策略中的
ϵ
\epsilon
ϵ值),以及可能的衰减参数用于逐渐减少
ϵ
\epsilon
ϵ。
2. 经验收集
使用当前策略(例如
ϵ
\epsilon
ϵ-贪婪策略)在环境中执行动作,并完整地经历一个或多个episode。每个时间步
t
t
t,根据当前状态选择动作
a
t
=
arg
max
a
Q
(
s
t
,
a
)
a_t = \arg\max_a Q(s_t, a)
at=argmaxaQ(st,a) 或以概率
ϵ
\epsilon
ϵ 随机选择动作,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1,直到episode结束。
3. 返回值计算
对于每个episode中的每一个状态-动作对
(
s
t
,
a
t
)
(s_t, a_t)
(st,at),计算从该时刻开始到episode结束的所有奖励的折现和,即返回值:
G
t
=
∑
k
=
0
T
−
t
−
1
γ
k
r
t
+
k
G_t = \sum_{k=0}^{T-t-1}{\gamma^kr_{t+k}}
Gt=k=0∑T−t−1γkrt+k 其中
T
T
T 是episode的长度,而
r
t
+
k
r_{t+k}
rt+k 是在时间步
t
+
k
t+k
t+k 获得的奖励。
4. 动作价值函数更新
对于每个episode中的每一个访问过的状态-动作对
(
s
t
,
a
t
)
(s_t, a_t)
(st,at),更新其动作价值函数:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
G
t
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha [G_t - Q(s_t, a_t)]
Q(st,at)←Q(st,at)+α[Gt−Q(st,at)] 这里,
α
[
G
t
−
Q
(
s
t
,
a
t
)
]
\alpha [G_t - Q(s_t, a_t)]
α[Gt−Q(st,at)] 表示TD误差,代表了实际获得的返回值与之前估计的动作价值之间的差异。
5. 策略改进
基于新的动作价值函数
Q
(
s
,
a
)
Q(s,a)
Q(s,a) 改进策略。例如,在
ϵ
\epsilon
ϵ-贪婪策略中,可以通过增加利用的比例(即选择最大Q值的动作的概率)来逐步减少探索。
6. 探索衰减
逐渐减少探索的概率
ϵ
\epsilon
ϵ,以平衡探索与利用。例如,可以线性地从初始值
ϵ
s
t
a
r
t
\epsilon_{start}
ϵstart 减少到最终值
ϵ
e
n
d
\epsilon_{end}
ϵend,随着训练次数增加而递减。
7. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,经历新的episode,重新计算返回值,并再次进行动作价值函数更新和策略改进,直到满足停止条件。
TD
2. TD (Temporal Difference) 方法思想
1. 初始化与超参数 初始化动作价值函数
Q
(
s
,
a
)
Q(s,a)
Q(s,a) 的值,可以是随机初始化或者全部初始化为0。
设定超参数:学习率
α
\alpha
α,折扣因子
γ
\gamma
γ,探索策略参数(如
ϵ
\epsilon
ϵ-贪婪策略中的
ϵ
\epsilon
ϵ值),以及可能的衰减参数用于逐渐减少
ϵ
\epsilon
ϵ。
2. 经验收集
使用当前策略(例如
ϵ
\epsilon
ϵ-贪婪策略)在环境中执行动作,并经历一个或多个时间步。每个时间步
t
t
t,根据当前状态选择动作
a
t
=
arg
max
a
Q
(
s
t
,
a
)
a_t = \arg\max_a Q(s_t, a)
at=argmaxaQ(st,a) 或以概率
ϵ
\epsilon
ϵ 随机选择动作,然后观察奖励
r
t
r_t
rt 和下一个状态
s
t
+
1
s_{t+1}
st+1。
3. 动作价值函数更新
对于每个时间步
t
t
t,根据观测到的经验
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t, a_t, r_t, s_{t+1})
(st,at,rt,st+1) 更新动作价值函数:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)]
Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)] 这里,
α
[
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
]
\alpha [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)]
α[rt+γQ(st+1,at+1)−Q(st,at)] 是TD误差,代表了一步预测的未来奖励与当前估计的动作价值之间的差异。
4. 策略改进
基于新的动作价值函数
Q
(
s
,
a
)
Q(s,a)
Q(s,a) 改进策略。例如,在
ϵ
\epsilon
ϵ-贪婪策略中,可以通过增加利用的比例(即选择最大Q值的动作的概率)来逐步减少探索。
5. 探索衰减
逐渐减少探索的概率
ϵ
\epsilon
ϵ,以平衡探索与利用。例如,可以线性地从初始值
ϵ
s
t
a
r
t
\epsilon_{start}
ϵstart 减少到最终值
ϵ
e
n
d
\epsilon_{end}
ϵend,随着训练次数增加而递减。
6. 循环迭代
一旦完成一轮更新,重复从经验收集开始的过程,继续与环境交互,经历新的时间步,重新计算TD误差,并再次进行动作价值函数更新和策略改进,直到满足停止条件。
最后呢,我们回到bellman equation看一下强化学习
贝尔曼公式
贝尔曼公式与贝尔曼最优公式
1. 简介
贝尔曼公式是强化学习中用于表达状态价值函数或动作价值函数递归关系的方程。它基于动态规划的思想,将一个复杂的问题分解为一系列较小的子问题来解决。对于给定的策略
π
\pi
π 和折扣因子
γ
\gamma
γ,贝尔曼公式可以描述为:
-
对于状态价值函数 V π ( s ) V_\pi(s) Vπ(s):
V π ( s ) = ∑ a π ( a ∣ s ) ( ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] ) V_\pi(s) = \sum_a \pi(a|s) \left( \sum_{s',r} p(s',r|s,a) \left[ r + \gamma V_\pi(s') \right] \right) Vπ(s)=a∑π(a∣s) s′,r∑p(s′,r∣s,a)[r+γVπ(s′)] -
对于动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a):
Q π ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ ∑ a ′ π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) ] Q_\pi(s, a) = \sum_{s',r} p(s',r|s,a) \left[ r + \gamma \sum_{a'} \pi(a'|s') Q_\pi(s', a') \right] Qπ(s,a)=s′,r∑p(s′,r∣s,a)[r+γa′∑π(a′∣s′)Qπ(s′,a′)]
这里, p ( s ′ , r ∣ s , a ) p(s', r | s, a) p(s′,r∣s,a) 表示在采取动作 a a a 后从状态 s s s 转移到状态 s ′ s' s′ 并获得奖励 r r r 的概率。
2. 贝尔曼最优公式
贝尔曼最优公式定义了最优状态价值函数 V ∗ ( s ) V^*(s) V∗(s) 和最优动作价值函数 Q ∗ ( s , a ) Q^*(s, a) Q∗(s,a),它们对应于能获得最大预期回报的策略。这些公式反映了最优策略下的价值函数特性: -
对于最优状态价值函数 V ∗ ( s ) V^*(s) V∗(s):
V ∗ ( s ) = max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ∗ ( s ′ ) ] V^*(s) = \max_a \sum_{s',r} p(s',r|s,a) \left[ r + \gamma V^*(s') \right] V∗(s)=amaxs′,r∑p(s′,r∣s,a)[r+γV∗(s′)] -
对于最优动作价值函数 Q ∗ ( s , a ) Q^*(s, a) Q∗(s,a):
Q ∗ ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ max a ′ Q ∗ ( s ′ , a ′ ) ] Q^*(s, a) = \sum_{s',r} p(s',r|s,a) \left[ r + \gamma \max_{a'} Q^*(s', a') \right] Q∗(s,a)=s′,r∑p(s′,r∣s,a)[r+γa′maxQ∗(s′,a′)]
3. 求解方法
求解贝尔曼公式和贝尔曼最优公式的方法多种多样,下面列出几种常用的方法: -
值迭代(Value Iteration):
该方法直接对贝尔曼最优公式进行迭代更新,直到收敛到最优价值函数。每一步都假设当前的价值估计是最优的,并据此计算新的价值估计。具体步骤如下:- 初始化所有状态的价值函数为任意值(除了终止状态设为0)。
- 迭代更新每个状态的价值函数:
V ( s ) ← max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V(s) \gets \max_a \sum_{s',r} p(s',r|s,a) \left[ r + \gamma V(s') \right] V(s)←amaxs′,r∑p(s′,r∣s,a)[r+γV(s′)] - 当价值函数的变化小于某个阈值时停止迭代。
-
策略迭代(Policy Iteration):
策略迭代包括两个交替进行的过程:策略评估和策略改进。首先对给定的策略进行评估以计算其对应的价值函数,然后基于这个价值函数改进策略,选择那些使得期望回报最大的动作。重复这两个过程直到策略不再改变或变化很小为止。 -
Q-learning 和 Sarsa:
这两种方法属于TD学习算法,它们通过在线的方式逐步逼近贝尔曼最优公式。Q-learning 是一种off-policy算法,它直接寻找最优策略,而Sarsa是一种on-policy算法,它评估并改善执行中的策略。对于Q-learning来说,更新规则如下:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ max a ′ Q ( s t + 1 , a ′ ) − Q ( s t , a t ) ] Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha [r_t + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t)] Q(st,at)←Q(st,at)+α[rt+γa′maxQ(st+1,a′)−Q(st,at)]
对于Sarsa,则有:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)] Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)]
其中, α [ r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] \alpha [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)] α[rt+γQ(st+1,at+1)−Q(st,at)] 是TD误差,代表了一步预测的未来奖励与当前估计的动作价值之间的差异。 -
深度Q网络(DQN):
当面对高维输入空间时,可以使用神经网络作为函数逼近器来估计动作价值函数,这就是DQN的核心思想。它结合了经验回放和固定Q目标等技术来稳定训练过程。
创作不易,转载请注明原文地址。