# Cross-Re Transfer Learning — 历史归档分析

> **历史归档 / ARCHIVED TRANSFER ANALYSIS**
> 本文记录 2026-07-07 的 `_tr` 迁移实验及当时诊断，保留其科学内容作为历史记录；它不描述当前 active scratch workflow，不是模型发布或当前验证声明。当前规范见 `README.md`、`TRAIN_PIPELINE.md` 与 `DESIGN_DECISIONS.md`。
> 当前归档位置：迁移脚本在 `archive/scripts_deprecated/crossre_transfer.sh`；保留的 `_tr` 日志、校准副本和 metadata 在 `archive/transfer_instability/kar_re*_tr_seed*/`；旧校准在 `archive/calibrations_deprecated/`。active case ID 不带 `_sc`，`_tr` 仅用于这些历史归档。

> 日期: 2026-07-07  
> 实验: 改变上游来流雷诺数 (Re60 / Re200 / Re400)，从 re100 baseline 进行 transfer learning  
> 实验阶段: base (crossre_transfer.sh, lr=3e-4) → extend (extend_transfer.sh, lr=1e-4) → ext2 (ext2_transfer.sh, lr=1e-4)

---

## 1. 实验配置总览

### 1.1 共享超参数

| 参数 | base (crossre_transfer) | extend / ext2 |
|------|:----------------------:|:-------------:|
| PPO n_steps | 2048 | 2048 |
| PPO batch_size | 64 | 64 |
| **PPO n_epochs** | **10** | **5** ← 减半 |
| **Learning rate** | **3e-4** | **1e-4** ← 降为 1/3 |
| Gamma | 0.995 | 0.995 |
| Policy net_arch | [64, 64] | [64, 64] |
| Activation | sin | sin |
| Symmetry augmentation | prob=0.5 | prob=0.5 |
| Episode 数 | 200 (base) | 200-400 (extend / ext2) |
| 基座模型 | re100_karman_seed43 (best≈0.92) | 各自 base/ext 的 best_model |

> **关键差异**: extend/ext2 相比 base 将 n_epochs 从 10 降到 5、lr 从 3e-4 降到 1e-4，**综合保守程度约为 base 的 6 倍**。原始意图是 fine-tune 更稳定，但实际效果适得其反。

### 1.2 校准参数差异（核心问题所在）

| 参数 | re60 | re100 (base) | re200 | re400 |
|------|:---:|:------------:|:-----:|:-----:|
| **SI** | 800 | 800 | 500 | 400 |
| **FORCE_SCALE** | 0.0021 | 0.0024 | 0.0026 | 0.0042 |
| **SENS_SCALE** | 0.72 | 0.75 | 0.90 | 0.98 |
| **dtw_norm_scale** | 0.107 | 0.204 | 0.269 | 0.310 |
| **SIM_BP[1]** (zero rot) | 0.41 | 0.32 | 0.45 | 0.56 |
| **SIM_BP[2]** (ref rot) | 0.61 | 0.82 | 0.77 | 0.73 |
| **SIM_BP gap** (spread) | **0.20** | 0.50 | **0.32** | **0.17** |
| **Δrev / Δsim 梯度比** | **2.5x** | 1.0x | **1.6x** | **2.9x** |
| **SIM_BP 来源** | 实测 | 实测 | 实测 | 实测 |
| **K_CD / K_CL** | **12/25** | 50/100 | **12/25** | **12/25** |

> **关键发现 1**: re60 (gap=0.20) 和 re400 (gap=0.17) 的 SIM_BP gap 远小于 re100 基准的 0.50。  
> **关键发现 2**: re60/re200/re400 的 K_CD/K_CL = 12/25，只有 re100 的 1/4。这意味着跨 Re 迁移后 drag/lift 惩罚显著放宽，改变了 reward landscape。  
> **关键发现 3**: calibrate.py 的 generic SIM_BP 兜底条件（`spread<0.10 或 better_sim<0.5`）对 re60/re200/re400 全部未触发。

### 1.3 SIM_BP 映射机制的数学解释

calibrate.py 将实测的 DTW similarity 范围 `[worst_sim, better_sim]` 固定映射到 reward 值 `[0.2, 0.5]`：

```
r_sim = piecewise_map(measured_sim, SIM_BP=[0, w, b, ...], SIM_VAL=[0, 0.2, 0.5, ...])
```

这意味着 **gap 越小的场景，单位 similarity 变化对应的 reward 变化越大**：

