深度学习模型的训练过程本质上是一个高维非凸优化问题,优化算法的选择直接影响模型的收敛速度和最终性能。传统随机梯度下降(SGD)虽然简单,但需要手动调整学习率,且对所有参数使用相同的学习率,这在处理不同特征频率的参数时显得力不从心。
2014年提出的Adam优化器标志着自适应优化算法的重要突破。Adam结合了动量(Momentum)和RMSProp的思想,通过维护梯度的一阶矩(均值)和二阶矩(未中心化的方差)估计,实现了对每个参数的自适应学习率调整。其核心更新规则为:
python复制# Adam伪代码实现
m_t = beta1 * m_{t-1} + (1-beta1) * g_t # 一阶矩估计
v_t = beta2 * v_{t-1} + (1-beta2) * g_t^2 # 二阶矩估计
m_hat = m_t / (1 - beta1^t) # 偏差校正
v_hat = v_t / (1 - beta2^t)
theta_t = theta_{t-1} - alpha * m_hat / (sqrt(v_hat) + epsilon)
然而,Adam在实际应用中也暴露出一些问题:
近年来,研究者发现传统优化器在高维参数空间中容易产生"病态更新"(ill-conditioned updates),即更新方向与损失函数等高线的主轴方向不一致。这导致了优化路径的迂回和收敛速度的下降。
Muon优化器(2024)首次系统性地将正交化更新引入深度学习优化领域。其核心思想是通过极分解(polar decomposition)将更新矩阵分解为旋转和缩放两部分,保持更新方向的正交性。数学上,对于梯度矩阵G,Muon的更新方向O计算为:
O = G(G^T G)^
这种正交化处理能有效改善优化路径的几何性质,但Muon在噪声适应方面仍存在不足,特别是在处理不同神经元或参数组的异质性噪声时表现不佳。
NAMO(Noise-Adaptive Momentum with Orthogonalization)的核心创新在于将Muon的正交化更新与自适应噪声调节机制相结合。算法通过以下关键步骤实现:
正交化动量计算:
继承Muon的正交化处理,对动量项进行极分解:
math复制M_t = \mu_1 M_{t-1} + (1-\mu_1)G_t
O_t = M_t(M_t^T M_t)^{-1/2}
全局噪声自适应缩放:
引入自适应缩放因子α_t,根据梯度噪声水平动态调整更新幅度:
math复制\alpha_t = \frac{\|M_t\|_F}{\sqrt{v_t + \epsilon}}
其中v_t是梯度平方的指数移动平均(类似Adam的二阶矩估计)。
参数更新规则:
math复制\theta_t = \theta_{t-1} - \eta \alpha_t O_t
这种设计既保留了正交更新的几何优势,又通过α_t实现了对噪声水平的自适应调节。
NAMO在理论上具有以下重要性质:
收敛性保证:
在标准光滑性和有界方差假设下,NAMO在确定性环境下达到O(1/√T)的收敛速率,与梯度下降法相当。
噪声自适应:
在随机环境下,当批量大小足够大时,NAMO能自动适应随机梯度的噪声水平,达到最优收敛速率。
计算效率:
相比原始Muon,NAMO仅增加了一个标量α_t的计算,计算开销可忽略不计。正交化操作(矩阵平方根逆)可通过迭代算法高效实现,通常5-10次迭代即可达到足够精度。
在实际实现NAMO时,需要注意以下关键点:
正交化实现的数值稳定性:
python复制# 稳定的正交化实现
def orthogonalize(M):
S = M.T @ M
eigvals, eigvecs = torch.linalg.eigh(S)
sqrt_inv_S = eigvecs @ torch.diag(1.0/torch.sqrt(eigvals)) @ eigvecs.T
return M @ sqrt_inv_S
超参数选择经验:
预热阶段:
建议在前1-5%的训练步骤中使用线性预热,避免初始阶段α_t估计不准确导致的不稳定。
NAMO-D是NAMO的自然扩展,将全局标量自适应推广到对角矩阵自适应。具体改进包括:
对角缩放矩阵:
对每个参数维度(或神经元)计算独立的自适应因子:
math复制D_t = diag\left(\frac{|M_t^i|}{\sqrt{v_t^i + \epsilon}}\right)
钳位机制:
为避免极端值引入的数值不稳定,对D_t实施约束:
math复制D_t = clamp(D_t, [c\bar{d}_t, \frac{1}{c}\bar{d}_t])
其中c∈(0,1]是钳位系数,$\bar{d}_t$是D_t的均值。
更新规则:
math复制\theta_t = \theta_{t-1} - \eta O_t D_t
NAMO-D面临的核心矛盾是:
通过理论分析发现,当钳位系数c接近1时,NAMO-D更接近严格正交;c较小时则允许更大的自适应灵活性。实验表明,c=0.3-0.5能在保持大部分正交优势的同时获得足够的自适应能力。
NAMO-D的主要开销来自对角矩阵的存储和计算。实际实现时可应用以下优化:
分组对角:
将参数分组,每组共享相同的自适应因子,平衡灵活性和效率。
稀疏更新:
对大型模型,每隔若干步更新一次D_t,而非每步更新。
混合精度:
用FP16存储D_t,计算时转换为FP32。
我们在GPT-2(124M和355M参数)上对比了NAMO、NAMO-D与AdamW、Muon的表现:
| 优化器 | 最终困惑度 | 收敛步数 | 内存开销 |
|---|---|---|---|
| AdamW | 18.7 | 100% | 1.0x |
| Muon | 17.9 | 85% | 1.2x |
| NAMO | 17.2 | 78% | 1.25x |
| NAMO-D | 16.5 | 70% | 1.4x |
关键发现:
通过人为注入不同强度的梯度噪声,我们验证了NAMO-D的噪声适应能力:
![噪声水平与性能关系图]
图中显示,随着噪声水平增加:
正交化成分分析:
移除正交化会使性能下降约15%,验证其重要性。
自适应机制测试:
固定α_t会导致收敛速度下降30%,说明自适应机制的关键作用。
NAMO适用场景:
NAMO-D适用场景:
学习率调度:
建议配合余弦退火或线性衰减,而非固定学习率。
批量大小适应:
当改变批量大小时,按√(b_new/b_old)比例调整η。
梯度裁剪:
虽然NAMO具有一定内置稳定性,但对极深模型(>1B参数)仍建议使用温和的梯度裁剪(阈值1.0-5.0)。
训练初期不稳定:
收敛后期震荡:
内存不足:
虽然NAMO系列表现出色,仍有多个改进方向值得探索:
自适应正交化频率:
动态调整正交化操作的频率,平衡计算开销和优化效果。
二阶信息融合:
结合近似Hessian信息,提升在曲率变化剧烈区域的性能。
分布式优化扩展:
开发高效的分布式实现,解决参数服务器间的同步问题。
理论边界探索:
进一步分析在非凸和非光滑情况下的收敛行为。
在实际使用中,我发现NAMO-D对学习率的敏感度低于Adam,但初始化阶段需要更谨慎的监控。一个实用的技巧是在前1000步记录梯度范数和更新大小的比例,如果发现剧烈波动,应及时调整预热策略或ε值。