博客
关于我
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 配置参数、状态来优化你的mysql
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
查看>>
MySQL 错误
查看>>
mysql 随机数 rand使用
查看>>
MySQL 面试题汇总
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySQL 高性能优化规范建议
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.6.17-win32免安装版配置
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>