zoukankan      html  css  js  c++  java
  • bn两个参数的计算以及layer norm、instance norm、group norm

    bn一般就在conv之后并且后面再接relu

    1.如果输入feature map channel是6,bn的gamma beta个数是多少个?

      6个。

    2.bn的缺点:

    BN会受到batchsize大小的影响。如果batchsize太小,算出的均值和方差就会不准确,如果太大,显存又可能不够用。

    3.训练和测试时一般不一样,一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数,在测试的时候,不再计算这些值,而是直接调用这些预计算好的来用,但是,当训练数据和测试数据分布有差别是时,训练机上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存inconsistency

    4.

    batch norm:在一个batch里所有样本的feature map的同一个channel上进行norm,归一化维度为[N,H,W]

    layer norm:在每个样本所有的channel上进行norm,归一化的维度为[C,H,W]

    instance norm:在每个样本每个channel上进行norm,归一化的维度为[H,W]

    group norm:将channel方向分group,然后每个group内做归一化,算(C//G)*H*W的均值,GN的极端情况就是LN和I N

    传统角度来讲,在深度学习没有火起来之前,提取特征通常是使用SIFT,HOG和GIST特征,这些特征有一个共性,都具有按group表示的特性,每一个group由相同种类直方图的构建而成,这些特征通常是对在每个直方图(histogram)或每个方向(orientation)上进行组归一化(group-wise norm)而得到。
    而更高维的特征比如VLAD和Fisher Vectors(FV)也可以看作是group-wise feature,此处的group可以被认为是每个聚类(cluster)下的子向量sub-vector。
    从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。
    导致分组(group)的因素有很多,比如频率、形状、亮度和纹理等,HOG特征根据orientation分组,而对神经网络来讲,其提取特征的机制更加复杂,也更加难以描述,变得不那么直观。
    另在神经科学领域,一种被广泛接受的计算模型是对cell的响应做归一化,此现象存在于浅层视觉皮层和整个视觉系统。
    作者基于此,提出了组归一化(Group Normalization)的方式,且效果表明,显著优于BN、LN、IN等

    GG 表示分组的数量, 是一个预定义的超参数(一般选择 G=32G=32). C/GC/G 是每个组的通道数, 第二个等式条件表示对处于同一组的像素计算均值和标准差. 最终得到的形状为 N×(C/G)

    延伸问题:这个group norm怎么去求?

    http://www.dataguru.cn/article-13318-1.html

    https://blog.csdn.net/qq_14845119/article/details/79702040

    1.跨卡同步的BN能有效提升性能

    其实这是可以理解的,毕竟这样bn进行的batch size增大,batch size越大,bn对性能提升越好

    2.训练、测试的bn不同

    在训练的时候用移动平均(类似于momentum)的方式更新batch mean和variance,训练完毕,得到一个相对比较稳定的mean和variance,存在模型中。
    测试的时候,就直接用模型中的均值和方差进行计算。

    这个存储的bn参数是通过移动平均法得到的:

    当前mean = 0.1 * 当前mean + 0.9 * 以前的mean

    var同理

  • 相关阅读:
    thinkphp 学习1-模型
    apache 2.4目录权限
    标头 header()函数的用法
    PHP面试题一
    php学习
    如何执行超过一百兆(100MB)的sql脚本?
    jquery-numberformatter插件
    xpath 获取父级,和同级
    Vue el-table 行编辑验证、重置
    Vue 弹窗一个新增编辑页面
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9720581.html
Copyright © 2011-2022 走看看