【问题标题】:Initialization of Gamma and Beta in Batch Normalization in neural networks神经网络批量标准化中 Gamma 和 Beta 的初始化
【发布时间】:2020-09-24 16:55:18
【问题描述】:

我正在自己制作一个神经网络。我现在被困在批量标准化过程中。问题是我无法找到任何好的 gamma 和 beta 值来在批量标准化中进行初始化。 W 和 b 的初始化有一些技巧,但我找不到任何初始化 gamma 和 beta 值的技巧。我只想问是否有任何提示或技巧可以用来初始化 gamma 和 beta 并获得不错的准确性?

【问题讨论】:

    标签: python-3.x numpy deep-learning neural-network batch-normalization


    【解决方案1】:

    以 gamma 为 1 和 beta 0 开始。Gamma 用作 L1 正则化器,如原始论文中所示。如果 X 中有 3 个元素:(x0, x1, x2) 并且相应的 gamma 是 (g0, g1, g2)。将 gamma x0 设置为零意味着您声明 x0 功能没有贡献,因为g0 * x0 为零。

    您希望训练网络学习每个 gamma,以便它了解要抑制哪些特征以及要放大哪些特征。

    Batch Normalization 的一个好处是我们不必担心如何初始化权重(he、xavier 等)。因此,我建议将此类权重初始化与批量归一化分开。

    参考文献

    【讨论】:

      【解决方案2】:

      PyTorch 使用 1 初始化 Gamma(刻度),使用 0 初始化 Beta(位移),您可以在以下两个链接中找到:

      The first link is to the direct lines in git

      This second link is straight to the PyTorch docs/source

      更新我的答案,the justification has been described perfectly in this blog post detailing the back-propagation of a batch-norm layer(这很直观)。直接引用是:

      我们初始化 BatchNorm 参数以将输入转换为零均值/单位方差分布,但在训练期间他们可以了解到任何其他分布可能更好。

      我的解释是:我们将 gamma 初始化为 1,将 beta 初始化为零,以便线性批范数变换的输出最初遵循标准的零均值单位方差正态分布(即 y = Gamma*X_norm + Beta = X_norm )。这提供了一个标准化的起点,模型可以为此更新 gamma 和 beta 以相应地缩放和移动每个输入的分布(对于当前层)。

      【讨论】:

      • 请在链接周围添加上下文,以便您的用户了解它是什么以及它为什么存在。始终引用重要链接中最相关的部分。
      • 感谢您的提醒;我已经更新了我的答案,但如果还有其他问题,请告诉我
      猜你喜欢
      • 2018-10-04
      • 2020-02-08
      • 2015-07-10
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2017-07-03
      • 1970-01-01
      相关资源
      最近更新 更多