```
Δr_sim/Δsim ≈ (0.5 - 0.2) / gap = 0.3 / gap
```

| Case | gap | Δr/Δsim | 效应 |
|------|:---:|:-------:|------|
| re60 | 0.20 | **1.50** | reward 梯度过陡 → PPO advantage 方差偏大 → 训练不稳定 |
| re100 | 0.50 | **0.60** | 基准：梯度适中 |
| re200 | 0.32 | **0.94** | 梯度偏陡，可接受 |
| re400 | 0.17 | **1.76** | reward 梯度极陡 → PPO 估计噪音极大 → 早期 peak 后快速崩溃 |
| vardist d075 | 0.54 | **0.56** | 梯度偏平 → PPO 信号过弱 → 持续 peak-crash 震荡 |

**与 vardist 的对称性**：vardist d075 的问题方向是 gap 太大（梯度被摊薄），Karman re60/re400 的问题方向是 gap 太小（梯度被过压），但**根源完全相同：实测 SIM_BP 不适合非 re100 基线场景**。

---

## 2. 训练结果

### 2.1 Base Transfer (lr=3e-4, n_epochs=10, 200ep)

| Case | Seed | Best Reward | Best @ Ep | Ep 1 Reward | Ep 200 Reward | 走势质量 |
|------|:----:|:-----------:|:---------:|:-----------:|:-------------:|:--------:|
| **re60** | 43 | **0.724** | 181 | 0.370 | 0.163 | ✅ 快速上升后波动 |
| re60 | 41 | 0.701 | 191 | 0.073 | 0.697 | ✅ 慢启动但稳定 |
| **re200** | 43 | **0.499** | 177 | 0.223 | 0.477 | ⚠️ 缓慢爬升 |
| re200 | 45 | 0.441 | 23 | 0.283 | 0.359 | ❌ 早期 peak 后停滞 |
| re200 | 41 | 0.489 | 60 | 0.190 | 0.381 (Ep105) | ⚠️ 日志截断 |
| **re400** | 43 | **0.553** | 28 | 0.326 | 0.264 | ❌ 极早 peak 后持续退化 |

### 2.2 Extend Transfer (lr=1e-4, n_epochs=5, 200-400ep)

从各自 base best_model 继续 fine-tune：

| Case | Seed | Best Reward | Best @ Ep | Ep 1 Reward | 末 Ep Reward | vs Base | 走势 |
|------|:----:|:-----------:|:---------:|:-----------:|:------------:|:-------:|------|
| re60 ext | 43 | 0.695 | 149 | 0.212 | 0.660 | **-0.029** ⬇ | ⚠️ 起始更低 |
| re200 ext | 43 | **0.535** | 182 | 0.436 | 0.244 (Ep400) | **+0.036** ⬆ | ❌ peak 后退至 0.24 |
| re400 ext | 43 | 0.538 | 107 | 0.341 | 0.345 (Ep400) | **-0.015** ⬇ | ⚠️ 微下降 |

### 2.3 Ext2 Transfer (lr=1e-4, n_epochs=5, 200-400ep)

从各自 base best_model 重新 fine-tune（不继续 ext）：

| Case | Seed | Best Reward | Best @ Ep | Ep 1 Reward | 末 Ep Reward | vs Base | 走势 |
|------|:----:|:-----------:|:---------:|:-----------:|:------------:|:-------:|------|
| re60 ext2 | 43 | 0.711 | 187 | 0.375 | 0.711 | **-0.013** ⬇ | ⚠️ 接近但未超越 |
| re200 ext2 | 43 | 0.524 | 51 | 0.342 | 0.326 (Ep400) | **+0.025** ⬆ | ❌ 低于 ext |
| re400 ext2 | 43 | 0.548 | 373 | 0.365 | 0.393 (Ep400) | **-0.005** ⬇ | ⚠️ 勉强持平 |

### 2.4 跨实验总览

| Case | 最优 | Ep @ 最优 | Ep1→末 差值 | 退化幅度 |
|------|:----:|:---------:|:----------:|:--------:|
| re60 base seed43 | **0.724** | 181 | +0.354 → -0.207 | -0.561 |
| re200 ext seed43 | **0.535** | 182 | +0.436 → -0.192 | -0.628 |
| re400 base seed43 | **0.553** | 28 | +0.326 → -0.062 | -0.388 |

> **re200/re400 的 Ep1 还有提升空间，但都未能守住并持续改进，最终均出现不同程度的退化。**

