自学内容网 自学内容网

批归一化(BN)在神经网络中的作用与原理


1. 批归一化(BN)在神经网络中的作用与原理

1.1 作用与优势

批归一化(Batch Normalization,BN)是一种用于神经网络的技术,通过对每个训练批次的输入进行归一化,加速了神经网络的训练过程。它的作用主要体现在以下几个方面:

  • 加速收敛:通过归一化输入特征值,减少了网络训练的迭代次数,加快了收敛速度。
  • 改善梯度传播:缓解了梯度消失和爆炸问题,使得深层网络的训练更加稳定。
  • 提高泛化能力:降低了网络对超参数的敏感度,提高了模型的泛化能力。

这其实就是一个问题——把学习问题的轮廓,从很长的东西,变成更圆的东西,变得更易于算法优化。

在这里插入图片描述

1.2 原理与推导

BN的核心思想是对每个特征进行归一化,以使其均值接近于0,方差接近于1。其具体过程如下:

  • 对于每个训练批次,计算该批次输入的均值和方差。
  • 使用得到的均值和方差对输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,使网络能够学习适应不同数据分布的特征。

数学公式如下:
在这里插入图片描述
所以现在 值已经被标准化了(平均值0和标准单位方差),但我们不想让隐藏单元总是如此,也许隐藏单元有了不同的分布会有意义,所以一个很牛的计算是:

其中 和 是模型需要学习的参数,请注意 和 的作用,是无论如何随意设置 的平均值,事实上,如果 ,如果 等于这个分母项( 中的分母), 等于 ,这里的 中的 ,那么 的作用在于,它会精确转化这个方程,如果这些成立(),那么 。

归一化输入特征 是有助于神经网络中的学习的,批归一化(BN) 的作用是一个适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。

有了 和 两个参数后,就可以确保所有的 值都是想赋予的值,或者是保证隐藏的单元已使均值和方差标准化,即 无论数据归一化计算时出现多大问题,通过参数都可以调整回来。

2. 将BN应用于神经网络的方法

2.1 训练时的BN

在训练时,BN的操作如下:

  • 对每个训练批次进行正向传播,并计算均值和方差。
  • 使用计算得到的均值和方差对批次输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,调整归一化后的值。
  • 在反向传播时,根据梯度更新参数。

2. 将BN应用于神经网络的方法

2.1 训练时的BN

在训练时,BN的操作如下:

  • 对每个训练批次进行正向传播,并计算均值和方差。
  • 使用计算得到的均值和方差对批次输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,调整归一化后的值。
  • 在反向传播时,根据梯度更新参数。

数学公式
设输入的批次为 ( X = {x_1, x_2, ..., x_m} ),其中 (m) 是批次大小。则批次的均值 ( \mu ) 和方差 ( \sigma^2 ) 分别计算如下:
上面这些公式都是用来执行 BN。在一个 mini-batch 中,

先对 值求和,计算均值,所以这里只把一个 mini-batch 中的样本都加起来,假设用m来表示这个 mini-batch 中的样本数量,而不是整个训练集。
然后计算方差,再算 ,即用均值和标准差来调整,加上 是为了数值稳定性。 是用 和 再次调整 得到的。
请注意,用于调节计算的 和 是在整个 mini-batch 上进行计算的,但是在测试时,可能不能将一个 mini-batch 中的很多个样本同时处理,因此,需要用其它方式来得到 和 ,而且如果只有一个样本的话,一个样本的均值和方差是没有意义的。

所以实际上,为了将神经网络运用于测试,就需要单独估算 和 ,在典型的 BN 运用中,需要用一个指数加权平均来估算。

总结来说就是,在训练时, 和 是在整个 mini-batch 上计算出来的包含了一定数量的样本,但在测试时,可能需要逐一处理样本,方法是根据训练集估算 和 。

估算的方式有很多种,

理论上可以在最终的网络中运行整个训练集来得到 和 ,但在实际操作中,通常运用指数加权平均来追踪在训练过程中的 和 的值。
还可以用指数加权平均,有时也叫做流动平均,来粗略估算 和 ,然后在测试中使用 和 的值来进行所需的隐藏单元 值的调整。
在实践中,不管用什么方式估算 和 ,这套过程都是比较稳健的,而且如果使用的是某种深度学习框架,通常会有默认的估算 和 的方式,应该会起到比较好的效果。

2.2 测试时的BN

在测试时,需要对每个样本逐一处理,无法使用整个训练集的均值和方差。因此,需要使用一种估算方式来得到均值和方差。
在这里插入图片描述

代码示例(Python):
# 在测试时估算均值和方差
def estimate_mean_and_variance(X):
    mean = np.mean(X, axis=0)
    variance = np.var(X, axis=0)
    return mean, variance

# 使用估算的均值和方差对输入进行归一化
def normalize_input(X, mean, variance, epsilon=1e-5):
    normalized_X = (X - mean) / np.sqrt(variance + epsilon)
    return normalized_X

# 使用缩放参数和偏移参数对归一化后的值进行调整
def scale_and_shift(normalized_X, gamma, beta):
    scaled_X = gamma * normalized_X + beta
    return scaled_X

在实际应用中,可以根据训练集的均值和方差的估计值来进行归一化。

3. BN的优缺点与适用场景

3.1 优点

  • 加速了神经网络的训练过程,提高了收敛速度。
  • 提高了模型的泛化能力,降低了过拟合的风险。
  • 缓解了梯度消失和爆炸问题,使得深层网络的训练更加稳定。

3.2 缺点

  • 需要额外的计算成本,在推理阶段需要对均值和方差进行估算。
  • 引入了额外的参数,增加了模型的复杂度。

3.3 适用场景

  • 对于深层网络和大规模数据集,BN效果显著,可以加快训练速度。
  • 在需要提高模型泛化能力的场景下,BN也是一种有效的正则化方法。

4. 结语

批归一化作为一种有效的神经网络技术,在加速训练、提高泛化能力等方面发挥了重要作用。在实际应用中,需要根据具体情况权衡其优缺点,选择合适的方法和参数设置。同时,对其原理和实现方式的深入理解,有助于更好地应用于实际问题中。


原文地址:https://blog.csdn.net/sxc1414749109/article/details/137654300

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!