趋近智
构建和训练模型时,可能会遇到一个常见的问题:模型在训练数据上表现优异,但在面对新的、未见过的数据时,性能会显著下降。这种现象称为过拟合 (overfitting),它表明模型学习了训练数据的噪声和特定细节,而非数据中普遍的规律。正则化 (regularization)技术旨在对抗过拟合,帮助模型更好地适应新数据。深度学习 (deep learning)中两种常用的正则化方法是Dropout和权重 (weight)衰减(常被称为正则化)。
在讨论解决方案之前,我们先来看看过拟合是什么样子。当模型发生过拟合时,它本质上是在记忆训练集。它的容量过高,或者在相同数据上训练了过长时间,以至于开始学习训练样本中存在的随机波动。这会导致模型过于复杂,无法在未见过的数据上表现良好。
下面的图表描绘了过拟合模型与经过良好正则化 (regularization)的模型在训练和验证损失方面的典型表现。
训练和验证损失曲线的表现。当训练损失持续下降而验证损失开始上升时,就会发生过拟合。正则化的目标是使两种损失都保持较低水平并趋于收敛。
请注意过拟合模型的验证损失在某个点之后开始增加,即使其训练损失持续下降。而正则化模型则倾向于在训练和验证损失之间表现出更好的吻合度,或者至少验证损失会稳定在较低的值。
Dropout是一种由Srivastava等人(2014)提出的简单而有效的正则化 (regularization)技术。在每次训练迭代中,Dropout会随机将层中一部分神经元的输出设置为零。这种神经元的“丢弃”会在每个训练批次中轻微改变网络架构。
这为什么有帮助?
在Flux.jl中的实现
Flux.jl提供了Dropout(p)层,其中p是在训练期间每个神经元输出被设置为零的概率。它通常插入到模型的其他层之间,常用于全连接层中的激活函数 (activation function)之后。
using Flux
# 定义一个包含Dropout的模型
model = Chain(
Dense(784, 256, relu),
Dropout(0.5), # 以50%的概率应用dropout
Dense(256, 128, relu),
Dropout(0.3), # 以30%的概率应用dropout
Dense(128, 10)
)
在训练期间,Flux会自动启用dropout。当您评估模型时(例如,在训练循环之外使用model(x)或显式调用Flux.testmode!),dropout会自动禁用,并且层输出会进行适当缩放,以弥补训练期间被丢弃的神经元。这种缩放确保了下一层输入的预期总和在训练和推理 (inference)期间保持一致。具体来说,剩余活跃神经元的输出会按的因子进行放大。
Dropout率p是一个您需要调整的超参数 (parameter) (hyperparameter)。常见值范围从0.2到0.5。更高的p意味着更强的正则化。
权重衰减,也称为正则化,是另一种预防过拟合 (overfitting)的常用方法。它通过向模型的损失函数 (loss function)添加一个惩罚项来起作用。这个惩罚项与模型权重的平方和成比例。
修改后的损失函数变为:
这里,是原始损失(例如,交叉熵或均方误差),是模型中的单个权重,而(lambda)是正则化强度或权重衰减系数。通常包含因子是为了在求导时方便计算。
这为什么有帮助?
在Flux.jl中的实现
在Flux.jl中,权重衰减通常作为优化器的一部分应用。Optimiser结构体可以将现有优化器与WeightDecay组件进行封装。
using Flux
using Flux: Optimise
# 原始优化器
opt_rule = Adam(0.001) # 学习率为0.001
# 添加权重衰减
lambda = 0.01 # 权重衰减系数
opt = Optimiser(opt_rule, WeightDecay(lambda))
# 示例模型
model = Dense(10, 5)
ps = Flux.params(model)
gs = gradient(() -> Flux.mse(model(rand(10)), rand(5)), ps)
# 使用带有权重衰减的优化器更新参数
Flux.update!(opt, ps, gs)
在此设置中,在参数 (parameter)更新步骤期间,优化器不仅会沿着使最小化的方向移动参数,还会由于惩罚项而隐含地减小权重的幅度。惩罚项对权重的梯度是。因此,更新规则实际上变为,这会导致权重趋向于零。
权重衰减系数是一个超参数 (hyperparameter)。典型值很小,例如、或。找到合适的值通常需要实验。
Dropout和权重 (weight)衰减都是提升模型泛化能力的有效手段。
同时使用这两种技术也是可能的,有时甚至有益。每种技术的最佳强度(dropout概率p和权重衰减系数)将取决于您的特定数据集和模型架构。这些都是超参数 (parameter) (hyperparameter),您通常会使用验证集进行调整,我们将在讨论超参数调整策略时更详细地介绍这个话题。
应用正则化时,监控训练和验证性能都很重要。
p值,增大权重衰减的)。通过谨慎地应用Dropout和权重衰减等正则化技术,您可以在Julia中构建深度学习 (deep learning)模型,这些模型不仅在已见过的数据上表现良好,也能在新的、未见过的数据上表现出色。这是构建可靠且高效机器学习 (machine learning)方案的重要一步。
这部分内容有帮助吗?
Dropout层的官方文档,详细说明了其在Julia深度学习模型中的用法和参数。WeightDecay的官方文档,展示了其在训练过程中的集成方式。© 2026 ApX Machine Learning用心打造