### 2.5 Reward 走势定性图

```
re60 base seed43:  ▄▂▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ─→ 0.724 (Ep181 peak，Ep200 崩至 0.16)
re60 ext seed43:   ▄▂▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ─→ 0.695 (stable，低于 base 0.724)
re60 ext2 seed43:  ▃▃▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ─→ 0.711 (接近 base，仍略低)

re200 base seed43: ▂▃▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ─→ 0.499 (慢升)
re200 ext seed43:  ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▂▁  ─→ 0.535 (Ep182 peak 后退至 0.244)
re200 ext2 seed43: ▄▀▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃  ─→ 0.524 (Ep51 peak 后停滞)

re400 base seed43: ▄▀▂▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃  ─→ 0.553 (Ep28 peak 后退至 0.264)
re400 ext seed43:  ▄▄▄▄▀▂▂▂▃▃▃▃▃▃▃▃▃▃▃▃  ─→ 0.538 (平稳退化)
re400 ext2 seed43: ▄▂▂▃▃▃▃▄▄▄▄▄▄▄▄▄▄▄▄▄  ─→ 0.548 (极慢恢复)
```

三条核心模式：
1. **re60**：base 能冲到 0.72 但非常波动，ext/ext2 更稳定但上限被压低
2. **re200**："早期爬坡 → 高峰 → 严重退化"三部曲
3. **re400**："极早 peak → 持续退化"二部曲，从未恢复

---

## 3. 诊断分析

### 3.1 ✅ re60 base — 相对成功但波动大

**为什么相对成功：**

1. Re60 流场接近稳态（FFT 显示极弱涡脱落），控制难度最低
2. Re60 与 Re100 的物理差异小（FORCE_SCALE: 0.0021 vs 0.0024，仅差 12%）
3. Ep1 r_cd=0.793 → re100 的策略在 Re60 下 drag 控制仍然有效
4. Ep1 r_sim=0.236 → similarity 虽然初始低，但几何不变 + 流场简单可以快速调整

**潜在问题：**

1. 虽然最优能到 0.724，但 Ep200 跌回 0.163——极不稳定的后期表现
2. 可能已经撞到局部最优（randomly 达到高 reward 后随 PPO 探索而丢失）
3. SIM_BP gap=0.20 导致 reward 梯度 2.5x 于基准，PPO 在被放大的噪音中探步过大

**证据：re60 base seed41 vs seed43 差异巨大**
- seed41: Ep1=0.07（极低起点）→ 最终 0.701（稳步上升）
- seed43: Ep1=0.37（较好起点）→ 冲高 0.724 后末班 0.163（过山车）
- 不同 seed 从不同策略起点出发，但最终都达到了类似上限（0.70-0.72），说明 re60 的能力上限可能就在 0.72 左右

### 3.2 ❌ re200 ext — 最典型的退化模式

**re200 ext seed43 详细曲线：**
```
Ep   1: 0.436  (较高起点——ext 从 base best 继续，base Ep200=0.477)
Ep  50: 0.460  (缓慢上升)
Ep 150: 0.480  (继续缓慢上升)
Ep 182: 0.535  ← BEST (突然突破)
Ep 200: 0.488  (快速回落)
Ep 300: 0.304  (持续下降)
Ep 400: 0.244  (崩溃，回到接近 Ep1 水平)
```

**根因 1 — SIM_BP 梯度过陡（2.5x）**

gap=0.32，Δr/Δsim=0.94，比 re100 基准陡 56%。PPO 的 advantage 估计在这种放大后的 reward 空间中方差增大，导致：
- 偶尔能发现好策略（Ep182 的 0.535）
- 但下次 PPO 更新时在大方差下 over-shoot，丢失策略
- 之后再也找不回来——"过山车"无法逆转

这和一个经典现象一致：**advantage variance 过大时，即使 PPO 的 clipping 也无法防止 catastrophic update**。

**根因 2 — extend 超参过于保守（6x）**

lr=1e-4 + n_epochs=5 的组合相当于每次 PPO update 的有效学习量只有 base 的 ~1/6。当策略退化到 0.244 时，如此小的更新量已无法推动策略脱离低谷。

**根因 3 — K_CD/K_CL 不一致改变 reward landscape**

