JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

TD3:馴服高估

三個樸實的小技巧,把脆弱的 DDPG 變成可靠的主力。每一個都針對 critic 說謊的一種特定方式。

DDPG 核心裡的謊言

為什麼 DDPG 的 critic 會變得過度樂觀?因為目標用的是 actor 所選動作的價值,而 actor 又是被訓練去挑 critic 評分最高的那個動作。任何 critic 剛好高估某個動作的隨機誤差,都會被選中並抄進目標——一個把噪聲往上放大的回饋迴圈。這就是函數近似下的高估(overestimation under function approximation)

它是最大化偏差(maximization bias)在連續世界裡的表親:在帶噪聲的估計上取最大值(或在這裡,透過 actor 取 argmax)會系統性地挑中那些剛好向上走運的。雙延遲 DDPG(Twin Delayed DDPG, TD3)本質上就是 DDPG 加上三道專門對付這件事的防線。

网格世界中的最大化偏差:对带噪声的 Q 估计取最大值会系统性地挑中偶然偏高的值——这正是 DDPG 过高估计的离散版本。

可交互的 Q 学习网格世界,智能体在其中学习状态-动作价值。

技巧一——裁剪雙 Q

TD3 訓練兩個初始權重不同的 critic,在組成學習目標時,取兩者價值估計中較小的那個。這個裁剪雙 Q(clipped double-Q)的動作是刻意悲觀的:如果兩個 critic 都同意某個價值很高,那大概就是高;如果只有一個興奮,取最小值就否決了這份過度樂觀。

y = r + \gamma \min_{i=1,2} Q_{\theta'_i}\!\left(s', \tilde{a}\right)

截断双 Q 目标:TD3 用两个评论家中较小的估值来构造学习目标。

技巧二——目標策略平滑

確定性 critic 可能在某個確切動作上長出一根又尖又窄的價值尖峰——這根尖峰幾乎肯定是假象,而非世界的真實特徵。目標策略平滑(target policy smoothing)把它抹開:計算目標時,在目標動作上加一點裁剪過的噪聲,讓價值在動作的一小片鄰域上取平均。如果一根尖峰禁不起輕輕一晃,就不該讓 actor 去追它。

\tilde{a} = \pi_{\phi'}(s') + \epsilon, \qquad \epsilon \sim \mathrm{clip}\!\left(\mathcal{N}(0,\sigma),\, -c,\, c\right)

目标策略平滑:给目标动作加上经过截断的小噪声,使相近的动作获得相近的价值。

可以把它看成一個正則項,它說:相似的動作應該有相似的價值。它讓 actor 攀爬的動作價值(action-value)曲面更平緩、更可信。

技巧三——延遲策略更新

如果 actor 去追一個還在出錯的 critic,它會鎖死在壞動作上,再把更糟的資料餵回去。因此 TD3 更新 actor(以及目標網路)的頻率比 critic 低——通常每兩次 critic 更新才更新一次 actor。先讓 critic 朝真相穩定下來,然後才移動 actor。這就是名字裡「延遲」的由來。

# forming the target (the heart of TD3)
a2 = actor_target(s2)
a2 = a2 + clip(noise, -c, +c)           # trick 2: target smoothing
a2 = clip(a2, low, high)
q_target = min(critic1_t(s2,a2), critic2_t(s2,a2))   # trick 1: clipped double-Q
y = r + gamma * q_target

update critic1, critic2 toward y        # every step
if step % 2 == 0:                        # trick 3: delayed
    update actor along dQ1/da * da/dw
    soft_update(all targets)
TD3 = DDPG + 取兩個 critic 的最小值 + 平滑過的目標動作 + actor 更新頻率減半。

回報

這些技巧單看都不算聰明——它們是針對已知失效模式的樸實工程。合在一起,它們把脆弱的 DDPG 變成一個能在 MuJoCo 上可靠訓練、種子之間戲劇性大減的方法。TD3 至今仍是一個強而簡單的基準;如果你的工具箱裡想放一個確定性的連續控制演算法,就是它。