每迭代安全檢查
問題
語言模型可能產生退化的隱狀態 — 爆炸的範數、NaN 傳播、對抗觸發的不穩定。在標準 transformer 中,只能在完整前向傳播完成後才能檢查。在循環 transformer 中,相同 block 執行 L 次。如果隱狀態在迭代 3 爆炸,迭代 4-8 是浪費的計算。
解決方案
在每次迭代後檢查殘差 L2 範數。超過閾值立即中止。每 token 有 L 個檢查點而非 1 個。
成本分析
| 操作 | FLOPs (D=2048) | 相對成本 |
|---|---|---|
| L2 範數 | ~2K | 1× |
| Attention | ~4M | 2000× |
| 完整 block | ~34M | 17,000× |
檢查讀取 buf.main(已在 L2 cache)並計算單一標量。基本上免費。
實測結果
H100 / 2B INT4:
| 閾值 | 行為 | 觸發迭代 | 範數值 |
|---|---|---|---|
| 10.0 | 提前中止 | 迭代 0 | 30.7 |
| 50.0 | 捕獲發散 | 迭代 2 | 62.4 |
| 1000.0 | 正常生成 | — | 最大 45.2 |
使用方式
model.generate(prompt, loops=8,
safety_check=True,
safety_norm_threshold=50.0)
為何僅限 Looped 架構
在標準 transformer 中,各層位於不同表示空間 — 跨層比較範數無意義。在循環 transformer 中,每次迭代在相同空間以相同權重操作,單一閾值可均勻適用。