在将数据输入 ML/DL 模型之前对数据进行标准化有什么意义?
What is the significance of normalization of data before feeding it to a ML/DL model?
我刚开始学习深度学习,并且正在使用 Fashion MNIST 数据集。
作为预处理 X 标签、训练和测试图像的一部分,将像素值除以 255 作为输入数据规范化的一部分。
training_images = training_images/255.0
test_images = test_images/255.0
我理解这是将值缩小到 [0,1],因为神经网络在处理这些值时效率更高。但是,如果我尝试跳过这两行,我的模型会针对特定 test_image 预测出完全不同的结果。
为什么会这样?
让我们通过以下详细信息查看这两种情况。
1.使用非规范化数据:
由于您的网络的任务是学习如何通过一系列线性组合和非线性激活来组合输入,因此与每个输入相关的参数将存在于不同的尺度上。
不幸的是,这可能会导致一个笨拙的损失函数拓扑,它更加强调某些参数梯度。
或者在评论中提到的 Shubham Panchal 的简单定义中。
如果图像未归一化,则输入像素的范围为 [ 0 , 255 ]。这些将产生巨大的激活值(如果您使用的是 ReLU)。在前向传播之后,你最终会得到一个巨大的损失值和梯度。
2。使用标准化数据:
通过将我们的输入标准化为标准尺度,我们允许网络更快地学习每个输入节点的最佳参数。
此外,确保我们的输入大致在 -1 到 1 的范围内是很有用的,以避免与浮点数精度相关的奇怪的数学伪影。简而言之,计算机在对非常大或非常小的数字执行数学运算时会失去准确性。此外,如果您的输入和目标输出与典型的 -1 到 1 范围完全不同,则您的神经网络的默认参数(即学习率)可能不适合您的数据。在图像的情况下,像素强度范围受 0 和 1(均值 =0 和方差 =1)的约束。
我刚开始学习深度学习,并且正在使用 Fashion MNIST 数据集。 作为预处理 X 标签、训练和测试图像的一部分,将像素值除以 255 作为输入数据规范化的一部分。
training_images = training_images/255.0
test_images = test_images/255.0
我理解这是将值缩小到 [0,1],因为神经网络在处理这些值时效率更高。但是,如果我尝试跳过这两行,我的模型会针对特定 test_image 预测出完全不同的结果。 为什么会这样?
让我们通过以下详细信息查看这两种情况。
1.使用非规范化数据:
由于您的网络的任务是学习如何通过一系列线性组合和非线性激活来组合输入,因此与每个输入相关的参数将存在于不同的尺度上。
不幸的是,这可能会导致一个笨拙的损失函数拓扑,它更加强调某些参数梯度。
或者在评论中提到的 Shubham Panchal 的简单定义中。
如果图像未归一化,则输入像素的范围为 [ 0 , 255 ]。这些将产生巨大的激活值(如果您使用的是 ReLU)。在前向传播之后,你最终会得到一个巨大的损失值和梯度。
2。使用标准化数据:
通过将我们的输入标准化为标准尺度,我们允许网络更快地学习每个输入节点的最佳参数。
此外,确保我们的输入大致在 -1 到 1 的范围内是很有用的,以避免与浮点数精度相关的奇怪的数学伪影。简而言之,计算机在对非常大或非常小的数字执行数学运算时会失去准确性。此外,如果您的输入和目标输出与典型的 -1 到 1 范围完全不同,则您的神经网络的默认参数(即学习率)可能不适合您的数据。在图像的情况下,像素强度范围受 0 和 1(均值 =0 和方差 =1)的约束。