1. 在本节的估计问题中使用 的值进行实验。绘制训练和测试精度关于 的函数。观察到了什么?
for wd in range(0, 800, 100):
print(f'weight decay: {wd}')
train_concise(wd)
2. 使用验证集来找到最佳值 。它真的是最优值吗?这有关系吗?
for wd in range(500, 560, 10):
print(f'weight decay: {wd}')
train_concise(wd)
5. 回顾训练误差和泛化误差之间的关系。除了权重衰减、增加训练数据、使用适当复杂度的模型之外,还能想出其他什么方法来处理过拟合?
训练误差和泛化误差之间的关系是机器学习中的一个核心问题。训练误差通常指的是模型在训练数据集上的表现,而泛化误差则是指模型在未见过的数据上的表现。理想情况下,我们希望模型在训练集上有较低的训练误差,在新数据上也有较低的泛化误差。然而,经常出现的情况是,模型在训练集上表现很好(即训练误差低),但在新数据上表现不佳(即泛化误差高),这种现象称为过拟合。
除了权重衰减(正则化)、增加训练数据、使用适当复杂度的模型这些常见的方法之外,还有许多其他技术可以用来处理过拟合:
-
交叉验证:将数据集分成多个小的部分,使用其中的一部分作为验证集,其余作为训练集,重复这个过程多次并计算模型的平均性能。
-
早停(Early Stopping):在训练过程中,如果在验证集上的性能不再提升,就停止训练,以避免过拟合。
-
集成方法:如随机森林或梯度提升树,通过组合多个模型的预测来提高泛化能力。
-
数据增强:通过对训练数据进行变换(如旋转、缩放、裁剪等)来增加数据的多样性。
-
dropout:在训练神经网络时随机丢弃(置零)一些神经元的输出,以增加模型的鲁棒性。
-
批量归一化(Batch Normalization):在训练深度神经网络时,对每个批次的数据进行归一化处理,有助于减少内部协变量偏移,从而提高泛化能力。
-
学习率衰减:随着训练的进行逐渐减小学习率,有助于模型在训练后期稳定下来,避免过度拟合训练数据的细节。
-
使用预训练模型:在一些任务中,使用在大型数据集上预训练的模型,并在特定任务上进行微调,可以提高泛化能力。
-
正则化变体:除了 ( L2 ) 正则化外,还可以使用 ( L1 ) 正则化、弹性网(Elastic Net)正则化等,这些方法通过惩罚不同的权重组合来减少过拟合。
-
模型选择:使用模型选择技术,如贝叶斯优化,来找到最佳的模型超参数。
-
集成学习:使用多个不同的模型或算法,并将它们的预测结果进行集成,以提高泛化性能。
-
损失函数的修改:设计损失函数时考虑泛化性能,例如使用 focal loss 来关注难以分类的样本。
-
对抗性训练:通过在训练过程中引入对抗性样本来提高模型的鲁棒性。
-
注意力机制:在神经网络中使用注意力机制来帮助模型集中于输入数据中最重要的部分。
-
使用验证集:在训练过程中使用单独的验证集来监控模型的泛化性能,并据此调整模型复杂度或正则化参数。
每种方法都有其适用的场景和优缺点,通常需要根据具体问题和数据集的特点来选择最合适的方法。在实践中,这些方法可以结合使用,以达到更好的泛化效果。
6. 在贝叶斯统计中,我们使用先验和似然的乘积,通过公式 得到后验。如何得到带正则化的?
在贝叶斯统计中,为了将正则化纳入模型,我们可以对先验分布 进行修改。常用的方法之一是使用正则化先验,例如:
- 高斯先验: ,其中 λ 是正则化系数,控制模型复杂度。
- 拉普拉斯先验: , 其中 λ 是正则化系数,控制模型参数的稀疏性。
使用正则化先验后,后验分布变为:
其中,
- P(x∣w) 是似然函数,表示在给定模型参数 w 的情况下,观察到数据 x 的概率。
- λ 是正则化系数,控制模型的复杂度或参数的稀疏性。
通过使用正则化先验,我们可以将正则化信息纳入贝叶斯模型,从而得到具有更好泛化能力的模型。
需要注意的是,正则化先验的选择会影响模型的最终结果。 在实际应用中,需要根据具体问题选择合适的正则化先验和正则化系数。
以下是一些使用正则化先验的贝叶斯模型示例:
- 岭回归: 岭回归使用高斯先验作为模型参数的先验分布,并通过正则化系数 λ 控制模型的复杂度。
- 套索回归: 套索回归使用拉普拉斯先验作为模型参数的先验分布,并通过正则化系数 λ 控制模型参数的稀疏性。
- 弹性网络: 弹性网络使用结合了 L1 和 L2 正则化的先验分布作为模型参数的先验分布。
总而言之,正则化先验是一种有效的正则化方法,可以用于贝叶斯统计中。通过使用正则化先验,我们可以将正则化信息纳入模型,从而得到具有更好泛化能力的模型。