caffe详解之归一化层

时间:2022-07-22
本文章向大家介绍caffe详解之归一化层,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

从零开始,一步一步学习caffe的使用,期间贯穿深度学习和调参的相关知识!

LRN 参数配置

layer {
  name: "norm1"
  type: "LRN"
  bottom: "conv1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}

LRN说明

示意图

公式

意义

LRN操作主要目的是在深度上进行平滑操作,使得数据在深度层面上有一定的联系。

应用

LRN层是在AlexNet网络中提出来的,但是因为其计算的复杂度和后期的效果并不理想,在后面的网络中基本上抛弃的LRN的归一化方法。

Batch Norm 参数配置

layer {
    bottom: "conv1"
    top: "conv1"
    name: "bn_conv1"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: true
    }
}

layer {
    bottom: "conv1"
    top: "conv1"
    name: "scale_conv1"
    type: "Scale"
    scale_param {
        bias_term: true
    }
}
message BatchNormParameter {
  // 如果为真,则使用保存的均值和方差,否则采用滑动平均计算新的均值和方差。
  // 该参数缺省的时候,如果是测试阶段则等价为真,如果是训练阶段则等价为假。
  optional bool use_global_stats = 1;

  // 滑动平均的衰减系数,默认为0.999
  optional float moving_average_fraction = 2 [default = .999];

  // 分母附加值,防止除以方差时出现除0操作,默认为1e-5
  optional float eps = 3 [default = 1e-5];
}

Batch Norm 说明

公式

意义

在深度神经网络的训练过程中,先前层参数的调整会导致之后每一层输入值的分布发生变化,这种现象会使得模型的训练变得复杂。因为分布均匀且统一的数据往往更加容易使得算法训练出高准确率的模型Batch Norm主要借鉴的是白化的思想,目的是将数据尽量维持在方差为1,均值为0的分布上。因为数据的总量十分庞大,我们无法计算出整个数据集的均值与方差,因此采用Batch的思想,分块的进行白化处理Batch Norm的精华体现在最后一个公式上,白化之后进行拉伸与平移,也就是对数据分布进行修正。并且拉伸与平移的系数是通过训练得到的,这样,我们将batch在整个数据集的整体分布状态也学习了出来,防止以偏概全!下图可以清晰的看出,加入Batch Norm使得每一层的数据更够有效且均匀的传递到下一层中去。

应用

Batch NormResNet网络和Inception-v2Inception-v3Inception-v4中均有用到。

参考

批标准化 (Batch Normalization) https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/3-08-batch-normalization/