1. 首页
  2. 机器学习

深度学习神经网络的权重初始化

在开发深度学习神经网络模型时,权重初始化是重要的设计选择。

从历史上看,权重初始化涉及使用小的随机数,尽管在过去的十年中,已经开发出了使用信息的更具体的启发式方法,例如正在使用的激活函数的类型和节点的输入数量。

这些更有针对性的试探法可以使用随机梯度下降优化算法对神经网络模型进行更有效的训练。

在本教程中,您将发现如何为深度学习神经网络实现权重初始化技术。

完成本教程后,您将知道:

  • 权重初始化用于定义神经网络模型中参数的初始值,然后再在数据集中训练模型。
  • 如何实现用于使用Sigmoid或Tanh激活函数的节点的xavier和规范化的xavier权重初始化试探法。
  • 如何实现用于使用ReLU激活功能的节点的权重初始化启发式方法。

本教程分为三个部分:他们是:

  1. 神经网络的权重初始化
  2. Sigmoid和Tanh的权重初始化
    1. Xavier权重初始化
    2. 规范化的Xavier权重初始化
  3. ReLU的权重初始化

神经网络的权重初始化

权重初始化是神经网络模型设计中的重要考虑因素。

神经网络中的节点由称为权重的参数组成,这些权重用于计算输入的加权和。

使用称为随机梯度下降的优化算法对神经网络模型进行拟合,该算法可逐步改变网络权重以最小化损失函数,从而有望为该模式产生一组权重,从而能够做出有用的预测。

该优化算法需要在可能的权重值空间中的一个起点,从该起点开始优化过程。权重初始化是将神经网络的权重设置为较小的随机值的过程,这些值定义了神经网络模型的优化(学习或训练)的起点。

每次,神经网络都会使用不同的权重集进行初始化,从而导致优化过程的起点不同,并可能最终导致具有不同性能特征的权重最终不同。

我们无法将所有权重初始化为值0.0,因为优化算法会导致误差梯度出现一些不对称,从而开始有效搜索。

从历史上看,权重初始化遵循简单的试探法,例如:

  • 较小的随机值,范围为[-0.3,0.3]
  • 较小的随机值,范围为[0,1]
  • 较小的随机值,范围为[-1,1]

这些启发式方法总体上仍然可以很好地发挥作用。

然而,在过去的十年中,已经开发了更多的定制方法,这些方法已成为事实上的标准,因为它们可能导致稍微更有效的优化(模型训练)过程。

这些现代权重初始化技术是根据要初始化的节点中使用的激活函数的类型进行划分的,例如“ Sigmoid and Tanh ”和“ ReLU”

接下来,让我们仔细研究一下具有Sigmoid和Tanh激活函数的节点的这些权重初始化启发式方法。

Sigmoid和Tanh的权重初始化

当前用于初始化使用Sigmoid或TanH激活函数的神经网络层和节点权重的标准方法称为“ glorot”或“ xavier ”初始化。

它以Xavier Glorot的名字命名,Xavier Glorot是目前Google DeepMind的研究科学家,在Xavier和Yoshua Bengio在2010年的论文中名为“了解深度前馈神经网络的训练难度”进行了描述。

该权重初始化方法有两种版本,我们将其称为“ xavier ”和“规范化的xavier”

Glorot和Bengio建议采用适当缩放的均匀分布进行初始化。这称为“ Xavier”初始化[…]。其派生基于激活是线性的假设。该假设对ReLU和PReLU无效。

—深入研究整流器:ImageNet分类超越人类水平的性能,2015年。

假设激活函数是线性的,两种方法都是推导出来的,尽管如此,它们已成为Sigmoid和Tanh等非线性激活函数的标准,但不是ReLU。

让我们依次仔细研究每个对象。

Xavier权重初始化

xavier初始化方法被计算为在-(1 / sqrt(n))和1 / sqrt(n)之间具有均匀概率分布(U)的随机数,其中n是节点的输入数。

  • 权重= U [-(1 / sqrt(n)),1 / sqrt(n)]

我们可以直接在Python中实现。

下面的示例假定一个节点有10个输入,然后计算范围的上限和下限,并计算出1000个初始权重值,这些权重值可用于使用S型或tanh激活函数的层或网络中的节点。

在计算权重之后,将打印上下限,以及生成的权重的最小值,最大值,平均值和标准偏差。

下面列出了完整的示例。

运行示例将生成权重并打印摘要统计信息。

我们可以看到权重值的边界大约为-0.316和0.316。输入越少,界限越宽;输入越多,界限越窄。

