博客
关于我
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/

你可能感兴趣的文章
Linux下的系统监控与性能调优:从入门到精通
查看>>
LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
查看>>
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
Moment.js常见用法总结
查看>>