M22 · λ_ortho 消融¶
| 状态 | ✅ 完成(2026-09-09)——λ=0 全面最优,正交正则在残差参数化下有害;推翻 M18 的 λ 结论 |
| 一句话 | 正交正则权重 λ 是否重要:λ ∈ {0, 2, 5} 三条从基座各训 100k,与 λ=1 的 100k 点(M20)同口径对比 |
| 上游 | ← M18 §3.2:λ=0.1 → 1.0 首次正向(n=1 种子,待复验)· M20 线全程 λ=1,从未测过其他值 |
| 对照 | M20 @100k(λ=1)outputs/m20/ckpts/step100000.pt |
1 目的¶
M20 线只训过 λ=1。合作者要求测 λ=0(无正交约束)、λ=2、λ=5 三档,回答两个问题: ① 正交正则是否必要(λ=0 会不会退化);② 是否越大越好(λ=5 会不会压垮重建)。
2 训练设置(与 M20 逐项相同,只改 λ)¶
| 参数 | 值 |
|---|---|
| 起点 | CosyVoice3 基座 flow.pt(--base_init),不是从 M20 续训 |
| 参数化 | --m19 残差:L = ‖v_B − u_n‖² + ‖v_B + v_Δ − u_e‖² + λ·L_ortho(v_Δ, v_B) |
| λ | 0 / 2 / 5(对照 1) |
| 数据 | data/m20_cache(R3 变速中立目标,21,301 对,train 划分) |
| 步数 / batch | 100k / 全局 8(DDP 8×1) |
| lr / clip / seed | 1e-5 / 1.0 / 1234 |
| ckpt | 每 10k(供跨 checkpoint 看轨迹) |
| 输出 | outputs/m22_l0 · outputs/m22_l2 · outputs/m22_l5 |
| 耗时 | M20 实测 10k ≈ 41 min ⇒ 每条 ≈ 6.8 h,三条顺序 ≈ 20 h |
3 评测(训完统一跑,二轮口径)¶
| 项 | 内容 |
|---|---|
| 样本 | M21 二轮同一批 ESD-zh test 随机 160 条 + 同批真实录音锚点 |
| 生成 | 直路 α ∈ {0, 0.25, 0.5, 0.75, 1, 1.25, 1.5},16 kHz,同 seed |
| 指标 | E4 §1 质量评分体系:UTMOS / CER / SECS / RA |
| 探针 | teacher-forced cos(v_Δ, x1_emo − x1_neu)、‖v_Δ‖/‖GT‖、A_share;训练曲线 L_ortho / cos_A_B |
| 轨迹 | 四条 λ 的 10k–100k 各 ckpt 探针轨迹 |
| 主判据 | α=1 的 RA 与 UTMOS、α=0 的 CER、中段谷深度、探针 cos |
4 结果¶
4.1 100k 点的 α 扫描(直路,ESD-zh test n=160/格)¶

| λ=0 | λ=1(M20) | λ=2 | λ=5 | |
|---|---|---|---|---|
| UTMOS @α=1 | 2.68 | 2.29 | 2.31 | 2.27 |
| UTMOS @α=1.25 / 1.5 | 2.72 / 2.47 | 2.28 / 2.07 | 2.30 / 2.09 | 2.35 / 2.23 |
| UTMOS @α=0 | 1.93 | 1.91 | 2.01 | 2.12 |
| UTMOS @α=0.5(谷) | 1.61 | 1.60 | 1.61 | 1.62 |
| CER @α=1 | 0.057 | 0.073 | 0.074 | 0.069 |
| CER @α=0 | 0.380 | 0.331 | 0.327 | 0.313 |
| RA @α=1 | 1.13 | 1.04 | 1.07 | 0.95 |
| RA @α=0 | 0.01 | 0.08 | 0.17 | 0.21 |
| RA 跨度 α 0→1 | 1.12 | 0.96 | 0.90 | 0.73 |
| RA @α=1.5 | 1.64 | 1.55 | 1.49 | 1.25 |
| SECS @α=1 | 0.928 | 0.921 | 0.912 | 0.918 |
同条配对差 λ=0 − λ=1:UTMOS @α=1 +0.39(p<0.001)、@α=1.5 +0.40;CER @α=1 −0.015(p=0.002);RA @α=1 +0.08(p<0.001); 唯一反向的是 α=0 的 CER(+0.049,p<0.001)和 SECS(−0.023)。λ=5 − λ=1:UTMOS @α=0 +0.21,但 RA @α=1.5 −0.30(旋钮被压扁)。
4.2 训练曲线与探针轨迹¶