我们可以看到生成的权重遵守这些界限,并且平均权重值接近于零,标准偏差接近于0.17。

它还有助于查看权重的分布如何随输入数量变化。

为此,我们可以使用从1到100的不同输入数量来计算权重初始化的界限,并绘制结果。

下面列出了完整的示例。

运行示例将创建一个绘图,使我们能够比较权重范围与不同数量的输入值。

我们可以看到,只有很少的输入,范围很大,例如在-1和1或-0.7到-7之间。然后,我们可以看到我们的范围迅速下降到约20个权重,接近-0.1和0.1,并在此范围内保持恒定。

输入从一百到一百的哈维尔权重初始化的范围图

输入从一百到一百的哈维尔权重初始化的范围图

规范化的Xavier权重初始化

归一化的xavier初始化方法被计算为在-(sqrt(6)/ sqrt(n + m))和sqrt(6)/ sqrt(n + m)范围之间具有均匀概率分布(U)的随机数,其中n是节点的输入数(例如,上一层中的节点数),m是该层的输出数(例如,当前层中的节点数)。

  • 权重= U [-(sqrt(6)/ sqrt(n + m)),sqrt(6)/ sqrt(n + m)]

我们可以像在上一节中一样直接在Python中实现此功能,并汇总1,000个生成的权重的统计摘要。

下面列出了完整的示例。

运行示例将生成权重并打印摘要统计信息。

我们可以看到权重值的边界大约为-0.447和0.447。输入越少,界限越宽;输入越多,界限越窄。

我们可以看到生成的权重遵守这些界限,并且平均权重值接近于零,标准偏差接近于0.17。

它还有助于查看权重的分布如何随输入数量变化。

为此,我们可以使用从1到100的不同输入数和固定数量的10个输出来计算权重初始化的范围,并绘制结果。

下面列出了完整的示例。

运行示例将创建一个绘图,使我们能够比较权重范围与不同数量的输入值。

我们可以看到,输入很少时,范围从-0.3到0.3宽,随着输入数量的增加减小到-0.1到0.1。

与上一节中的非标准化版本相比,该范围最初较小,尽管以相似的速率过渡到紧凑型范围。

输入从一百到一百的归一化Xavier权重初始化的范围图

输入从一百到一百的归一化Xavier权重初始化的范围图

ReLU的权重初始化

发现“ xavier ”权重初始化在用于初始化使用整流线性(ReLU)激活函数的网络时会出现问题。

因此,该方法的改进版本专门针对使用ReLU激活的节点和层而开发,这种方法在大多数多层感知器和卷积神经网络模型的隐藏层中都很流行。

当前用于初始化使用整流线性(ReLU)激活函数的神经网络层和节点权重的标准方法称为“ he”初始化。

它以目前在Facebook上的研究科学家何凯明(Kaiming He)的名字命名,并在2015年由Kaiming He等人在论文中进行了描述。标题为“深入研究整流器:在ImageNet分类上超越人类水平的性能。”

他体重初始化

初始化方法被计算为一个随机数,其随机数的平均值为0.0,标准偏差为sqrt(2 / n),其中n是节点的输入数。

  • 重量= G(0.0,sqrt(2 / n))

我们可以直接在Python中实现。

下例假设一个节点有10个输入,然后计算高斯分布的标准偏差,并计算出1,000个初始权重值,这些权重值可用于使用ReLU激活功能的层或网络中的节点。

在计算权重之后,将计算出的标准偏差打印为所产生的权重的最小值,最大值,平均值和标准偏差。

下面列出了完整的示例。

运行示例将生成权重并打印摘要统计信息。

我们可以看到,计算出的权重标准偏差的范围约为0.447。输入较少时此标准偏差将变大,输入较多时此标准偏差将变小。

我们可以看到权重范围约为-1.573至1.433,接近理论范围约为-1.788和1.788,这是标准偏差的四倍,在高斯分布中捕获了99.7%的观测值。我们还可以看到生成的权重的平均值和标准偏差分别接近规定的0.0和0.447。

它还有助于查看权重的分布如何随输入数量变化。

为此,我们可以使用从1到100的不同输入数量来计算权重初始化的界限,并绘制结果。

下面列出了完整的示例。

运行示例将创建一个绘图,使我们能够比较权重范围与不同数量的输入值。

我们可以看到,只有很少的输入,范围很大,接近-1.5和1.5或-1.0到-1.0。然后,我们可以看到我们的范围迅速下降到约20个权重,接近-0.1和0.1,并在此范围内保持恒定。

输入从一百到一百的氦气重量初始化范围图

输入从一百到一百的氦气重量初始化范围图

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code