TD3 · Stable Baselines3 · MuJoCo Ant-v5

四足步態實驗 · 完整數據附錄

本頁收錄 簡報未呈現 的逐版 reward 設定、九大量化指標、完整比較表與多 seed 驗證;所有數據依實驗編號(03–15)對照記錄。

陳俊融411233006 吳冠霆411233013
TD3SB3MuJoCo Ant-v5105 維觀測 · 8 維動作

版本總覽

模型演進與代號對照

希臘字母為簡報代號,括號內為實驗編號(影片、程式碼、下方數據表皆以編號命名,可交叉對照)。全部模型訓練步數為 1M。

起點

α ALPHA自寫 TD3

自寫 TD3、未建指標;站著有收入、暴衝、出界、動作太抖。

自然步態基準

β BETAexp 03

改用 SB3 TD3 + 步態 wrapper,可計算九種指標,看起來最自然——但 seed 不穩。

兩條改良分支

β′ BETA′exp 12@25k

載入成功的 BETA 再做 gait gate 微調;12@25k 為目前指標最佳成品。

γ GAMMAexp 04–08

換 reward 做參數搜尋,訓練更穩、指標漂亮,但觀感較機械。

穩定化最終分支

θ THETAexp 15 / 15A

不換最終 reward,只用 ctrl 排程修早期 fast-fall;可重現、指標漂亮、觀感自然。

每一版一句話定位

β03最自然,但從零訓練成功率只有 1/3
γ04改用 progress,穩定會走但抖、超速
γ05在 04 上加 gait、姿態、平滑,仍超速
γ06Progress 系列最平滑,但速度偏慢
γ07Progress 系列速度最準、最平衡,但不如 03 自然
γ08Gait 代理指標最好,但肉眼較機械、耗能高
γ09更重 smooth / ctrl 的未完成實驗
10證明只換 legacy gait 無法複製 03
11直接 gate 掉 standing gait,cold start 失敗
β′12@25k目前最佳成品:成功 03 經 gate 微調 25k
β′12 final同一場微調的 120k 最後模型,速度已漂慢
13Multi-seed 證明 03→12 不穩,03 成功率 1/3
14驗證 07 progress 底座是否跨 seed 穩定
θ15 / 15A只修 03 早期 ctrl,保留自然感並提高成功率

量化方法

九大步態指標定義

把「自然、穩定、省力」拆成可量化、可比較的數字,作為下方所有數據表的欄位定義。

類別指標中文名稱解釋理想方向
走路穩定episode_length存活步數一回合能撐多久,有沒有中途摔倒。越高越好(滿回合 = 1000)
mean_speed平均速度Ant 是否真的往前走,速度是否接近目標。接近 1.0 m/s
speed_error速度誤差實際速度和目標速度的差距。越低越好
步態品質contact_regularity接觸週期性對四隻腳的接觸序列做自相關,取主要週期峰值平均。越高越好
anti_phase對角交替度兩組對角腳是否輪流踩地(trot)。diag1 = mean(FL, BR)、diag2 = mean(FR, BL),再算 abs(diag1 − diag2)。越高越好
diagonal_sync對角同步度同組對角腳是否一致:0.5 × ((1 − |FL − BR|) + (1 − |FR − BL|))。越高越好(搭配 anti_phase 看)
其他action_jerk動作抖動量相鄰兩步 action 差值的平方和平均:mean(sum((aₜ − aₜ₋₁)²))。越低越好
transport_cost / CoT單位距離能耗全 episode 控制力平方和除以前進距離:sum(action²) / distance。越低越好
uprightness軀幹直立度從 torso quaternion 算身體 z 軸朝上程度:1 − 2(qx² + qy²)。越接近 1 越好

最終成果

三個代表模型的九大指標

簡報定案的三個模型對照;每欄最佳值以綠色標示。

