让我们考察正则化与优化工具集中的不同工具如何相互影响。如我们所见,正则化技术旨在提升模型泛化能力,主要是通过避免过拟合;而优化算法则致力于在训练过程中通过最小化损失函数来高效地找到良好参数。然而,训练深度学习模型的这两个方面并非相互独立;它们之间存在重要的联动。明白这些联动关系对于构建有效模型和解决训练问题很有帮助。
关联:为何技术之间并非孤立
可将训练过程视为在曲面(损失曲面)上行进以找到低点(良好模型参数)。优化算法决定我们如何在这一曲面上行进(所走路径、速度),而正则化技术则巧妙地重塑曲面本身或限制我们的移动,引导我们走向更宽广的谷底(更平坦的极小值点),这些通常对应着更好的泛化解。
因为它们都影响达到最终参数的路径,所以它们的效果是相互关联的。选择特定的正则化器可能会使某些优化器效果更好或更差,并且优化器的选择也能影响需要多少正则化或应如何配置。
权重正则化与优化相遇
L1和L2正则化根据模型权重的幅度向损失函数添加惩罚项。
总损失=原始损失(数据,权重)+λ×正则化项(权重)
这种添加直接改变了优化器在反向传播过程中使用的梯度。
- 对梯度的影响: 正则化项的梯度将权重推向零。对于L2正则化(权重衰减),惩罚项是2λ∣∣W∣∣22,其梯度是λW。这意味着权重更新包含一个减去权重本身一部分的项,因此得名“权重衰减”。对于L1正则化(λ∣∣W∣∣1),梯度贡献是λ⋅sign(W),鼓励稀疏性。
- 与优化器的联动:
- SGD和动量: 正则化梯度直接修改由SGD或动量计算的更新方向。L2衰减可以帮助引导这些较简单的优化器走向损失函数中更平滑、更平坦的区域,可能避免过拟合的尖锐极小值点。
- 自适应优化器(Adam, RMSprop): 这些优化器为每个参数调整学习率。L2正则化如何与它们结合使用很重要。许多库实现(例如PyTorch中Adam的
weight_decay参数)在自适应动量计算之后应用L2惩罚(通常称为“解耦权重衰减”)。这通常被认为比仅仅在Adam处理损失之前将L2梯度添加到损失中更有效。L1正则化由于其梯度在零点的不连续性,较少直接与Adam结合,尽管存在变体和相关方法。
- 调整λ和学习率: 由λ控制的正则化强度直接影响梯度修改的幅度。较大的λ会显著改变更新步长。因此,当你调整正则化强度时,最优学习率通常会变化。与弱正则化或无正则化模型相比,更强的正则化有时会允许,甚至需要,使用不同的学习率。
Dropout对优化路径的影响
Dropout在训练过程中通过以一定概率p临时将神经元激活设置为零来引入随机性。这不断改变优化器在每个小批量中看到的有效网络架构。
- 噪声梯度: 从优化角度来看,主要效果是Dropout使梯度估计更嘈杂。与不使用Dropout的训练相比,在一个小批量中计算的方向可能与下一个小批量的方向差异更大。
- 优化器响应:
- 自适应优化器: 像Adam和RMSprop这样的算法,它们保持过去梯度(或平方梯度)的移动平均,倾向于相对良好地处理这种噪声。平均操作有助于平滑由Dropout引起的波动。
- SGD/动量: 标准SGD可能对这种噪声更敏感。动量通过对梯度方向随时间进行平均来提供帮助,从而减轻一些不稳定性。然而,你可能会发现,当将Dropout与SGD或动量结合使用时,相比自适应方法,需要较低的学习率以防止过度震荡。
- 正则化方法: 由于Dropout本身是一种强正则化器,它通常减少对强L1/L2正则化的需求。你可能会发现,当Dropout活跃时,较低的权重衰减(λ)是最佳的。调整dropout率p和权重衰减λ时,通常应考虑它们的联合效应。
批量归一化:为优化器重塑
批量归一化(BN)为每个小批量标准化层输入,显著影响训练动态。
- 更平滑的优化: BN有助于减少内部协变量偏移,并且通常使损失更稳定。这意味着梯度更稳定和可预测,从而允许优化器采取更大、更自信的步长。
- 更高的学习率: 这是一个主要联动。BN通常使得可以使用显著更高的学习率,比没有它时可能达到的要高。这显著加速了收敛。像SGD与动量或Adam这样的优化器能变得更有效。
- 对初始化的敏感度降低: 由于BN归一化激活值,网络对权重初始尺度的敏感度降低。尽管仍然建议使用良好的初始化(如He或Xavier),但BN使得训练因不良初始化而失败的可能性降低。
- 隐式正则化: 在训练期间使用小批量统计数据(均值和方差)而非总体统计数据所引入的噪声,赋予BN轻微的正则化效果。这可能意味着你可以减少Dropout或L2衰减等其他显式正则化器的强度。
- 与其他技术的联动: 将BN与Dropout一起使用需要一些注意(我们将在“结合Dropout和批量归一化”一节中讨论)。BN层相对于激活函数和其他层的放置也很重要。尽管BN稳定激活值,但L2正则化仍然作用于权重本身,并且它们经常有效地结合使用。
找到合适的组合
主要结论是这些技术是相互关联的。
- 使用批量归一化通常允许使用更高的学习率,并且可能减少对强Dropout或L2的需求。
- 应用L2正则化会改变梯度,与Adam(通过
weight_decay)或SGD等优化器执行更新的方式产生联动。
- 采用Dropout引入噪声,自适应优化器能很好地处理这种噪声,但可能需要调低SGD/动量的学习率并潜在地降低L2强度。
这种相互依赖表明,调整超参数不仅仅是孤立地找到每个超参数的最佳值。你需要考虑它们的组合。改变优化器可能需要重新调整学习率和正则化参数。添加Dropout可能需要调整权重衰减。这使得随机搜索或贝叶斯优化等超参数搜索策略特别有价值,因为它们考察参数组合,而不是一次只改变一个。
明白这些关系有助于你形成直觉,从而理解为何某种技术组合可能效果良好,或为何模型的训练可能不稳定或缓慢。它指导你在设计、训练和调试深度学习模型时做出更明智的选择。