强化学习算法笔记:用一套框架串起 MC、TD、DQN、PPO、SAC
我学强化学习的时候,最大的困扰是:算法太多,名字一堆,每次看完一个新算法就忘了之前的,总觉得它们之间没什么联系。MC、TD、SARSA、Q-learning、DQN、REINFORCE、PPO、SAC、TD3……这些名字听起来像是完全不同的东西。但其实,它们都在回答同一个问题:怎么让智能体学会做决策。后来我发现,如果你用"三个问题"来看这些算法,它们就不再是一堆孤立的名字,而是有清晰脉络的一个体系
原文地址:https://www.infyai.cn/2025/12/28/rl-algorithms-unified-framework/`
我学强化学习的时候,最大的困扰是:算法太多,名字一堆,每次看完一个新算法就忘了之前的,总觉得它们之间没什么联系。
MC、TD、SARSA、Q-learning、DQN、REINFORCE、PPO、SAC、TD3……这些名字听起来像是完全不同的东西。但其实,它们都在回答同一个问题:怎么让智能体学会做决策。
后来我发现,如果你用"三个问题"来看这些算法,它们就不再是一堆孤立的名字,而是有清晰脉络的一个体系:
- 它在学什么?(状态价值、动作价值、还是策略)
- 它的学习目标从哪来?(真实回报 vs 估计值)
- 数据能不能重复用?(on-policy vs off-policy)
强化学习的基本设定
所有算法都在解决马尔可夫决策过程(MDP):
( S , A , P , r , γ ) (\mathcal{S}, \mathcal{A}, P, r, \gamma) (S,A,P,r,γ)
- s ∈ S s \in \mathcal{S} s∈S:状态
- a ∈ A a \in \mathcal{A} a∈A:动作
- P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a):转移概率
- r = r ( s , a ) r = r(s,a) r=r(s,a):奖励
- γ ∈ [ 0 , 1 ) \gamma \in [0,1) γ∈[0,1):折扣因子
智能体和环境交互,产生一条轨迹:
s 0 , a 0 , r 1 , s 1 , a 1 , r 2 , … s_0, a_0, r_1, s_1, a_1, r_2, \dots s0,a0,r1,s1,a1,r2,…
回报(Return)是未来奖励的折扣累加:
G t = ∑ k = 0 ∞ γ k r t + k + 1 G_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k+1} Gt=k=0∑∞γkrt+k+1
目标是最大化期望回报:
max π J ( π ) = E π [ ∑ t ≥ 0 γ t r t + 1 ] \max_\pi \; J(\pi) = \mathbb{E}_\pi \left[ \sum_{t \geq 0} \gamma^t r_{t+1} \right] πmaxJ(π)=Eπ[t≥0∑γtrt+1]
有些算法(比如 SAC)还会加上熵项,鼓励探索:
max π E π [ ∑ t ≥ 0 γ t ( r t + 1 + α H ( π ( ⋅ ∣ s t ) ) ) ] \max_\pi \; \mathbb{E}_\pi \left[ \sum_{t \geq 0} \gamma^t (r_{t+1} + \alpha \mathcal{H}(\pi(\cdot|s_t))) \right] πmaxEπ[t≥0∑γt(rt+1+αH(π(⋅∣st)))]
其中熵 H ( π ( ⋅ ∣ s ) ) = − E a ∼ π [ log π ( a ∣ s ) ] \mathcal{H}(\pi(\cdot|s)) = -\mathbb{E}_{a \sim \pi}[\log \pi(a|s)] H(π(⋅∣s))=−Ea∼π[logπ(a∣s)]。
三个分类轴:把所有算法放进去
不要一上来就背算法名字,先问自己这三个问题:
轴 A:学什么(表示)
- 学状态价值 V π ( s ) V^\pi(s) Vπ(s):这个状态"平均有多好"
- 学动作价值 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a):在状态 s s s 做动作 a a a 有多好
- 学策略 π ( a ∣ s ) \pi(a|s) π(a∣s):直接学怎么出动作
- Actor-Critic:同时学策略(actor)+ 价值(critic)
它们之间的关系: π ( ⋅ ∣ s ) \pi(\cdot|s) π(⋅∣s) 表示在策略 π \pi π 下,状态 s s s所能执行的动作的条件分布
V π ( s ) = E a ∼ π ( ⋅ ∣ s ) [ Q π ( s , a ) ] , A π ( s , a ) = Q π ( s , a ) − V π ( s ) V^\pi(s) = \mathbb{E}_{a \sim \pi(\cdot|s)}[Q^\pi(s,a)], \quad A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s) Vπ(s)=Ea∼π(⋅∣s)[Qπ(s,a)],Aπ(s,a)=Qπ(s,a)−Vπ(s)
轴 B:学习目标怎么来(MC vs TD)
- MC(蒙特卡洛):用完整回报 G t G_t Gt(等到回合结束)
- TD(时序差分):用一步奖励 + 下一步的估计(bootstrapping)
轴 C:数据能否重复利用(on-policy vs off-policy)
- on-policy:数据来自当前策略,旧数据基本作废
- off-policy:可以用旧策略数据(replay buffer),样本效率高
价值函数与 Bellman 方程
所有基于价值的方法(TD、Q-learning、DQN)都在逼近 Bellman 方程。
定义
V π ( s ) = E π [ G t ∣ s t = s ] , Q π ( s , a ) = E π [ G t ∣ s t = s , a t = a ] V^\pi(s) = \mathbb{E}_\pi[G_t | s_t = s], \quad Q^\pi(s,a) = \mathbb{E}_\pi[G_t | s_t = s, a_t = a] Vπ(s)=Eπ[Gt∣st=s],Qπ(s,a)=Eπ[Gt∣st=s,at=a]
Bellman 期望方程(评估当前策略)
V π ( s ) = E a ∼ π , s ′ ∼ P [ r + γ V π ( s ′ ) ] V^\pi(s) = \mathbb{E}_{a \sim \pi, s' \sim P} \big[ r + \gamma V^\pi(s') \big] Vπ(s)=Ea∼π,s′∼P[r+γVπ(s′)]
Q π ( s , a ) = E s ′ ∼ P [ r + γ E a ′ ∼ π [ Q π ( s ′ , a ′ ) ] ] Q^\pi(s,a) = \mathbb{E}_{s' \sim P} \left[ r + \gamma \mathbb{E}_{a' \sim \pi}[Q^\pi(s',a')] \right] Qπ(s,a)=Es′∼P[r+γEa′∼π[Qπ(s′,a′)]]
Bellman 最优方程(找最优策略)
V ∗ ( s ) = max a E [ r + γ V ∗ ( s ′ ) ] , Q ∗ ( s , a ) = E [ r + γ max a ′ Q ∗ ( s ′ , a ′ ) ] V^*(s) = \max_a \mathbb{E}[r + \gamma V^*(s')], \quad Q^*(s,a) = \mathbb{E} \big[ r + \gamma \max_{a'} Q^*(s',a') \big] V∗(s)=amaxE[r+γV∗(s′)],Q∗(s,a)=E[r+γa′maxQ∗(s′,a′)]
TD 类方法就是在采样下逼近这些方程。
MC vs TD:学习目标从哪来
这一节解释你之前可能困惑的"有偏/无偏、方差大小"。
MC:用真实回报 G t G_t Gt
更新 V V V:
V ( s t ) ← V ( s t ) + α [ G t − V ( s t ) ] V(s_t) \leftarrow V(s_t) + \alpha \big[ G_t - V(s_t) \big] V(st)←V(st)+α[Gt−V(st)]
更新 Q Q Q:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ G t − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \big[ G_t - Q(s_t, a_t) \big] Q(st,at)←Q(st,at)+α[Gt−Q(st,at)]
直觉:等一局打完再算"这一步最终带来了多少总分"。
- 优点:target 更"真实",通常无偏
- 缺点:轨迹随机性累积,方差大;必须等结束;样本效率差
TD(0):一步就更新(bootstrapping)
TD(0) 评估 V V V:
V ( s t ) ← V ( s t ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] ⏟ δ t V(s_t) \leftarrow V(s_t) + \alpha \underbrace{\big[ r_{t+1} + \gamma V(s_{t+1}) - V(s_t) \big]}_{\delta_t} V(st)←V(st)+αδt [rt+1+γV(st+1)−V(st)]
- TD target: r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V(s_{t+1}) rt+1+γV(st+1)
- TD error: δ t = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_{t+1} + \gamma V(s_{t+1}) - V(s_t) δt=rt+1+γV(st+1)−V(st)
直觉:不等结局,用"下一步我估计还能拿多少分"来更新当前。
- 优点:在线;更新更频繁;通常方差更小;样本更省
- 缺点:target 里用了估计 V ( s t + 1 ) V(s_{t+1}) V(st+1)(不是真值),因此通常有偏
n-step 与 TD( λ \lambda λ):在 MC 与 TD 之间折中
n-step 回报:
G t ( n ) = ∑ k = 0 n − 1 γ k r t + k + 1 + γ n V ( s t + n ) G_t^{(n)} = \sum_{k=0}^{n-1} \gamma^k r_{t+k+1} + \gamma^n V(s_{t+n}) Gt(n)=k=0∑n−1γkrt+k+1+γnV(st+n)
- n = 1 n=1 n=1:TD(0)
- n → ∞ n \to \infty n→∞:趋向 MC
TD( λ \lambda λ) 把所有 n-step 按 λ \lambda λ 加权混合(常用资格迹/GAE 思想)。
SARSA 与 Q-learning:都是 TD 控制
很多人以为 SARSA 和 Q-learning 的区别是 TD vs 非 TD。这是错的。
它们都是 TD 控制(学 Q Q Q),差别在 on-policy vs off-policy 的 target。
SARSA(on-policy TD 控制)
用实际执行的下一动作 a t + 1 a_{t+1} at+1:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \big[ r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \big] Q(st,at)←Q(st,at)+α[rt+1+γQ(st+1,at+1)−Q(st,at)]
直觉:“我下一步真的会这么走(含探索),那我就按这条路来学习。”
- 优点:更"贴合实际行为策略",在有风险探索时更保守
- 缺点:收敛到的是当前行为策略对应的 Q π Q^\pi Qπ,探索强时可能偏保守
Q-learning(off-policy TD 控制)
target 用贪心最大值:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ max a ′ Q ( s t + 1 , a ′ ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \big[ r_{t+1} + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t) \big] Q(st,at)←Q(st,at)+α[rt+1+γa′maxQ(st+1,a′)−Q(st,at)]
直觉:“不管我探索时怎么乱走,我学习目标永远按最优动作来算。”
- 优点:直接逼近 Q ∗ Q^* Q∗,理论上更"追最优"
- 缺点: max \max max 会带来过估计倾向(深度函数逼近下更明显)
DQN:Q-learning + 神经网络 + 稳定器
DQN 用神经网络 Q θ ( s , a ) Q_\theta(s,a) Qθ(s,a) 近似 Q Q Q,核心更新仍是 Q-learning 的 TD 目标。
TD 目标与损失
用 target network θ − \theta^- θ−:
y = r + γ max a ′ Q θ − ( s ′ , a ′ ) y = r + \gamma \max_{a'} Q_{\theta^-}(s', a') y=r+γa′maxQθ−(s′,a′)
最小化平方误差:
L ( θ ) = E [ ( y − Q θ ( s , a ) ) 2 ] L(\theta) = \mathbb{E} \big[ (y - Q_\theta(s,a))^2 \big] L(θ)=E[(y−Qθ(s,a))2]
为什么 DQN 需要"两个稳定器"
- Experience Replay:把经验存入回放池,随机采样打散相关性
- Target Network: θ − \theta^- θ− 慢更新,避免"目标也跟着你同时变"导致发散
常见 DQN 改进
- Double DQN:缓解 max \max max 过估计
- Dueling:把 Q Q Q 分解为 V V V 与 Advantage
- PER:优先采样"大 TD error"经验
REINFORCE:纯策略梯度
REINFORCE 是最原始的策略梯度:直接用 MC 回报推策略。
基本更新
目标:
J ( θ ) = E π θ [ G 0 ] J(\theta) = \mathbb{E}_{\pi_\theta}[G_0] J(θ)=Eπθ[G0]
REINFORCE 更新:
θ ← θ + α ∑ t ∇ θ log π θ ( a t ∣ s t ) G t \theta \leftarrow \theta + \alpha \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \; G_t θ←θ+αt∑∇θlogπθ(at∣st)Gt
直觉:这局分高,就把这局出现过的动作概率往上推。
baseline:从 REINFORCE 走向 Actor-Critic 的关键一步
加入 baseline b ( s t ) b(s_t) b(st) 不改变期望梯度,但能显著降方差:
θ ← θ + α ∑ t ∇ θ log π θ ( a t ∣ s t ) ( G t − b ( s t ) ) \theta \leftarrow \theta + \alpha \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \; (G_t - b(s_t)) θ←θ+αt∑∇θlogπθ(at∣st)(Gt−b(st))
最常用 b ( s ) = V ϕ ( s ) b(s) = V_\phi(s) b(s)=Vϕ(s),于是权重近似优势:
G t − V ϕ ( s t ) ≈ A ( s t , a t ) G_t - V_\phi(s_t) \approx A(s_t, a_t) Gt−Vϕ(st)≈A(st,at)
REINFORCE 的问题:
- 优点:概念最干净,通常无偏
- 缺点:方差大、样本效率低、训练抖
所以现代方法通常用 Actor-Critic(引入 critic)来替代它。
Actor-Critic 总框架
Actor-Critic = 两个网络(或共享骨干):
- Actor: π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s)
- Critic: V ϕ ( s ) V_\phi(s) Vϕ(s) 或 Q ϕ ( s , a ) Q_\phi(s,a) Qϕ(s,a)
你可以把绝大多数现代算法看成在回答两件事:
- critic 怎么学(target 怎么构造)
- actor 怎么学(目标函数是什么、用什么约束)
Actor 的一般更新(策略梯度形态)
∇ θ J ( θ ) = E [ ∇ θ log π θ ( a ∣ s ) A ^ ( s , a ) ] \nabla_\theta J(\theta) = \mathbb{E} \big[ \nabla_\theta \log \pi_\theta(a|s) \; \hat{A}(s,a) \big] ∇θJ(θ)=E[∇θlogπθ(a∣s)A^(s,a)]
其中 A ^ \hat{A} A^ 来自 critic(例如 GAE、TD error、或 soft Q 形式)。
Critic 的一般更新(Bellman/TD 形态)
如果学 V V V:
min ϕ E [ ( V ^ target ( s ) − V ϕ ( s ) ) 2 ] \min_\phi \mathbb{E} \big[ (\hat{V}_{\text{target}}(s) - V_\phi(s))^2 \big] ϕminE[(V^target(s)−Vϕ(s))2]
如果学 Q Q Q:
min ϕ E [ ( Q ^ target ( s , a ) − Q ϕ ( s , a ) ) 2 ] \min_\phi \mathbb{E} \big[ (\hat{Q}_{\text{target}}(s,a) - Q_\phi(s,a))^2 \big] ϕminE[(Q^target(s,a)−Qϕ(s,a))2]
PPO:on-policy 的稳定策略更新
PPO 是 on-policy Actor-Critic,核心在于:每次策略更新别跨太大步(稳定训练)。
重要性采样比率
r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} rt(θ)=πθold(at∣st)πθ(at∣st)
PPO-Clip 目标(核心)
L CLIP ( θ ) = E [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min \big( r_t(\theta) \hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \big) \right] LCLIP(θ)=E[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
典型 PPO 训练总损失(工程常用)
L ( θ , ϕ ) = − L CLIP ( θ ) + c 1 E [ ( V ϕ ( s t ) − V ^ t ) 2 ] ⏟ value loss − c 2 E [ H ( π θ ( ⋅ ∣ s t ) ) ] ⏟ entropy bonus L(\theta, \phi) = -L^{\text{CLIP}}(\theta) + c_1 \underbrace{\mathbb{E} \big[ (V_\phi(s_t) - \hat{V}_t)^2 \big]}_{\text{value loss}} - c_2 \underbrace{\mathbb{E}[\mathcal{H}(\pi_\theta(\cdot|s_t))]}_{\text{entropy bonus}} L(θ,ϕ)=−LCLIP(θ)+c1value loss E[(Vϕ(st)−V^t)2]−c2entropy bonus E[H(πθ(⋅∣st))]
PPO 的优劣
- 优点:非常稳、好调、泛用(离散/连续都能做)
- 缺点:on-policy → 数据"用完就得再采样",样本效率不如 off-policy(SAC/TD3)
DDPG → TD3:连续动作的 off-policy 确定性 Actor-Critic
连续动作下, max a Q ( s , a ) \max_a Q(s,a) maxaQ(s,a) 不好做(动作是连续变量),所以常用 actor 直接输出动作。
DDPG(确定性策略)
- actor: a = μ θ ( s ) a = \mu_\theta(s) a=μθ(s)
- critic: Q ϕ ( s , a ) Q_\phi(s,a) Qϕ(s,a)
critic 目标:
y = r + γ Q ϕ − ( s ′ , μ θ − ( s ′ ) ) y = r + \gamma Q_{\phi^-}(s', \mu_{\theta^-}(s')) y=r+γQϕ−(s′,μθ−(s′))
critic loss:
L ( ϕ ) = E [ ( y − Q ϕ ( s , a ) ) 2 ] L(\phi) = \mathbb{E}[(y - Q_\phi(s,a))^2] L(ϕ)=E[(y−Qϕ(s,a))2]
actor 目标(最大化 Q):
J ( θ ) = E [ Q ϕ ( s , μ θ ( s ) ) ] J(\theta) = \mathbb{E}[Q_\phi(s, \mu_\theta(s))] J(θ)=E[Qϕ(s,μθ(s))]
用链式法则做确定性策略梯度。
TD3:DDPG 的稳定升级
TD3 三招(强烈建议背下来):
-
双 Q 取最小:减少过估计
y = r + γ min i = 1 , 2 Q ϕ i − ( s ′ , a ~ ′ ) y = r + \gamma \min_{i=1,2} Q_{\phi_i^-}(s', \tilde{a}') y=r+γi=1,2minQϕi−(s′,a~′)
-
target policy smoothing: a ~ ′ = μ θ − ( s ′ ) + ϵ \tilde{a}' = \mu_{\theta^-}(s') + \epsilon a~′=μθ−(s′)+ϵ, ϵ ∼ clip ( N ( 0 , σ ) , − c , c ) \epsilon \sim \text{clip}(\mathcal{N}(0, \sigma), -c, c) ϵ∼clip(N(0,σ),−c,c)
-
延迟更新 actor:critic 更新多步后再更 actor
TD3 的优劣
- 优点:连续控制强、样本效率高、比 DDPG 稳很多
- 缺点:确定性策略探索依赖外加噪声;实现与超参比 PPO 复杂
SAC:最大熵 off-policy Actor-Critic
SAC 可以理解为:"更会探索、更鲁棒"的 off-policy Actor-Critic。
最大熵目标带来的直觉
SAC 不只追求高回报,还追求高熵(策略别太死板)。
直觉:你不希望策略过早变成"死贪心",否则容易卡在次优、也更脆弱。
soft Q 的 Bellman 备份(核心差异)
SAC 的 critic target 多了熵项(或 log π \log \pi logπ 项)。一种常见写法:
y = r + γ ( min i = 1 , 2 Q ϕ i − ( s ′ , a ′ ) − α log π θ ( a ′ ∣ s ′ ) ) , a ′ ∼ π θ ( ⋅ ∣ s ′ ) y = r + \gamma \left( \min_{i=1,2} Q_{\phi_i^-}(s', a') - \alpha \log \pi_\theta(a'|s') \right), \quad a' \sim \pi_\theta(\cdot|s') y=r+γ(i=1,2minQϕi−(s′,a′)−αlogπθ(a′∣s′)),a′∼πθ(⋅∣s′)
critic loss 同样是 MSE:
L ( ϕ ) = E [ ( y − Q ϕ ( s , a ) ) 2 ] L(\phi) = \mathbb{E}[(y - Q_\phi(s,a))^2] L(ϕ)=E[(y−Qϕ(s,a))2]
actor 更新(“最大化 Q + 熵”)
actor 目标常写成最小化:
J ( θ ) = E s ∼ D , a ∼ π θ [ α log π θ ( a ∣ s ) − min i Q ϕ i ( s , a ) ] J(\theta) = \mathbb{E}_{s \sim D, a \sim \pi_\theta} \big[ \alpha \log \pi_\theta(a|s) - \min_i Q_{\phi_i}(s,a) \big] J(θ)=Es∼D,a∼πθ[αlogπθ(a∣s)−iminQϕi(s,a)]
即让策略选择那些 Q 高 且 log π \log \pi logπ 代价低(熵高) 的动作。
温度 α \alpha α(可自动调)
很多实现会自动学习 α \alpha α,让策略熵靠近目标熵 H target \mathcal{H}_{\text{target}} Htarget:
J ( α ) = E a ∼ π θ [ − α ( log π θ ( a ∣ s ) + H target ) ] J(\alpha) = \mathbb{E}_{a \sim \pi_\theta} \big[ -\alpha(\log \pi_\theta(a|s) + \mathcal{H}_{\text{target}}) \big] J(α)=Ea∼πθ[−α(logπθ(a∣s)+Htarget)]
SAC 的优劣
- 优点:off-policy + replay → 样本效率高;探索强;连续控制很强、训练常更稳健
- 缺点:实现复杂(双 Q、熵项、温度、更新比等);超参比 PPO 多
一张总对照表
| 方法 | 学什么 | MC/TD | on/off | 动作空间 | 核心 target / 目标 | 优点 | 缺点 |
|---|---|---|---|---|---|---|---|
| MC 评估 | V / Q V/Q V/Q | MC | on | 任意 | G t G_t Gt | 无偏直观 | 方差大、等结束 |
| TD(0) 评估 | V V V | TD | on | 任意 | r + γ V ( s ′ ) r+\gamma V(s') r+γV(s′) | 在线、稳 | 有偏 |
| SARSA | Q Q Q | TD | on | 多为离散 | r + γ Q ( s ′ , a ′ ) r+\gamma Q(s',a') r+γQ(s′,a′) | 更保守贴合行为 | 样本效率一般 |
| Q-learning | Q Q Q | TD | off | 多为离散 | r + γ max a ′ Q ( s ′ , a ′ ) r+\gamma \max_{a'}Q(s',a') r+γmaxa′Q(s′,a′) | 追最优、可 off-policy | 过估计风险 |
| DQN | Q θ Q_\theta Qθ | TD | off | 离散(不大) | MSE 拟合 Q-learning target | 实战强基线 | 连续动作不直接适用 |
| REINFORCE | π \pi π | MC | on | 任意 | ∇ log π ⋅ G t \nabla\log\pi \cdot G_t ∇logπ⋅Gt | 概念最纯 | 方差大、慢 |
| PPO | π + V \pi+V π+V | 多为 TD/GAE | on | 任意 | clip surrogate + value loss | 稳、好调 | 样本效率不如 off |
| TD3 | μ + Q \mu+Q μ+Q | TD | off | 连续 | 双Q最小+平滑+延迟更新 | 连续控制强、样本效率高 | 实现/调参较复杂 |
| SAC | π + Q \pi+Q π+Q | TD(soft) | off | 连续(也可离散) | Q − α log π Q - \alpha\log\pi Q−αlogπ(最大熵) | 探索强、样本效率高 | 实现复杂 |
选型指南:什么时候用谁
按最关键的两个问题选:
动作空间
- 离散且动作数不大:优先 DQN(或 PPO 也行但通常不如 DQN 简洁高效)
- 连续动作:优先 SAC / TD3;想稳且实现简单可选 PPO
采样成本(交互贵不贵)
- 交互很贵(真实系统/慢仿真):优先 off-policy(SAC/TD3/DQN)
- 交互便宜(并行仿真):PPO 很舒服(稳、可扩展)
你更在乎什么
- 稳定、少踩坑:PPO
- 样本效率、探索、连续控制强:SAC(很多场景首选)
- 确定性控制、追求"硬"性能:TD3(常作为强 baseline)
常见坑与调参检查单
“致命三元组”(函数逼近 + bootstrapping + off-policy)
很多发散/不稳定都来自这三个同时出现(典型深度 Q 学习、off-policy TD)。
应对:target network、双 Q、replay、合理学习率/归一化、限制更新步长。
PPO 常见要点
- advantage 归一化几乎必做
- clip ϵ \epsilon ϵ 不要太大;value loss 权重别压过 policy
- rollout 长度、epoch、batch size 会显著影响稳定性
SAC/TD3 常见要点
- replay buffer 足够大;warmup 采样(先填 buffer)
- 更新比(每交互一步更新几次)要合理
- 观察 Q 值尺度:爆炸通常意味着学习率/目标网络/归一化有问题
- SAC 的 α \alpha α 自动调通常更省心(但要设置合理 target entropy)
最简记忆脉络(一句话版)
- MC vs TD:target 是 G t G_t Gt(等结局)还是 r + γ V ^ / Q ^ r+\gamma\hat{V}/\hat{Q} r+γV^/Q^(用下一步估计)
- SARSA vs Q-learning:target 用 Q ( s ′ , a ′ ) Q(s',a') Q(s′,a′)(on-policy)还是 max a ′ Q ( s ′ , a ′ ) \max_{a'}Q(s',a') maxa′Q(s′,a′)(off-policy)
- DQN:Q-learning + 神经网络 + replay + target network
- REINFORCE:纯策略梯度(MC),方差大 → 引入 baseline/critic 变 Actor-Critic
- PPO:on-policy Actor-Critic,核心是"别更新太猛"(clip)
- TD3:off-policy 连续控制,DDPG 的稳化(三招)
- SAC:off-policy + 最大熵(探索强、样本效率高)
更多推荐



所有评论(0)