模型定位ep_lenmean_speedspeed_errorjerk ↓CoT ↓diag_syncupright
BETA 03自然步態基準10000.9400.1400.0281.020.7120.986
BETA′@25k 12最佳指標 checkpoint10000.9830.1080.0370.9600.6780.990
THETA 15A穩定化最終模型10000.9130.1220.0521.620.7440.991

成果簡述

THETA 成功修掉 fast-fall,能穩定走滿 1000 steps,速度接近目標且保持低抖動與高直立度;BETA′ / 12@25k 則是九大指標最漂亮的 checkpoint;BETA 是自然步態的視覺基準,但從零訓練 seed 成功率僅約 1/3。

完整數據

全版本量化結果總表

所有跑出同規格結果的版本並列;「—」代表現有紀錄無該數字。09、11、13、14、15 非同規格完整成品,列於下方詳解而不硬塞此表。各欄最佳值以綠色標示。

代號版本SpeedSpeed err ↓RegularityAnti-phaseDiag syncJerk ↓CoT ↓Upright
β03 seed 00.9400.1400.2390.2090.7120.0281.020.986
γ041.2900.3280.3340.3210.6010.3295.560.982
γ051.3700.3970.3550.3260.6770.1582.850.977
γ060.8300.2190.3440.2120.5520.0872.620.989
γ07 seed 00.9580.1000.3080.2670.5440.1203.010.979
γ080.9220.1680.3800.3580.5750.1334.160.993
100.8860.1600.1280.1750.6060.2164.910.985
β′12 final0.8800.1810.6890.0421.090.985
β′12 @ 25k0.983~0.1080.2450.6780.0370.9600.990

Speed 理想值為接近 1.0 m/s(非越大越好);Speed err / Jerk / CoT 越低越好;Regularity / Anti-phase / Diag sync / Upright 越高越好。

數據觀察:指標彼此 trade-off

建立指標後發現,Ant 不是「某一項變好就整體變好」;各項指標之間會互相拉扯。

  1. ep_len 高 ≠ 速度正確(04、05 走滿 1000 卻嚴重超速)
  2. anti_phase / regularity 高 ≠ 觀感一定自然(08 指標最好卻最機械)
  3. jerk 低 / CoT 低 ≠ 速度一定足夠(06 最平滑卻偏慢)
  4. seed 0 成功 ≠ multi-seed 穩定(03 成功率僅 1/3)

TensorBoard 分析

從訓練曲線到最終 scorecard

直接讀 TensorBoard event 檔(RL_Labcowork/output/**/tb)整理出的圖表,把「reward 會騙人 → 指標互相 trade-off → 用 scorecard 共同檢查」這條主線用數據呈現。點圖可放大。

Alpha / Beta 早期困境曲線

困境一 · Reward 高 ≠ 步態可信

Alpha 有 reward,卻沒有步態 scorecard

左圖:Alpha 自寫 TD3 的 Eval/reward 一路上升,能確認模型有在學——但回答不了「是否自然、穩定、省力地走」。

右圖:Beta 改用 SB3 + RealisticGaitWrapper 後開始記錄 gait/x_velocitycontacts/diagonal_sync,主觀也最自然;但 multi-seed 才暴露 seed 1/2 會 fast-fall。

  • Alpha:看得到 reward,沒有同規格 gait 指標。
  • Beta:自然基準成立,但 seed 穩定性不足。
各分支 TensorBoard 評估曲線

困境二 · 指標不會同時最佳

各分支的評估曲線

六張子圖(存活步數、速度、速度誤差、jerk、CoT、對角同步)對照 Gamma 04 / 06 / 07 / 08、BetaPrime 與 Theta-15A。

存活步數幾乎都能很快穩到 1000,但速度、jerk、CoT、diagonal_sync 不會同時收斂到最佳——這正是要建立九大指標的原因。

註:Gamma-05 本機無 event 檔,曲線不含 05。

指標 trade-off 散布圖

為什麼單一指標不夠

Trade-off 散布圖

