什么是 Xavier 初始化?

2025年6月20日 | 阅读 10 分钟

因此,初始化方法的差异会影响到具有良好收敛性和性能的数值稳定网络的训练。选择合适的初始化方案在模型训练过程中甚至其可行性方面都起着非常重要的作用。此外,选择初始化方法时,还可以考虑与所选非线性激活函数进行有意义的组合。另一个有趣的发现是,激活函数和参数初始化方法都会影响算法的运行速度。在本文中,我将深入探讨 Xavier 初始化是什么,以及为什么它在训练深度神经网络时如此重要。

Xavier 初始化

Xavier 初始化是一种权重初始化方法,对神经网络的训练非常有益。它的发音是“Glo-rot”,该方法由 Xavier Glorot 和 Yoshua Bengio 在 2010 年的一篇论文中提出。该方法可以帮助深度网络摆脱一些障碍。在其开创性的论文《理解深度前馈神经网络训练的挑战》中,Glorot 和 Bengio 探索了一种深度学习的经验法则:通过从 U (-1, 1) 中直接随机分配来初始化构成网络权重的元素。然后,这些权重除以 n 的平方根,其中 'n' 是输入数量。这些权重然后按 1 除以输入单元数量的平方根的因子进行缩放。

Xavier 初始化器的主要思想是,在通过 tanh 或 sigmoid 等函数进行前向和后向传播时,保持方差为相似的值。从而保持神经元之间方差的一致性,消除了诸如梯度消失或爆炸等问题。同样,当层之间的梯度大小方差保持几乎相同时,训练动态会保持稳定。因此,该技术通过根据每层的输入和输出来控制方差在一个适合不同激活函数的范围内,从而实现学习。

均匀 Xavier 初始化

在均匀 Xavier 初始化中,权重是从固定区间内随机选择的。此区间由以下公式确定:

What is Xavier Initialization?

其中

x 通过使用上述公式计算。

ninputs 是第一层的输入数量,即输入到神经网络的层的输入数量。

noutputs 是输出层的输出数量。

对于每个权重 w,从中选择一个均匀分布在 [-x, x] 之间的随机数。

这种方法有助于控制初始权重的方差,使其适合有效训练。

正态 Xavier 初始化

正态 Xavier 初始化通过从具有均值为 0 和特定标准差的高斯分布中抽取值来设置初始权重,该标准差由下式给出:

What is Xavier Initialization?

ninputs 是输入层中的输入数量。

Noutputs 是神经网络输出层中的节点数量。

变量 w 呈正态分布,均值为 0,方差为 σ。此方法根据层的大小改变权重的比例,以确保网络的激活值是合理的。

至于高斯 Xavier 初始化和均匀 Xavier 初始化之间的选择,这取决于所使用的网络拓扑结构和激活函数。

权重初始化的重要性

  1. 梯度消失和爆炸
    正如我们在上面的解释中所看到的,梯度消失问题是指在深度网络中,梯度变得非常小,导致学习缓慢。然而,梯度爆炸问题是由极大的梯度引起的,这会导致网络训练不稳定,甚至可能发散。这两种情况都可能对深度神经网络的成功训练造成问题。
  2. 过拟合
    构建深度神经网络的另一个缺点是过拟合,因为这些模型具有很强的详细学习能力。权重初始化虽然间接有助于减少过拟合,但正确的初始化使得初始权重变得合理,进而导致梯度消失和神经元饱和。
  3. 饱和度
    饱和是指当激活函数的输出值非常接近其极限时,梯度接近于零,从而对输入变化不敏感。适当的权重初始化有助于保持激活值的平衡,防止饱和及相关的梯度问题。

Python 实现

在本节中,我们将使用 TensorFlow 和 Keras API,通过 Python 代码构建一个基本的反馈神经网络。在权重初始化网络中,应用 Xavier 初始化(Glorot 初始化),并且在隐藏层中使用的激活函数是双曲正切(tanh)。输出层应用的激活函数是 Softmax。

