首页 > 其他分享 >归一化方法

归一化方法

时间:2023-04-29 17:34:59浏览次数:38  
标签:每个 nn 标准化 batch 归一化 BatchNorm 方法

常用归一化方法

1. BatchNorm

https://arxiv.org/abs/1502.03167

BatchNorm是一种归一化方法,用于对神经网络中的特征进行标准化处理。可以加速深层神经网络的训练,防止梯度消失和爆炸问题,并提高模型的泛化能力。

在深层神经网络中,由于各层之间的输出分布可能会变化,导致模型难以训练。而BatchNorm通过对每个batch的特征进行标准化处理,使得每个特征的均值接近0,方差接近1,从而使得各层之间的输出分布更加稳定,加速模型的训练。

BatchNorm的计算方式如下:

\[y = \frac{x - mean}{\sqrt{var + eps}} * gamma + beta \]

其中,x表示输入的特征,meanvar表示每个batch的特征的均值和方差,gammabeta是可学习的参数,eps是一个小的常数,用于防止分母为0。

优点:

  • 加速模型训练
  • 提高模型泛化能力
  • 不同样本之间不会相互影响

缺点:

  • 对batch size的依赖
  • 对网络架构的限制
  • 可能引入额外的计算

LazyBatchNorm是一种类似于BatchNorm的归一化方法,但是它可以在训练和推理时都使用相同的统计信息,从而加速模型的推理过程。与BatchNorm不同,LazyBatchNorm不会在每个batch中计算均值和方差,而是只在第一个batch中计算并存储下来,然后在后续的训练和推理中共享这些统计信息。这样可以避免在每个batch中计算均值和方差的开销,从而加速模型的推理过程。

nn.BatchNorm1d()
nn.BatchNorm2d()
nn.BatchNorm3d()

主要参数如下:

  • num_features:一个整数,表示输入张量的通道数。
  • eps:一个小的常数,用于防止分母为0,通常取\(10^{-5}\)。
  • momentum:用于计算滑动平均值的动量,默认为0.1。
  • affine:是否对归一化后的特征进行仿射变换,默认为True。如果设置为False,则不会学习gammabeta两个参数。
  • track_running_stats:是否跟踪输入张量的统计信息,默认为True。如果设置为False,则不会计算滑动平均值和方差,而是使用当前batch的均值和方差进行归一化处理。
  • lazy:是否使用LazyBatchNorm,默认为False。如果设置为True,则使用LazyBatchNorm进行归一化处理。

2. LayerNorm

https://arxiv.org/abs/1607.06450

LayerNorm,即Layer Normalization,是一种用于对神经网络中每一层的输出进行标准化处理的方法。与BatchNorm(批标准化)不同,LayerNorm是在每个样本上对每个特征进行标准化,而不是在每个批次上对每个特征进行标准化。

优点:

  • 适用范围广
  • 不受batch size影响
  • 不同样本之间不会相互影响

缺点:

  • 需要更多的计算
  • 可能引入过度平滑
nn.LayerNorm()

主要参数如下:

  • normalized_shape: 一个整数或一个元组,表示标准化处理时特征张量的shape,例如对于形状为\((N, C, H, W)\)的输入张量,可以将normalized_shape设置为(1, C, 1, 1)表示对第二个维度进行标准化处理。
  • eps: 一个小的常数,用于防止分母为0,通常取\(10^{-5}\)。
  • elementwise_affine: 一个布尔值,表示是否学习可学习的缩放因子和偏移量,如果为False,则不学习。

3. InstanceNorm

https://arxiv.org/abs/1607.08022

InstanceNorm,即Instance Normalization,是一种用于对神经网络中每个样本的每个通道进行标准化处理的方法。与BatchNorm(批标准化)不同,InstanceNorm是在每个样本上对每个通道进行标准化,而不是在每个批次上对每个通道进行标准化。

优点:

  • 不同样本之间不会相互影响
  • 对batch size的依赖性较小
  • 适用于图像风格转换等任务

缺点:

  • 对小批量数据的处理不稳定
  • 不适用于循环神经网络
  • 可能引入额外的计算
nn.InstanceNorm1d()
nn.InstanceNorm2d()
nn.InstanceNorm3d()

主要参数如下:

  • num_features: 一个整数,表示输入张量的通道数。
  • eps: 一个小的常数,用于防止分母为0,通常取\(10^{-5}\)。
  • momentum: 一个小的常数,用于计算均值和方差的滑动平均值,通常取0。当momentum不为0时,InstanceNorm可以看作是一种带有记忆能力的BatchNorm。

4. GroupNorm