三張散布圖:速度 vs jerk、速度 vs 能耗(CoT)、步態代理(anti_phase)vs 平滑(jerk)。

Beta、BetaPrime-25k、Theta-15A 聚在低 jerk/低 CoT 的甜蜜區;Gamma 系列即使某些單項突出,仍被拉到高能耗或高抖動。

  • 速度準 ≠ 最平滑。
  • anti_phase / regularity 漂亮 ≠ CoT 與觀感最好。
最終模型 scorecard 長條圖

解決 · 用 scorecard 共同檢查

最終模型 scorecard 比較

六項指標長條圖(速度、速度誤差、jerk、CoT、對角同步、直立度)並排所有版本;最終不靠單一 reward,而是九項一起看:

  • BetaPrime-25k:速度最準(0.983)、CoT 最低(0.960)。
  • Theta-15A:對角同步最高(0.744)、直立度最高(0.991),穩定走滿 1000。
  • Gamma-04 / 05 雖走得久,但速度誤差與 jerk 明顯偏高。

逐版數據

各版本 reward 設定與結果

展開每一版可看到「相對前一版改了什麼 reward」「跑出的指標」與「解讀」。這是 PPT 放不下、但決定每個數字背後原因的細節。

β · 自然步態基準

β · 03 第一次走得自然,但訓練很看運氣把目標從「跑得快」改成「速度接近 1.0 且省力、對角協調」
Reward 設定
forward_mode = deviation reward_structure = additive gait_mode = legacy ctrl_weight = 5.0 # 動作非常貴 gait_weight = 2.0 posture_weight= 2.0 alive_weight = 1.0 # forward reward r_forward = -fw * |x_vel - target| r = r_fwd + r_alive + r_ctrl + r_gait + r_posture
結果(seed 0)
ep_len 1000speed 0.940err 0.140 diag_sync 0.712anti 0.209jerk 0.028 CoT 1.02upright 0.986

為什麼自然:ctrl=5 很重,模型不能大力甩腳,只能找省力走法。問題:站著速度 0 會被 deviation 扣 −1;早期隨機動作 × ctrl=5 產生巨大負 reward,模型容易學成「快速摔倒止損」。13 證明從零訓練成功率僅 1/3。

γ · progress reward 搜尋(04–09)

γ · 04 改成 progress,先求穩定會走站著只是沒前進分、不再被扣負分,避免 fast-fall
相對 03 的修改
forward_mode : deviation → progress reward_structure: additive → forward_gated gait_mode : legacy → antiphase_gated ctrl : 5.0 → 0.5 alive : 1.0 → 0.5 smooth: 0 → 0.02 tilt : 0 → 0.2
結果
ep_len 1000speed 1.29err 0.328jerk 0.329CoT 5.56

穩定會走,但超速、很抖、很費力——只適合當「穩定結構」的起點。

γ · 05 加強 gait、姿態與平滑步態協調變好、抖動下降,但仍超速
相對 04 的修改
ctrl : 0.5 → 1.0 gait : 2.0 → 3.0 posture: 0.5 → 1.5 smooth : 0.02 → 0.25 tilt : 0.2 → 0.8
結果
speed 1.37err 0.397reg 0.355anti 0.326diag 0.677jerk 0.158CoT 2.85

協調比 04 好、抖動減少,但還是超速,主觀仍不像 03 自然。

γ · 06 修超速、加重平滑progress 系列最平滑,但速度偏慢
相對 05 的修改
forward gate → tent # 速度=1.0 分最高,太快降分 ctrl : 1.0 → 1.5 smooth: 0.25 → 0.40
結果
ep_len 1000speed 0.83err 0.219jerk 0.087CoT 2.62upright 0.989

最平滑的版本,但速度偏慢,步態被磨得比較柔弱。