代码步骤

  • 导入必要的库
    导入 TensorFlow、Keras 层以及创建和训练神经网络所需的模块,以及 MNIST 数据集。
  • 加载和预处理数据集
    加载 MNIST 数据集,并通过除以 255 来归一化像素值。
  • 定义神经网络架构
    添加一个 Flatten 层,将 28×28 的图像重塑为一维数组。添加两个隐藏层,分别具有 128 和 64 个单元、ReLU 激活和 Xavier 初始化。添加一个输出层,具有 10 个单元(对应每个类)和 Softmax 激活,并采用 Xavier 初始化。
  • 编译模型
    使用 Adam 优化器、稀疏分类交叉熵损失函数以及准确率作为评估指标来编译模型。
  • 训练模型
    在训练数据上训练模型 10 个 epoch,并在测试数据上进行验证。
  • 评估模型
    在测试集上评估模型并打印准确率。

代码

输出

Epoch 1/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 17s 7ms/step - accuracy: 0.8781 - loss: 0.4221 - val_accuracy: 0.9650 - val_loss: 0.1178
Epoch 2/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 14s 8ms/step - accuracy: 0.9671 - loss: 0.1073 - val_accuracy: 0.9719 - val_loss: 0.0909
Epoch 3/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9791 - loss: 0.0699 - val_accuracy: 0.9744 - val_loss: 0.0888
Epoch 4/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9837 - loss: 0.0528 - val_accuracy: 0.9769 - val_loss: 0.0752
Epoch 5/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9876 - loss: 0.0385 - val_accuracy: 0.9769 - val_loss: 0.0826
Epoch 6/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9906 - loss: 0.0294 - val_accuracy: 0.9750 - val_loss: 0.0897
Epoch 7/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9908 - loss: 0.0274 - val_accuracy: 0.9776 - val_loss: 0.0897
Epoch 8/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9927 - loss: 0.0208 - val_accuracy: 0.9740 - val_loss: 0.1045
Epoch 9/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9935 - loss: 0.0193 - val_accuracy: 0.9766 - val_loss: 0.0967
Epoch 10/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9951 - loss: 0.0144 - val_accuracy: 0.9783 - val_loss: 0.1012
313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step - accuracy: 0.9741 - loss: 0.1212
Test accuracy: 97.83%

Xavier 初始化在 Sigmoid 和 Tanh 激活函数上的应用

Sigmoid 激活函数

  • Sigmoid 激活函数将输入值压缩到 [0, 1] 的范围内,这会导致梯度很小,尤其是对于远离零的输入。
  • 在反向传播中,小的导数会导致梯度消失,当初始权重太大时,会使训练变得困难。
  • Xavier 初始化使用一个因子 2 来设置适当的权重方差。这可以防止梯度快速消失,通过保持不过度减小的梯度来实现高效的反向传播。

Tanh 激活函数

  • tanh 函数将输入映射到 -1 和 1 之间的范围,对于远离零的输入会导致小的导数,这与 sigmoid 函数类似。
  • 如果没有控制的权重初始化,可能会出现小的梯度,阻碍反向传播,因为梯度会消失。
  • Xavier 初始化中的因子 2 有助于通过提供方差控制来平衡这一点,使权重对于 tanh 函数的梯度保持最优,从而提高平稳训练而不会出现梯度消失的可能性。

实际应用

Xavier 初始化是深度神经网络训练中的一个重要参数,用于许多领域的复杂应用。它通过为训练目的提供适当的权重尺度来减少诸如梯度消失或爆炸之类的问题,作为一种风险预防措施。

在图像分类中,Xavier 初始化被用于医疗保健、自动驾驶汽车、监控等领域的卷积神经网络(CNN)中,因为它能够保持深度网络中权重的适当分布。例如,在医学图像分析中,例如区分 X 射线图像中的肿瘤和模糊,Xavier 初始化可以帮助网络尽早收敛,从而从复杂的图像数据中获得准确的预测。