| 100k 末段均值 | λ=0 | λ=1 | λ=2 | λ=5 |
|---|---|---|---|---|
| L_ortho | 0.250 | 0.073 | 0.034 | 0.010 |
| cos(v_Δ, v_B) | −0.30 | −0.17 | −0.11 | −0.06 |
| L_Σ(情感重建) | 0.688 | 0.727 | 0.770 | 0.820 |
| L_B(中立重建) | 0.832 | 0.858 | 0.889 | 0.930 |
| A_share | 0.039 | 0.030 | 0.029 | 0.025 |
| 探针 cos(v_Δ, GT 残差) @100k | 0.832 | 0.759 | 0.746 | 0.720 |
探针轨迹从 10k 到 100k 全程保持 λ=0 > 1 > 2 > 5 的顺序,不是终点偶然。
4.3 λ 对中段强度的影响:RA@α=0.5 vs RA@α=1¶
补充实验 S6(提案待验收)。
| λ | RA@0 | RA@0.5 | RA@1 | RA@1.5 | 中点相对位置 (RA₀.₅−RA₀)/(RA₁−RA₀) | UTMOS@0.5 |
|---|---|---|---|---|---|---|
| 0 | 0.008 | 0.651 | 1.126 | 1.639 | 0.58 | 1.61 |
| 1 | 0.080 | 0.646 | 1.041 | 1.548 | 0.59 | 1.60 |
| 2 | 0.166 | 0.681 | 1.066 | 1.492 | 0.57 | 1.61 |
| 5 | 0.213 | 0.669 | 0.946 | 1.245 | 0.62 | 1.62 |
同条配对 vs λ=1 @α=0.5:λ=0 ΔRA +0.005(p=0.79)· λ=2 +0.035(p=0.17)· λ=5 +0.023(p=0.37)。
读法:α=0.5 处四条 λ 的 RA 在 0.65–0.68 之间,无显著差异(p 0.17–0.79),UTMOS 也全在谷底 1.60–1.62。 λ 改变的是两端:λ 越大 RA@0 越高(中立化不彻底)、RA@1 与 RA@1.5 越低(旋钮压扁),中点被两端夹着几乎不动。 中点相对位置 0.57–0.62 都略高于 0.5——α=0.5 的强度偏向情感端,这是 E2 §4.1 说的刻度非线性,与 λ 无关。 ⇒ λ 消融对中段谷(音质)与中段强度都没有作用,谷是推理端的双梳齿问题,不是训练正则能解决的。
5 结论¶
| 项 | 结论 |
|---|---|
| λ 的作用方向 | 单调:λ 越大,v_Δ 与 v_B 越正交,但两塔重建损失越高、v_Δ 与真实残差越不像、旋钮跨度越窄 |
| 最优 | λ=0。α ≥ 0.75 全部指标最好,且 UTMOS @α=1 的 2.68 已追平 M20 训到 420k 的 2.66 |
| λ 换来的 | 只有 α=0 那一格:UTMOS +0.02 ~ +0.21、CER −0.05 ~ −0.07。代价是 α ≥ 1 处 UTMOS −0.4、RA 跨度 −16% ~ −35% |
| 中段谷 / 中段强度 | 与 λ 无关:α=0.5 的 UTMOS 1.60–1.62、RA 0.65–0.68(p≥0.17)——正则改的是两端,不是中段(§4.3) |
| 为什么 | 不加正则时两塔自然地负相关(cos −0.3 ~ −0.5):v_emo = v_B + v_Δ,情感目标与中立目标不同的部分要靠 v_Δ 抵消掉一部分 v_B,负相关是任务几何决定的。正交约束在跟这个几何对着干 |
| 与 M18 的关系 | M18 报"λ 0.1→1.0 首次正向"(n=1)是在独立双塔 v = (1−α)v_A + αv_B 下测的;残差参数化(M19 起)+ 零初始化残差头本身已完成分工,正则变成纯负担。M18 那条结论不迁移到当前架构 |
| 限制 | 每档 n=1 种子;100k 而非 420k(四条的 α=0 CER 0.31–0.38 都远差于 M20@420k 的 0.22,中立化是后程才学会的) |
| 建议 | 把 λ=0 从 100k 续训到 420k 与 M20 终点同口径对比;若维持优势,主线切 λ=0 |
6 复现¶
bash emo/exp/M17_editor/run_m22_lambda.sh # 三条训练,链式
# 评测:四个 100k 点 × 160 条 × 7 α,八卡;探针 40 ckpt
bash emo/exp/M17_editor/m22_chain.sh; $PY emo/exp/M17_editor/m22_analyze.py