re100 基准使用 K_CD=50, K_CL=100，但 re200 的 calibration 只有 K_CD=12, K_CL=25（1/4）。这意味着：
- re100 专家策略训练时 drag/lift 受到非常严格的平方惩罚
- 迁移到 re200 后，同样的 drag 偏差只受到 1/4 的惩罚
- 相当于 reward 中 drag/lift 分量的"价格"大幅下降 → PPO 可以"偷工减料"仍然拿到最高 reward
- 但不一定意味着真正控制了流场——更像在 reward 空间中找到了捷径

### 3.3 ❌ re400 — 极早 peak 后永不恢复

**re400 base seed43 详细曲线：**
```
Ep   1: 0.326  (中等起点)
Ep  28: 0.553  ← BEST (极早 peak)
Ep  50: 0.451
Ep 100: 0.362  (持续退化)
Ep 150: 0.301  (继续退化)
Ep 200: 0.264  (接近起点)
```

**根因 1 — SIM_BP gap=0.17，梯度 2.9x 于基准**

这是所有 case 中最极端的 SIM_BP 异常。在 0.17 的窄 similarity 范围内，0.2→0.5 的 reward 映射意味着：
- 任何微小的 similarity 波动被 2.9 倍放大
- PPO 观测到的 reward signal 几乎全是噪音
- 类似在高噪声数据上用大步长 SGD——方向随机，永远无法收敛

**根因 2 — 流场混沌度高**

Re400 涡脱落更强更不规则（FORCE_SCALE=0.0042，比 re100 高 75%）。流场本身的随机性已经大到 PPO 无法在合理步数内学习有效的 value function，再加上被放大的 reward 梯度 → 不稳定的更新 → 策略崩坏。

**根因 3 — 三种退化叠加**

与 re200 不同，re400 同时受到：
1. SIM_BP 梯度异常（2.9x，最严重）
2. K_CD/K_CL 缩小（reward landscape 变形）
3. 流场混沌（自然信号噪声高）

三座大山共同压垮了训练。

### 3.4 extend/ext2 vs base 的退化对比

| Case | base best | ext best | Δ base→ext | ext2 best | Δ best→ext2 | 超参保守效应 |
|------|:---------:|:--------:|:----------:|:---------:|:-----------:|:----------:|
| re60 | **0.724** | 0.695 | **-0.029** | 0.711 | -0.013 | ⚠️ 有害 |
| re200 | 0.499 | **0.535** | **+0.036** | 0.524 | +0.025 | ⚠️ 边际改善但稳不住 |
| re400 | **0.553** | 0.538 | **-0.015** | 0.548 | -0.005 | ⚠️ 基本持平 |

**模式**：extend/ext2 的超参组合（lr=1e-4, n_epochs=5）对任何 Re 都没有产生显著正向帮助：
- re60: 明显有害（-0.029）
- re200: 微改善（+0.036）但后续崩塌
- re400: 基本持平但远低于可接受水平

**推论**：在 SIM_BP 梯度异常未修复的前提下，调整超参只是治标不治本。

---

## 4. 与 Vardist 的交叉验证

### 4.1 SIM_BP 问题的对称性

```
                     ←── 梯度太陡（Karman re60/re400）──→
Δr/Δsim:  0.56      0.60       0.94       1.50       1.76
           │         │          │          │          │
Case:   d075      re100      re200      re60      re400
         │         │          │          │          │
问题:  太平坦     基准      偏陡       太陡       极陡
表现: peak-crash  正常     慢升+退化   波动大    极早peak崩溃
│                    │                    │
└─ vardist 方向 ──────┴─ Karman 方向 ─────┘
```

**两种方向的修复都需要 generic SIM_BP (gap=0.35)**，恰好落在安全区间。

### 4.2 Early Peak 退化：d2 vs re400

两个案例共享完全相同的退化模式：

| 特征 | vardist d2 | Karman re400 | 是否同源？ |
|------|:----------:|:------------:|:---------:|
| Ep1 r_sim | 0.455 | 0.326 | 均 < 0.5 |
| Best @ | Ep 2 | Ep 28 | 均极早 |
| 退化幅度 | 0.470 → 0.246 (48%) | 0.553 → 0.264 (52%) | 接近 |
| 恢复能力 | 无人力干预从未恢复 | 无人力干预从未恢复 | 相同 |
| **根因** | **几何不匹配** | **SIM_BP 梯度 2.9x** | 不同 |

> **d2 的根因是几何变化（2.0L vs 1.0L），re400 的根因是 reward 梯度异常。但两者的退化模式完全一致，说明 "早期 peak 后不可逆退化" 是一个通用的 training instability 信号，无论触发原因是什么。**

