初始化深度学习模型的权重

为了构建一个能够准确分类数据样本并在测试数据上表现良好的分类器,你需要以模型能够良好收敛的方式初始化权重。通常我们会随机化权重。但当我们使用均方误差(MSE)作为逻辑回归模型的损失进行训练时,有时可能会遇到一些问题。在深入细节之前,请注意,这里使用的方法也适用于逻辑回归以外的分类模型,并且将在后续的教程中使用。

如果权重以适当的区域初始化,我们的模型就可以很好地收敛。但是,如果我们从一个不利的区域开始模型的权重,我们可能会看到模型难以收敛或收敛速度非常慢。在本教程中,你将学习到,如果你使用 MSE 损失并且模型权重被不利地初始化,模型训练会发生什么。特别是,你将学到

  • 不良的初始化如何影响逻辑回归模型的训练。
  • 如何使用 PyTorch 训练逻辑回归模型。
  • 具有 MSE 损失的糟糕初始化权重如何显著降低模型的准确性。
  • 那么,让我们开始吧。

通过我的《用PyTorch进行深度学习》一书来启动你的项目。它提供了包含可用代码自学教程


让我们开始吧。

深度学习模型初始化权重。
图片来源:Priscilla Serneo。保留部分权利。

概述

本教程分为三个部分;它们是

  • 准备数据和构建模型
  • 模型权重初始值的影响
  • 合适的权重初始化

准备数据和构建模型

首先,让我们准备一些合成数据用于训练和评估模型。

数据将基于单个变量预测值为 0 或 1。

有了这个Dataset类,我们可以创建一个数据集对象。

现在,让我们使用nn.Module为我们的逻辑回归模型构建一个自定义模块。正如我们在之前的教程中所解释的,你将使用nn.Module包中的方法和属性来构建自定义模块。

我们将创建一个逻辑回归模型对象,如下所示。

想开始使用PyTorch进行深度学习吗?

立即参加我的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

模型权重初始值的影响

为了证明这一点,让我们将随机初始化的模型权重替换为其他值(或预设的糟糕值),这些值将不允许模型收敛。

输出结果为:

如你所见,随机初始化的参数已被替换。

你将使用随机梯度下降来训练这个模型,并将学习率设置为 2。由于你要检查带有 MSE 损失的糟糕初始化值可能对模型性能产生的影响,你将设置此标准来检查模型损失。在训练中,数据由具有 2 个批次大小的数据加载器提供。

现在,让我们为模型训练 50 个 epoch。

在模型训练期间,您将看到每个 epoch 的进度

正如你所看到的,训练过程中的损失保持不变,没有任何改进。这表明模型没有在学习,并且在测试数据上的表现不会很好。

我们还将可视化模型训练的图表。

您应该看到以下内容:图表也告诉我们同样的故事,即在训练过程中模型损失没有发生任何变化或减少。

虽然我们的模型在训练中表现不佳,但让我们获取测试数据的预测并衡量模型的总体准确性。

这给出

模型的准确率仅为 57% 左右,这并不符合你的预期。这就是带有 MSE 损失的糟糕初始化权重可能对模型准确率产生的影响。为了减少这个错误,我们应用最大似然估计和交叉熵损失,这将在下一个教程中介绍。

把所有东西放在一起,下面是完整的代码。

合适的权重初始化

默认情况下,PyTorch 的初始化权重应该能让模型正常工作。如果你修改上面的代码,注释掉训练前覆盖模型权重的两行并重新运行,你应该会看到结果效果相当好。上面它之所以工作得很糟糕,是因为权重离最优权重太远,并且在逻辑回归问题中使用了 MSE 作为损失函数。

像随机梯度下降这样的优化算法的性质并不能保证它在所有情况下都能工作。为了让优化算法找到解决方案,即模型收敛,最好使模型权重位于解决方案的邻近区域。当然,在模型收敛之前我们不知道邻近区域在哪里。但研究发现,我们应该优先设置权重,使得在样本数据的批次中,

  • 激活的平均值为零
  • 激活的方差与层输入的方差相当

一种流行的方法是使用 Xavier 初始化来初始化模型权重,即根据均匀分布 $U[-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}]$ 随机设置权重,其中 $n$ 是层输入的数量(在本例中为 1)。

另一种方法是标准化 Xavier 初始化,即使用分布 $U[-\sqrt{\frac{6}{n+m}}, \sqrt{\frac{6}{n+m}}]$,其中 $n$ 和 $m$ 是层输入和输出的数量。在本例中,两者都为 1。

如果我们希望不使用均匀分布,He 初始化建议使用均值为 0、方差为 $\sqrt{2/n}$ 的高斯分布。

您可以在这篇博文中了解更多关于权重初始化的信息:深度学习神经网络的权重初始化

总结

在本教程中,您了解了糟糕的权重如何降低模型性能。特别是,您了解了

  • 不良的初始化如何影响逻辑回归模型的训练。
  • 如何使用 PyTorch 训练逻辑回归模型。
  • 带有 MSE 损失的糟糕初始化权重值如何显著降低模型的准确性。

开始使用PyTorch进行深度学习!

Deep Learning with PyTorch

学习如何构建深度学习模型

...使用新发布的PyTorch 2.0库

在我的新电子书中探索如何实现
使用 PyTorch进行深度学习

它提供了包含数百个可用代码自学教程,让你从新手变成专家。它将使你掌握:
张量操作训练评估超参数优化等等...

通过动手练习开启你的深度学习之旅


查看内容

初始化深度学习模型的权重 的 2 条回复

  1. Edu 2023年1月13日晚上9:57 #

    你好 Muhammad
    教程很好,非常清晰。

    只是有一个问题。训练之后你说
    “虽然我们的模型在训练中表现不佳,但让我们获取测试数据的预测并衡量模型的总体准确性。”

    但看起来你又预测了训练数据(data_set.x),因为我在示例中看不到测试数据。
    是我有什么地方没理解吗?
    祝好

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。