博客
关于我
batch norm参数
阅读量:272 次
发布时间:2019-03-01

本文共 1695 字,大约阅读时间需要 5 分钟。

在阅读源码的过程中,BN代码部分出现了一些之前没见过的参数,在这里总结一下(用小写字母代表,具体出现在各个程序的源码中可能有区别,但是大致应该相同)。

  • epsilon:防止normalization过程中分母出现为0的情况,一般设置为很小的值(例如1e-5),如下是batch norm的算法描述过程,在算法第四步中分母部分出现了epsilon

    在这里插入图片描述

  • momentum:batch norm需要计算加权移动平均数(EMA),momentum就是移动平均值的权重,如下是代码例子,在代码的21行和22行就是momentum(权重)的使用。

def Batchnorm_simple_for_train(x, gamma, beta, bn_param):"""param:x    : 输入数据,设shape(B,L)param:gama : 缩放因子  γparam:beta : 平移因子  βparam:bn_param   : batchnorm所需要的一些参数	eps      : 接近0的数,防止分母出现0	momentum : 动量参数,一般为0.9, 0.99, 0.999	running_mean :滑动平均的方式计算新的均值,训练时计算,为测试数据做准备	running_var  : 滑动平均的方式计算新的方差,训练时计算,为测试数据做准备"""	running_mean = bn_param['running_mean']  #shape = [B]    running_var = bn_param['running_var']    #shape = [B]	results = 0. # 建立一个新的变量    	x_mean=x.mean(axis=0)  # 计算x的均值    x_var=x.var(axis=0)    # 计算方差    x_normalized=(x-x_mean)/np.sqrt(x_var+eps)       # 归一化    results = gamma * x_normalized + beta            # 缩放平移    running_mean = momentum * running_mean + (1 - momentum) * x_mean    running_var = momentum * running_var + (1 - momentum) * x_var        #记录新的值    bn_param['running_mean'] = running_mean    bn_param['running_var'] = running_var     	return results , bn_param
  • use_precise_stats:在使用batch norm的时候,训练的时候有batch的概念,但是测试的时候并没有batch,所以在测试的时候需要找到一个适当的值来进行normalization,这个值就是EMA(上述的滑动平均数),但是EMA仅仅是一个估计值,当训练的时候计算的EMA不能很好的估计到测试的时候的均值和方差的时候(EMA的计算方式有问题或者batch和model不稳定),batch norm就会失效。

    EMA计算公式
    在EMA的计算过程中,如果lamda过小,那么最近的均值对EMA贡献过大,就会产生很大的偏差,如果lamda过大,那么需要大量的迭代才能得到结果(通常的lamda取值范围是0.9~0.99)
    在这里插入图片描述
    将模型固定住,取一定数量的batch,计算真正的均值和方差(不是EMA),这就是precise batch norm,batch的数量也是一个超参数。
    在这里插入图片描述
    注意precise batch norm不是一个主流的方法,因为EMA通常是有效的(lamda足够大,模型会迭代训练很多轮,选取的模型在经过一定的迭代后会稳定下来)。

  • num_batches_precise:在precise batchnorm中计算平均数使用的batch数量。

参考:

转载地址:http://mrvx.baihongyu.com/

你可能感兴趣的文章
mysql数据库命令备份还原
查看>>
mysql数据库基础教程
查看>>
MySQL数据库实现主从同步数据
查看>>
MySQL数据库操作
查看>>
Mysql数据库的条件查询语句
查看>>
MySQL数据库的高可用
查看>>
MYSQL数据库简单的状态检查(show processlist)
查看>>
MYSQL数据库简单的状态检查(show status)
查看>>
MYSQL数据库自动本地/异地双备份/MYSQL增量备份
查看>>
mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
查看>>
MYSQL数据库进阶操作
查看>>
MySQL数据库面试题(2021最新版)
查看>>
MySQL数据库高并发优化配置
查看>>
mysql数据恢复
查看>>
MySQL数据的主从复制、半同步复制和主主复制详解
查看>>
mysql数据碎片整理
查看>>
MySQL数据类型
查看>>
MySQL数据类型字节长度
查看>>
mysql数据被误删的恢复方案
查看>>
MySQL数据读写分离(MaxScale)上干货!!!
查看>>