γ · 07 把速度與踏步拉回來progress 系列速度最準、最平衡(穩定底座候選)
相對 06 的修改
gait : 3.0 → 4.5 ctrl : 1.5 → 1.2 smooth: 0.40 → 0.30
結果(seed 0)
ep_len 1000speed 0.958err 0.100reg 0.308anti 0.267diag 0.544jerk 0.120CoT 3.01upright 0.979

速度控制 progress 系列最好,但 jerk 約為 03 的 4.3 倍、CoT 約 3 倍——會走、速度準,但較像機器踩節拍。14 即用來驗證它跨 seed 是否穩定。

γ · 08 追求更強的對角交替gait 代理指標最好,但更用力、CoT 更差
相對 07 的修改
intra_weight: 0.25 → 0.35 smooth : 0.30 → 0.35
結果
speed 0.922err 0.168reg 0.380anti 0.358diag 0.575jerk 0.133CoT 4.16upright 0.993

regularity、anti-phase、uprightness 最好,但踏步更用力。證明「週期性與 gait 指標漂亮 ≠ 主觀像真實動物」。

γ · 09 再加重 smooth / ctrl / intra未完整跑完,不列量化結果
設定
ctrl = 2.0 smooth= 0.50 intra = 0.40 gait = 4.5
狀態
未完整訓練

沒跑完,因此不列數據、也不用來下結論。

對照與失敗實驗(10、11)

10 把 03 的 legacy gait 接到 forward gate證明只換 legacy gait 無法複製 03 的自然
設定
legacy gait + progress / tent 速度 + forward_gated
結果
ep_len 1000speed 0.886err 0.160reg 0.128anti 0.175diag 0.606jerk 0.216CoT 4.91

比預期差。03 的自然度來自整套 reward 結構 + 重 ctrl + 訓練過程,不是單一 gait 公式。

11 03 + gait speed gate,從零訓練直接 gate 掉 standing gait,cold start 失敗
唯一修改
gait_speed_gate = 0.3 # 站著 gait 分=0,速度 >0.3 才恢復
結果
跑到 ~300k仍 ~13 steps 就摔

03 的站立 gait 分不只是漏洞,也在 early training 提供「先站穩」的學習鷹架;第一步就拿掉會讓 cold start 更難。

β′ · 載入成功 03 再微調(12)

β′ · 12 載入成功的 03,加 gate 微調12@25k 是目前最佳單一模型;12 final 速度漂慢
微調流程(底座=成功的 03 seed 0)
載入 03 actor / critics → 換成 03 + gait speed gate reward → 清空 replay buffer → learning rate → 1e-4 → exploration noise → 0.03 → 繼續微調 120k # 總量 = 03 (1.0M) + 12 (25k) = 1.025M
12 @ 25k(早停甜蜜點)
ep_len 1000speed 0.983err ~0.108anti 0.245diag 0.678jerk 0.037CoT 0.960upright 0.990
12 final(~120k)
speed ~0.88err ~0.181diag 0.689jerk 0.042CoT 1.09upright 0.985

微調愈久策略往較慢速度漂移,故選 25k 早停。12@25k 保留 03 自然感又拿掉站著時的 gait 分,是目前最好的模型檔——但底座仍是那次幸運成功的 03 seed 0。

θ · 穩定化最終分支(15 / 15A)

θ · 15 / 15A 小修 03 的 early training最終 reward 仍=03,只改早期 ctrl 排程修 fast-fall
ctrl 時間排程(其餘維持 03)
0 – 100k : ctrl = 0.5 100k–300k: ctrl 0.5 → 5.0 線性 300k+ : ctrl = 5.0 # 15A:提高 forward_weight 補速度, # resume 時移除 schedule、固定 ctrl=5
結果(15A,Theta final)
ep_len 1000speed 0.913err 0.122jerk 0.052CoT 1.62diag 0.744upright 0.991stationary 0.002

早期低 ctrl 先學站穩、移動,會走後再把 ctrl 加回 5,最終回到 03 的省力目標。修掉 fast-fall、走滿整場、diagonal_sync 甚至高於 BETA;目前限制是仍需更多 seed(特別是 seed 2)驗證。

