- bn
- 对批次大小的依赖:
- BN的效果在很大程度上依赖于批次大小(batch size)。当批次大小较小时,BN可能无法准确地估计每个批次的均值和方差,导致性能下降。
- 在某些情况下,如在线学习或内存受限的环境中,可能无法使用较大的批次大小,这限制了BN的应用。
- 不适用于RNNs:
- BN最初是为卷积神经网络(CNNs)设计的,而在循环神经网络(RNNs)中,由于数据之间存在时间依赖性,BN可能无法有效地工作。
- 尽管有一些尝试将BN应用于RNNs的变体(如Layer Normalization),但它们可能无法完全解决BN在RNNs中的问题。
- 计算成本:
- BN在训练过程中需要计算每个批次的均值和方差,这增加了计算成本。
- 在某些情况下,为了降低计算成本,可能会选择使用其他归一化方法(如Group Normalization或Instance Normalization)。
- 对模型结构的影响:
- BN层增加了模型的复杂性,并可能引入额外的参数(如可学习的缩放和偏移参数)。
- 这可能导致模型更加难以优化,并可能增加过拟合的风险。
- 在测试时的表现:
- 在训练过程中,BN使用每个批次的统计信息来归一化数据。然而,在测试时,通常没有批次的概念,因此需要使用训练过程中计算的移动平均值和方差来进行归一化。
- 如果训练数据和测试数据之间存在分布差异,这可能导致BN在测试时的性能下降。
- 在某些情况下可能不是最佳选择:
- 尽管BN在许多情况下都表现出色,但在某些特定任务或数据集上,其他归一化方法(如Layer Normalization、Instance Normalization或Group Normalization)可能更加有效。
- 归一化方式:
- LN:是“横”着来的,对一个样本的不同神经元(neuron)间做归一化。也就是说,LN是对单个数据的指定维度进行Norm处理,与batch无关。
- BN:是“竖”着来的,它对各个维度做归一化,与batch size有关系。BN是取不同样本的同一个通道的特征做归一化,即逐特征维度归一化。
- 应用场景:
- LN:主要用于NLP领域,因为每个词向量的含义不同,若按照整个batch的数据进行归一化会产生较大误差。LN可以确保同一层神经元的输入具有相同的尺度,从而有助于优化。
- BN:广泛应用于各种深度学习架构中,特别是卷积神经网络(CNNs)。它通过减少内部协变量偏移(Internal Covariate Shift)来加速训练,并有助于模型收敛