Lee93whut commited on
Commit
34ad2cc
·
1 Parent(s): 10926f0

refactor(model): update architecture docs and set dueling as default algorithm

Browse files

- model.py: add CNN vs MLP selection rationale, receptive field analysis,
correct DuelingDQN conclusion from R1 (45%) to R4 final (84% Holdout)
- config.yaml: switch default algorithm double -> dueling (R4 ablation best)

Files changed (2) hide show
  1. config.yaml +3 -3
  2. src/model.py +14 -3
config.yaml CHANGED
@@ -29,10 +29,10 @@ dqn:
29
 
30
  # ── Algorithm variant ─────────────────────────────────────────────────
31
  # vanilla : DQNNetwork + Vanilla Target (Mnih et al., 2015)
32
- # double : DQNNetwork + Double DQN (van Hasselt et al., AAAI 2016) ← 最优(R3 Holdout 74%)
33
- # dueling : DuelingDQN + Vanilla Target (Wang et al., 2016)
34
  # double_dueling : DuelingDQN + Double DQN (两项改进正交叠加)
35
- algorithm: "double"
36
 
37
  # ── Replay Buffer ────────────────────────────
38
  buffer_capacity: 80000 # max transitions stored (ring-list, O(batch_size) sampling)
 
29
 
30
  # ── Algorithm variant ─────────────────────────────────────────────────
31
  # vanilla : DQNNetwork + Vanilla Target (Mnih et al., 2015)
32
+ # double : DQNNetwork + Double DQN (van Hasselt et al., AAAI 2016)
33
+ # dueling : DuelingDQN + Vanilla Target (Wang et al., 2016) ← 最优(R4 Holdout 84%)
34
  # double_dueling : DuelingDQN + Double DQN (两项改进正交叠加)
35
+ algorithm: "dueling"
36
 
37
  # ── Replay Buffer ────────────────────────────
38
  buffer_capacity: 80000 # max transitions stored (ring-list, O(batch_size) sampling)
src/model.py CHANGED
@@ -19,6 +19,17 @@
19
  * Flatten 后接两层全连接,避免参数量随 N² 爆炸时 FC 层过大。
20
  * 权重初始化:Conv 层用 Kaiming Normal(ReLU 最优),FC 层用 Xavier Uniform。
21
 
 
 
 
 
 
 
 
 
 
 
 
22
  验收断言(直接运行本文件)::
23
 
24
  python src/model.py
@@ -118,9 +129,9 @@ class DuelingDQNNetwork(nn.Module):
118
 
119
  相比 DQNNetwork 的优势:在大多数迷宫格子中,各动作的相对优劣差距很小
120
  ("往目标走"总是最优),此时 V(s) 可独立精确学习而无需每个动作都更新,
121
- 理论上参数效率更高,但本项目实验(随机起终点,10×10 迷宫)显示 Dueling DQN
122
- Holdout 成功率(45%)低于 Double DQN(61%),说明在当前任务规模下价值/优势
123
- 分解的收益未能弥补训练稳定性损失架构本身仍被保留供消融对比。
124
 
125
  Args:
126
  grid_size: 迷宫边长 N,决定 Flatten 后的特征维度。
 
19
  * Flatten 后接两层全连接,避免参数量随 N² 爆炸时 FC 层过大。
20
  * 权重初始化:Conv 层用 Kaiming Normal(ReLU 最优),FC 层用 Xavier Uniform。
21
 
22
+ 架构选型论证
23
+ ------------
24
+ * **CNN vs MLP**:观测为 (4, N, N) 结构化网格,CNN 具有平移等变性——"墙在左、目标在右"的
25
+ 空间关系无论出现在地图何处,同一 filter 均可检测,参数效率优于 MLP。MLP 需要
26
+ 将所有位置的空间关系独立学习,在随机起终点设定下泛化更差。
27
+ * **感受野分析**:三层 3×3 Conv(无 stride/pool)的理论感受野 = 3 + 2×(3-1) = 7×7。
28
+ 对 10×10 迷宫,7×7 感受野无法覆盖全图(对角线距离约 14 格);但 Flatten 后接的
29
+ 全连接层将所有位置特征全局混合,弥补了 CNN 局部感受野的不足。Flatten→FC 的
30
+ 全局聚合使网络实际上能对全图状态建模,纯感受野计算低估了该架构的全局感知能力。
31
+ 若迁移至更大迷宫(≥20×20),建议在第三层 Conv 后加 stride=2 或 Global Average Pooling。
32
+
33
  验收断言(直接运行本文件)::
34
 
35
  python src/model.py
 
129
 
130
  相比 DQNNetwork 的优势:在大多数迷宫格子中,各动作的相对优劣差距很小
131
  ("往目标走"总是最优),此时 V(s) 可独立精确学习而无需每个动作都更新,
132
+ 理论上参数效率更高本项目完整消融实验(随机起终点,10×10 迷宫,R4 最终结果)
133
+ 证实了这一优势:Dueling DQN Holdout 成功率 84%,优于 Double DQN(78%)
134
+ Double+Dueling(81%),V/A 分解与迷宫"多动作等效"状态高度适配
135
 
136
  Args:
137
  grid_size: 迷宫边长 N,决定 Flatten 后的特征维度。