### 4.3 Vardist 的改善经验是否可以套用？

| Vardist v2 改进 | 原因 | 是否适用于 Karman？ |
|----------------|------|:-------------------:|
| generic SIM_BP | d075 gap=0.54 太宽 | ✅ **高度适用**（re60/re400 gap 太窄，同因异向） |
| from scratch | d075 Ep1=0.023 完全不适用 | ⚠️ 部分适用（re60 Ep1=0.37 还行，re200/400 borderline） |
| lr=1e-4 | 减少 scratch 训练 over-shoot | ❌ **不适用**（Karman 是 fine-tune，降 lr 有害） |
| — | — | ✅ **需要升回 lr=3e-4, n_epochs=10**（与 base 保持一致） |

---

## 5. 改进建议

### 5.1 针对 re60

| 优先级 | 方案 | 原理 |
|:------:|------|------|
| **P0** | 使用 generic SIM_BP 重新 calibrate | gap=0.20 → 0.35，降低 reward 梯度从 2.5x→1x，稳定训练 |
| **P1** | 从 re60 base best 继续 fine-tune，但保持 lr=3e-4 + n_epochs=10 | 当前 0.724 仍有波动，需要更多 episode 而非更保守更新 |
| **P2** | Multi-seed fine-tune (seed41/43/45) | 不同 seed 的 Ep1→最终轨迹差异大，多 seed 取优 |

### 5.2 针对 re200

| 优先级 | 方案 | 原理 |
|:------:|------|------|
| **P0** | 使用 generic SIM_BP 重新 calibrate | gap=0.32 → 0.35（差异较小但仍有 56% 的梯度过压） |
| **P1** | 恢复 lr=3e-4 + n_epochs=10 的原始超参 | re200 ext 是唯一从 extend 中获益的 case (+0.036)，说明保守更新至少没完全搞砸——但应该用原始超参加速收敛 |
| **P2** | 延长 episode 数至 500+ | re200 base 200ep 仅到 0.499 且仍在上升，需要更长时间 |
| **P3** | 对比 K_CD/K_CL=50/100 vs 12/25 | 找出 reward landscape 变形的实际影响 |
| **P4** | 尝试 n_steps=4096 | 多采一倍经验做一次 PPO update，超参整体更保守但 advantage 估计更稳 |

### 5.3 针对 re400

| 优先级 | 方案 | 原理 |
|:------:|------|------|
| **P0** | 使用 generic SIM_BP 重新 calibrate | gap=0.17 → 0.35，梯度从 2.9x 降到 1x，是**最重要且最可能有效**的改动 |
| **P1** | 对比 from scratch vs transfer | Ep1 r_sim=0.326 borderline，可能需要从头学 |
| **P2** | 考虑 from scratch 500ep (lr=3e-4, n_epochs=10) | 如果 re100 策略对 re400 不适用，scratch 可能更快 |
| **P3** | 尝试更大模型容量 [128, 64] 或 [128, 128] | Re400 流场更混沌，64-d MLP 可能容量不足 |
| **P4** | 降低 symmetry probability 至 0.3 | 高 Re 下流场不对称性更强，强 symmetry 正则化可能有害 |

### 5.4 针对 extend/ext2 脚本

| 优先级 | 方案 | 原理 |
|:------:|------|------|
| **P0** | 恢复 lr=3e-4 + n_epochs=10 | 当前 6x 保守超参对所有 Re 无效甚至有害 |
| **P1** | 只增加 episode 数，不改变任何超参 | 保持与 base 完全一致的 PPO 设置 |
| **P2** | 在每个 Re 的 extend 中点（50% episodes）评估一次 | 如果 reward 持续下降，提前终止避免浪费时间 |

### 5.5 通用改进

| 优先级 | 方案 | 适用范围 |
|:------:|------|---------|
| **P0** | 修改 calibrate.py 的 generic SIM_BP 兜底条件：增加 gap<0.25（re100 基准的 50%）时触发 | 所有 future cross-Re / vardist case |
| **P1** | 将 K_CD/K_CL 固定在 50/100，而非让 calibration 测量不同值 | 保持 reward landscape 一致，跨 Re / 跨几何比较才有意义 |
| **P2** | Ep1 metrics 作为先行诊断指标：r_sim<0.3 时建议 from scratch；r_sim>0.5 + r_cd>0.6 时可放心 transfer | 减少无效实验 |
| **P3** | 对高 Re (200+) 增加 n_steps=4096 的实验分支 | 混沌流场需要更大 minibatch 做稳定 advantage 估计 |
| **P4** | 对比实验矩阵（见 §6） | 一次性验证多个假说 |