https://arxiv.org/abs/1803.08494

GroupNorm是一种将特征图分成多个组,对每个组内的特征进行标准化的归一化方法。

优点:

  • 对小批量数据的处理稳定
  • 适用于小batch size
  • 对batch size的依赖性较小
  • 可以处理循环神经网络

缺点:

  • 计算量大
  • 不适用于图像风格转换等任务
  • 需要手动设置组数
nn.GroupNorm()

主要参数如下:

  • num_features: 一个整数,表示输入张量的通道数。
  • num_groups: 一个整数,表示将通道分成的组数。通常取值为32或64。
  • eps: 一个小的常数,用于防止分母为0,通常取\(10^{-5}\)。

5. 其他归一化方法

  • Weight Normalization

https://arxiv.org/abs/1602.07868

  • Spectrum Normalization

https://arxiv.org/abs/1705.10941

标签:每个,nn,标准化,batch,归一化,BatchNorm,方法
From: https://www.cnblogs.com/jijunhao/p/17364239.html

相关文章

  • 概率估计方法
    概率估计方法在实践中,概率分布通常是未知的,如何从样本中识别出潜在的概率分布是统计估计。参数方法极大似然估计MLE最大化后验估计MAP非参数方法直方图方法核密度估计KDE最近邻密度估计NNDE两种观点(关于参数方法\(\theta\))假设我们有一个样本数据集合\(......
  • 用户故事与敏捷方法阅读笔记03
    第11章测量并监控速率我们将项目分成一系列迭代来做发布计划,每轮迭代中安排一定故事点的任务。一轮迭代完成的故事点就是项目的速率。因为速率是非常重要的度量,所以怎么测量它变得很重要,而且速率在初期的迭代可能很不稳定,经过两三轮迭代后,才能获得一个长期的、比较稳定的速率。......
  • 用户故事与敏捷方法阅读笔记02
    第6章用户故事验收测试比起写冗长的需求列表,可以用测试来充实很多用户故事的细节。测试是一个两步走的流程:第一,将测试要点记录在故事卡的背面,任何时候发现新的测试,都可以记录到故事卡的背面;第二,将测试要点变成全面的测试,这些测试可以用来演示故事已正确、完整地实现。测试验收......
  • #yyds干货盘点# LeetCode面试题:解码方法
    1.简述:一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A'->"1"'B'->"2"...'Z'->"26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF" ,将消息分组为 (11106)"KJF......
  • 利用snpEff对基因型VCF文件进行变异注释的详细方法
    利用snpEff对VCF文件进行变异注释群体遗传研究中,在获得SNP位点后,我们需要对SNP位点进行注释,对这些SNP位点进行更深的了解。snpEff是一个用于对基因组单核苷酸多态性(SNP)进行注释的软件,snpEff软件可以用于对VCF文件进行变异注释,使用时需要先进行安装,然后构建参考基因组数据库,即......
  • valgrind使用方法
    valgrind使用1.Preface valgrind是一套Linux下开源的程序仿真调试和分析工具的集合;集合中的每个工具负责执行某种类型的仿真,调试,或者分析任务;它的主要结构包括一个内核(软件模拟CPU环境)以及一系列的小工具。valgrind包含的工具主要如下:Memcheck主要针对C和C++程序的......
  • js封装深拷贝方法
    deepCopy:function(data){ if(data===null||data===undefined){ returnnull; } letresult=Array.isArray(data)?[]:{}; if(data&&typeofdata==='object'){ for(letkeyindata){ if(data[key]&&typeof......
  • LWC属性变化时的一种处理方法
    LWC(LightningWebComponent)的属性name,role发生变化,或者要删除某个属性时,Salesforce会自动检查是否有Flow引用这个lwc,如果有,则会提示,不能删除。手工操作,需要在Flow中先去掉这个lwc,然后发布修改后的lwc,再在Flow中加回去。问题是Flow往往有好几个版本(version),一个个地手工调整,非......
  • 动态增加表单方法--ff/ie
    ---------------------增加方法----------------------------<h3><center>批量增加评论</center></h3><BR><formaction=""method="post"οnsubmit="returncheck_form();"><inputtype="button"va......
  • 用户故事与敏捷方法读后感
    《用户故事与敏捷方法》这本书是一本介绍敏捷开发方法中用户故事的基本概念、应用和实践的书籍。作为一名从事软件开发的人员,我非常喜欢这本书,因为它为我们提供了一种更加敏捷、更加用户导向的开发方法。首先,这本书非常清晰地介绍了用户故事的基本概念,从用户需求的角度出发,阐述了......