文章

02 正交化(Orthogonalization)

02 正交化(Orthogonalization)

02 正交化(Orthogonalization)

一、正交化的核心思想

正交化(Orthogonalization) 是一种系统性调试与优化机器学习模型的方法论。其核心理念是:

每个“控制旋钮”(即调整手段)应尽可能只影响一个目标性能指标,而不干扰其他方面。

这类似于老式电视机上的旋钮:

  • 一个旋钮只调高度
  • 一个只调宽度
  • 一个只调梯形校正
  • 而不是一个旋钮同时改变多个属性。

在机器学习中,这意味着:

  • 如果模型在训练集上表现差,就用专门针对拟合能力的手段;
  • 如果在开发集上表现差(但训练集好),就用专门针对泛化能力的手段;
  • 以此类推。

正交 ≠ 数学上的严格正交向量,而是指功能解耦:每个调节手段独立作用于一个明确的目标。


二、机器学习系统的四个关键目标(正交化四阶段)

构建一个成功的监督学习系统,需依次确保以下四个目标达成:

阶段目标评估标准对应“旋钮”(调节手段)
1. 训练集性能模型能拟合训练数据$J_{\text{train}}$ 足够低(如接近人类水平)- 更大网络- 更好优化器(如 Adam)- 更长训练时间- 更好的初始化
2. 开发集性能模型能泛化到未见数据$J_{\text{dev}}$ 足够低- 正则化(L2、Dropout)- 增加训练数据- 数据增强- 减小模型复杂度
3. 测试集性能模型在最终评估上稳定$J_{\text{test}} \approx J_{\text{dev}}$- 增大开发集(避免对 dev 过拟合)- 确保 dev/test 同分布
4. 实际应用性能用户满意/真实世界表现好用户反馈、业务指标- 修改开发集分布(更贴近真实场景)- 重新设计成本函数 $J(\theta)$

关键原则:每一步只解决一个问题,使用专属旋钮,避免“一调多动”。


三、为什么正交化重要?

1. 提高调试效率

  • 若一个旋钮同时影响训练误差和泛化误差(如 Early Stopping),则难以判断问题根源。
  • 例如:Early Stopping 会:

    • 降低训练性能(提前停止 → 欠拟合)
    • 提升开发性能(防止过拟合)
    • 非正交操作,混淆了两个目标。

吴恩达建议:优先使用正交化手段,如单独用正则化控制泛化,用更大网络控制拟合能力。

2. 明确问题定位

通过检查四个阶段的表现,可快速定位瓶颈:

  • 若 $J_{\text{train}}$ 高 → 欠拟合 → 增强模型容量
  • 若 $J_{\text{train}}$ 低但 $J_{\text{dev}}$ 高 → 过拟合 → 加正则化或更多数据
  • 若 $J_{\text{dev}}$ 低但 $J_{\text{test}}$ 高 → dev/test 分布不一致 → 扩大 dev 集
  • 若 $J_{\text{test}}$ 低但用户不满意 → 目标函数或 dev 集不反映真实需求 → 重定义 $J(\theta)$ 或 dev 集

四、正交化 vs 非正交化手段对比

方法是否正交影响维度说明
增大网络规模✅ 正交主要提升训练性能几乎不影响泛化(若配合正则化)
L2 正则化 / Dropout✅ 正交主要提升泛化性能对训练误差影响可控
Early Stopping❌ 非正交同时影响训练 & 泛化提前停止 → 训练不足 + 防止过拟合
调整学习率⚠️ 部分非正交可能同时影响收敛速度和泛化需谨慎分析

📌 建议:尽量选择正交化手段,使调试过程“可解释、可预测”。


五、实际应用中的正交化流程(诊断-干预循环)

  1. 评估当前系统在四个阶段的表现

    \[J_{\text{train}},\quad J_{\text{dev}},\quad J_{\text{test}},\quad \text{Real-world metric}\]
  2. 找出第一个失败的阶段(从左到右):

    • 例如:$J_{\text{train}} = 5\%$, $J_{\text{dev}} = 15\%$ → 第2阶段失败
  3. 使用对应旋钮进行干预

    • 第2阶段失败 → 使用正则化、增加数据等
  4. 重复直到所有阶段达标


六、总结:正交化的三大价值

  1. 解耦问题:将复杂的系统性能分解为四个清晰阶段。
  2. 精准干预:每个问题有专属解决方案,避免“乱调参数”。
  3. 提升效率:减少试错成本,加速模型迭代。

🔑 金句
不要用一个旋钮去调电视的宽度、高度、角度和位置——那根本调不好。
—— 吴恩达


附:KaTeX 兼容公式汇总

  • 训练误差:$J_{\text{train}}(\theta) = \frac{1}{m_{\text{train}}} \sum_{i=1}^{m_{\text{train}}} \mathcal{L}(y^{(i)}, \hat{y}^{(i)})$
  • 开发集误差:$J_{\text{dev}}(\theta)$
  • 测试集误差:$J_{\text{test}}(\theta)$
  • 正则化损失(L2):$J_{\text{reg}}(\theta) = J(\theta) + \frac{\lambda}{2} |\theta|_2^2$
本文由作者按照 CC BY 4.0 进行授权