穩健性驗證

Multi-seed 重現性(exp 13)

13 不是新模型,而是把「03 → 12」整條流程用 seed 0 / 1 / 2 各跑一次,檢驗是否可重現。結論:03 從零訓練成功率僅 1/3。

SeedStage 1:03(β)從零訓練 1MStage 2:載入 03 後 gate 微調(β′)
0成功,會走滿 1000 steps成功,12@25k 成為冠軍
1失敗,平均約 14.7 steps 就摔底座已失敗,微調也失敗
2失敗,平均約 16.2 steps 就摔底座已失敗,微調也失敗

結論

03 從零訓練成功率只有 1/3;12 的 gate 微調能改善「成功的 03」,但救不了本來就只會摔倒的底座。12@25k 是最佳成品,但「03 → 12」不是可靠的完整配方——這也是 THETA(15)想用 ctrl 排程解決的問題。

# 目前整體狀態 最好看的原始模型 :03 seed 0(β) 目前最佳模型檔 :12@25k(β′) 已證實不穩的底座 :03 從零訓練 穩定底座候選 :07(γ),等待 14 multi-seed 結果 自然+穩定新嘗試 :15 / 15A(θ),等待正式結果

影片證據

成果影片

數字之外的步態實況。檔名依實驗編號,可對照上方數據。

β′ · exp 12 @ 25k

最佳指標 checkpoint

成功的 03 經 gait gate 微調 25k;速度最準、能耗最低。

speed 0.983jerk 0.037CoT 0.960

θ · exp 15A

穩定化最終模型

ctrl curriculum 從零訓練修掉 fast-fall,再補速度。

speed 0.913diag_sync 0.744upright 0.991

γ · GAMMA reward 搜尋過程(04 → 08,皆 1M step)

04超速、抖
05加 gait/姿態
06最平滑、偏慢
07速度最準
08gait 指標最佳

※ BETA(03)為自然步態視覺基準,本機未保留同規格錄影,故以其微調後代 BETA′ 影片代表該系列。下方對照可見同一場 12 微調至 ~100k 後速度漸漸漂慢,這正是選擇 25k 早停的原因。

12 @ 25k甜蜜點 · speed 0.983
12 @ ~100k同場 final · 速度漂慢

附錄 · 程式碼

給老師檢視的程式碼套件

完整 TD3 × Ant-v5 期末專題程式碼,已整理成可在瀏覽器內閱讀的程式碼專區:含每個模型的訓練腳本、共用工具、reward 設計規格與兩份網頁版報告,全部直接在頁面內檢視,不需下載原始檔。

線上瀏覽:側欄檔案樹 + 內嵌檢視器(Python 語法 highlight、Markdown 即時渲染);或從雲端硬碟下載完整程式碼包。

資料夾結構

資料夾意義主要內容
alpha/Alpha 模型自寫 PyTorch TD3,reward shaping 起點
beta/Beta 模型SB3 TD3 + RealisticGaitWrapper,第一個自然步態版本
gamma/Gamma reward 搜尋04–08 reward 參數搜尋,處理站著、超速、抖動與步態 trade-off
beta_prime/Beta Prime 模型從 Beta checkpoint 做 gait gate curriculum 微調
theta/Theta 最終線用 ctrl curriculum 修 fast-fall,15A 為目前 Theta final
validation/驗證腳本multi-seed 與 scorecard 評估
tools/共用工具TD3 agent、gait wrapper、scorecard metrics、訓練骨架
specs/設計筆記重要 reward 設計與實驗規格
# 從套件根目錄執行,需加上 PYTHONPATH=.
cd <程式碼套件資料夾>
PYTHONPATH=. python theta/train_theta.py
# MuJoCo 離屏錄影 / Linux server 通常需要: MUJOCO_GL=egl
放大圖