---

## 6. 建议的对比实验矩阵

基于以上分析，最经济有效的实验设计（每个 200ep）：

| 实验 | Re | SIM_BP | lr | n_ep | trans？ | 目的 |
|------|:--:|:------:|:--:|:----:|:------:|------|
| **T0** (baseline) | 200/400 | 实测 | 3e-4 | 10 | re100→ | 已有数据，基线 |
| **T1** | 400 | generic | 3e-4 | 10 | re100→ | **P0 验证**：generic SIM_BP 是否消除早期崩溃 |
| **T2** | 400 | generic | 3e-4 | 10 | 无 | 验证 from scratch 是否更优 |
| **T3** | 200 | generic | 3e-4 | 10 | re100→ | 验证 re200 能否突破 0.50-0.53 瓶颈 |
| **T4** | 200 | 实测 | 3e-4 | 10 | re100→, K=50/100 | 验证 K_CD/K_CL 统一的效应 |
| **T5** | 400 | generic | 3e-4 | 10 | re100→, n_steps=4096 | 验证大 minibatch 的效果 |

**推荐路径**：先跑 T1，如果 re400 不再早期崩溃 → P0 确诊 → 再生产性跑 T3 + T4 + T5。

---

## 7. 与 Vardist 的对照总结

| 维度 | Vardist (变扰流尺寸) | Karman (变 Re) |
|------|---------------------|---------------|
| **物理变化** | 扰动圆柱直径 0.75L–2.0L | 来流粘度 → Re 变化 |
| **核心问题** | SIM_BP gap=0.54 太宽（梯度被摊薄） | SIM_BP gap=0.17-0.32 太窄（梯度被过压） |
| **典型退化** | d075: 持续 peak-crash 震荡 | re200/400: 早期 peak 后不可逆退化 |
| **兜底逻辑** | d15/d2 触发 generic；d075 未触发 | re60/200/400 均未触发 |
| **已尝试修复** | v2: generic SIM_BP + from scratch + lr=1e-4 | ext/ext2: lr=1e-4 + n_epochs=5（方向错误） |
| **正确修复** | generic SIM_BP + 合理超参 | generic SIM_BP + 恢复 lr=3e-4 + n_epochs=10 |
| **统一根因** | calibrate.py 的实测 SIM_BP 不适合非 re100 场景 | 同上 |

---

## 8. 关键文件索引

| 文件 | 路径 |
|------|------|
| Base 训练脚本 | `train_karman.py` |
| 环境 | `env_karman.py` |
| 校准脚本 | `calibrate.py`（SIM_BP generic 兜底逻辑在第 526–527 行） |
| Base transfer 启动 | `archive/scripts_deprecated/crossre_transfer.sh`（lr=3e-4, n_epochs=10） |
| Extend transfer 启动 | `extend_transfer.sh`（lr=1e-4, n_epochs=5, 保守超参） |
| Ext2 transfer 启动 | `ext2_transfer.sh`（同上，重新 fine-tune） |
| Multi-GPU launcher | `launch_multi.sh`（lr=3e-4, n_epochs=10） |
| 对比分析 | `VARDIST_ANALYSIS.md` |
| re60 校准 | `archive/transfer_instability/kar_re60_tr_seed43/calibration.json`（SIM_BP gap=0.20, K_CD=12） |
| re100 校准 | `calibrations/re100/calibration.json`（SIM_BP gap=0.50, K_CD=50） |
| re200 校准 | `archive/transfer_instability/kar_re200_tr_seed43/calibration.json`（SIM_BP gap=0.32, K_CD=12） |
| re400 校准 | `archive/transfer_instability/kar_re400_tr_seed43/calibration.json`（SIM_BP gap=0.17, K_CD=12） |
| re60 base 日志 | `archive/transfer_instability/kar_re60_tr_seed43/train.log` |
| re200 base 日志 | `archive/transfer_instability/kar_re200_tr_seed43/train.log` |
| re200 ext 日志 | `output/transfer_re200ext_seed43/train.log`（0.535→0.244 退化） |
| re400 base 日志 | `archive/transfer_instability/kar_re400_tr_seed43/train.log`（Ep28 0.553→0.264 退化） |
| re400 ext2 日志 | `output/transfer_re400ext2_seed43/train.log` |