在语音识别(积极应用于 Alexa 和 Siri 等个性化助手)中,深度模型(包括 LSTM 和 RNN 类型)在顺序数据(声音形式)上进行训练。Xavier 初始化确保这些模型能够有效地学习,并且不会遇到与梯度相关的挑战。例如,在客户服务自动化中,通过适当的权重初始化,可以实现模型识别语音、口音和命令所需的能力,从而加快学习过程。

在 Netflix 和 Amazon 等推荐系统中,智能推荐系统试图学习复杂的用户-物品交互。Xavier 初始化在训练 Neural Collaborative Filtering (NCF) 等模型时使用,这在某种程度上可以帮助进行推荐。这意味着当前复杂的系统被设置为能够处理海量数据,进而学习人们独特的喜好和厌恶。

此外,在自然语言处理任务(如情感分析和机器翻译)中,Transformer 和 LSTM 被使用,Xavier 初始化被用于处理序列数据集。例如,Xenoz 被用于 GPT 模型进行文本生成,因为 Xavier 初始化对于学习语言模式以用于自动文本生成和客户服务至关重要。

Xavier 初始化在金融建模中可以防止深度学习模型在用于分析交易数据或预测市场趋势以检测欺诈活动(如欺诈检测所需)时出现收敛不良的问题。

Xavier 初始化中的挑战

尽管 Xavier 初始化是使神经网络训练更稳定的非常有效的策略,但它的一些问题限制了其使用,并且该技术固有的某些复杂性,尤其是在电路层数更多或规模更大时。

当网络架构非常深时,会出现主要困难之一。然而,即使使用 Xavier 初始化,随着网络深度的增加,在反向传播期间遇到的梯度要么变得非常小(梯度消失),要么变得非常大(梯度爆炸)。这会导致收敛缓慢或完全无法训练网络。在非常深的网络中,初始化可能无法为梯度下降算法提供足够的控制,从而减慢速度,即使权重最初被正确缩放。

这里的缺点是,当输入数据的方差很大时,特征映射同样会非常高。在这种情况下,初始权重可能被选择为导致激活完全饱和,梯度变得太大,从而阻止了稳定的训练。即使 Xavier 初始化非常适合不同类型的激活函数(如 sigmoid 或 tanh),这些函数在输入数据方差很大或具有深度网络的情况下仍然存在其缺点。它可能导致知识获取过程中的停滞或效率低下。

为了解决这些挑战,He 初始化可以更适合广泛使用ReLU 激活的网络,因为它在梯度饱和方面不会遇到太多问题,同时又能很好地进行适当的初始化。He 初始化根据输入数量缩放权重,但使用不同的因子,这实际上解决了深度学习中的一个主要问题,即梯度消失或爆炸。

此外,批量归一化(batch normalization)的应用在很大程度上有助于稳定训练过程。批量归一化可以在参数初始化不当或输入数据变化很大的情况下保持网络的稳定性。该技术可以确保网络中激活和梯度的发生保持平衡,提高收敛速度。

结论

Xavier 初始化是一种通过提供适当的权重初始估计值来帮助稳定和改进神经网络训练的方法。GLOROT 初始化器(Gualitas and Bengious)- 该方法应用了一种巧妙的基于方差的权重初始化方法,取决于架构的大小、中间层的数量,您可以设置一个函数来遵循实现这些权重初始化。Xavier 初始化专门为使用 sigmoid 和 tanh 等激活函数的深度网络设计,通过解决梯度消失和爆炸问题来实现有效的梯度传播。

这种初始化权重的方法不仅能够训练更深的网络,还有助于防止过拟合、饱和和不稳定性。虽然这两种方法都有助于实现高效、稳定的学习,并且可以根据特定的网络架构和激活类型在实践中进行选择,但实际上,均匀或正态 Xavier 初始化都可以灵活有效地使用。


下一主题