zoukankan      html  css  js  c++  java
  • BN_batch normalization

    参考:

    https://zhuanlan.zhihu.com/p/27938792

    做法

    设,每个batch输入是 x=[x_0,x_1,x_2,...,x_n] (其中每个 x_i 都是一个样本, n 是batch size) 假如在第一层后加入Batch normalization layer后, h_1 的计算就倍替换为下图所示的那样。

     

    • 矩阵 x 先经过 W_{h_1} 的线性变换后得到 s_1
      • :因为减去batch的平均值 mu_B 后, b 的作用会被抵消掉,所以没必要加入 b (红色删除线)。
    • s_1 再减去batch的平均值 mu_B ,并除以batch的标准差 sqrt{sigma_B+epsilon} 得到 s_2epsilon 是为了避免除数为0的情况所使用的微小正数。
      • mu_B=frac {1}{m} sum^m_{i=0}W_{h_1}x_{i,:}
      • sigma^2_B=frac {1}{m} sum^m_{i=0}(W_{h_1}x_{i,:}-mu_B)^2
      • :但 s_2 基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,引入两个新的parameters: gammaetagammaeta 是在训练时网络自己学习得到的。
    • s_2 乘以 gamma 调整数值大小,再加上 eta 增加偏移后得到 s_3
    • 为加入非线性能力, s_3 也会跟随着ReLU等激活函数。
    • 最终得到的 h_1 会被送到下一层作为输入。

    需要注意的是,上述的计算方法用于在训练。因为测试时常会只预测一个新样本,也就是说batch size为1。若还用相同的方法计算 mu_Bmu_B 就会是这个新样本自身, s_1-mu_B 就会成为0。

    所以在测试时,所使用的 musigma^2 是整个训练集的均值 mu_P 和方差 sigma^2_P

    而整个训练集的均值mu_P和方差 sigma^2_P 的值通常也是在训练的同时用移动平均法来计算

  • 相关阅读:
    CBP是什么?
    编码器变换及量化的流程?
    CABAC与CAVLC有什么区别?
    如何在JM8.6编码端提取QDCT?
    宏块都有哪些类型?
    H264帧间预测流程?
    H264子宏块的划分有哪些?
    H264提供了哪些帧内预测?
    加强预测编码?
    centos7 下通过nginx+uwsgi部署django应用
  • 原文地址:https://www.cnblogs.com/abella/p/10282225.html
Copyright © 2011-2022 走看看