DDPG#

- DDPG学习的是确定性策略,本身探索有限
- 上图中更新当前Actor网络对应的公式就是确定性策略梯度定理。
- Actor和Critic各用一个目标网络用参数 τ实现软更新,τ=1更新方式便和DQN一致。
- Original DDPG Paper: τ=0.001
- OpenAI Spinning Up: τ=0.005 (对应代码中的
polyak=0.995)
- Stable Baselines3: τ=0.005
SAC#
算法流程#


SAC的算法基于最大熵强化学习以促进探索性,在最大熵强化学习的框架下你可以了解学习到Soft Bellman方程和Soft 策略迭代方法,不过都是表格型(tabular)设置,即状态空间和动作空间有限的情况,在连续空间中就替换为任何拟合方法了。
Q网络的Loss Function由Soft Bellman方程推导而来,最小化 Bellman 误差,后来有的延伸算法为了稳定更新会把后面的 α去掉:
LQ(ω)=E(st,at,st+1)∼R,at+1∼πθ(⋅∣st+1)[21(Qω(st,at)−(rt+γ(j=1,2minQωj−(st+1,at+1)−αlogπ(at+1∣st+1))))2]
重参数化 (Reparameterization Trick):
at=fθ(ϵt;st),where ϵt∼N(0,I)
策略 π的损失函数由KL散度推导而来:
Lπ(θ)=N1i=1∑N(αlogπθ(a~i∣si)−j=1,2minQωj(si,a~i))
温度系数是SAC算法的一个核心技巧,你会发现温度系数会随着SAC训练的过程缓缓下降,写代码时我惊讶地发现竟然为一个单独的常数安排了一个优化器:
带约束的优化目标:
πmaxE[t∑r(st,at)]s.t.E(st,at)∼ρπ[−logπt(at∣st)]≥H0
其中 H0 是目标熵 (Target Entropy),通常设置为动作空间维度的负数 (例如: −dim(A))。
温度系数 α 的损失函数:
L(α)=Est∼R,at∼π(⋅∣st)[−αlogπ(at∣st)−αH0]
一些细节#
yi=ri+γ(j=1,2minQωj−(si+1,ai+1)−αlogπθ(ai+1∣si+1))
其中 ai+1∼πθ(⋅∣si+1)。
在代码实现这个公式的时候,Qωj−(si+1,ai+1)和logπθ(ai+1∣si+1)是需要加上”mask“的,加mask的规则如下:
| 情况 | 描述 | Dones (用于Reset环境) | Mask (用于算Q值) | 物理含义 |
|---|
| Terminal | 撞墙/成功/掉坑 | True | 0.0 | 真的结束了,没有未来 |
| TimeLimit | 时间耗尽 | True | 1.0 | 被打断了,但在数学上应当视为有未来 |
| Normal | 正常走路 | False | 1.0 | 还有未来 |
TD3#
- 过高估计 (Overestimation) :像 DQN 一样,Q 网络倾向于高估动作的价值 。
- Critic 不稳定 (Unstable Critics) :Critic 网络震荡,导致 Actor 无所适从 。
- 奇怪的损失景观 (Strange Landscape) :Critic 对某些动作的评分可能在某个点突然极高(尖峰),但其邻域动作评分却很低。这导致 Actor 的策略在更新时容易产生错误引导 。

- 截断双 Q 学习 (Clipped Double Q-Learning) — 1-d即1-done,也就是我之前说的mask,设置规则和之前一样。targ是target network的意思。
y(r,s′,d)=r+γ(1−d)i=1,2minQϕi,targ(s′,aTD3(s′))
-
延迟策略更新 (Delayed Policy Updates): 每更新 N 次 Critic,才更新 1 次 Actor(通常 N=2) 。
-
目标策略平滑 (Target Policy Smoothing): 我们希望 Critic 学习到的价值函数是平滑的(相似的动作应该有相似的价值)。为此,在计算目标值时,我们在目标动作上加一点噪声:
aTD3(s′)=clip(μθ,targ(s′)+clip(ϵ,−c,c),alow,ahigh)
这里 ϵ 是噪声。
再往后RLDP也推荐学习,之后放paper reading里面这里不讲述。