首页 > 其他分享 >多种归一化方法区别

多种归一化方法区别

时间:2022-12-31 16:57:48浏览次数:34  
标签:多种 区别 BN 方差 feature dim 归一化 out

Batch Normalization

简单的说,BN可以在不影响精度的情况下加速神经网络的训练收敛,具体的实现也比较简单,但是就可解释性来说依旧众说纷纭,有一个说法是加入了一定的噪音,因为对于不同的Batch来讲,它的分布有可能机器不同,在归一化之后又限定了数据的范围,当然这是其中一种说法,像原论文提出是为了减少内部协变量转移,后来有人指出其实并没有做到这件事(炼丹嘛~),无论怎么样,BN这个技术目前使用的比较多,而且效果比较好,暂且为功能性使用来讲不去深究内部原因。

简单来说,BN是把一个批次的数据,在特征维度间进行归一化。举个例子来说,假设一个集体中的个人有身高体重发量三个维度,那么BN会分别在不同样本间的身高、体重、发量三个方面进行归一化。分为以下两步:

第一步:主要是计算输入批次的均值和方差,然后把数据归一化到均值为0,方差为1的数据分布。

第二步(可选):第二步会有一个反归一化,因为不一定均值为0,方差为1的分布就是好的,γ和β是两个可学习参数,用于控制方差和均值的转移。(这一步在设置BN代码中可选是否有可训练的参数)

使用

  • 全连接层和卷积层输出上,激活函数前
  • 全连接层输入上,作用在特征维度
  • 卷积层输入上,作用在通道维

验证

这里简单使用torch中自带的来验证

import torch
import torch.nn as nn
#随机生成数据张量
feature = torch.randn(3,5)  #batch_num, dim_num
#设置BN函数
bn = nn.BatchNorm1d(5, affine=False)
#打印原来的张量的平均值
sum_tensor = feature.mean(dim=0)
print(feature)
print(f'归一化之前的均值{sum_tensor},方差:{feature.var(dim=0)}')
#打印归一化后的平均值和方差
out = bn(feature)
sum_out = out.mean(dim=0)
print(out)
print(f'归一化之后的均值{sum_out},方差:{out.var(dim=0)}')

 这里可以看到均值均近似为0,不过不知道为什么方差为都近似等于1.5;nn.BatchNorm1d有很多变种和参数可选。

Layer Normalization

当输入样本间长度不一时,需要对样本进行padding,而padding的值在BN归一化时会引入很大的偏差。所以这时候应该使用LN效果会好一点,在以后轨迹数据方面可能要多使用的时LN。

需要注意的是,BN中训练时需要累计moving_mean和moving_var两个变量,所以BN中有4个参数。而LN只要累计两个参数即可。

在公式方面,LN和BN并无太多差别。

验证

import torch
import torch.nn as nn

feature = torch.randn(5,3)

print(feature)
print(f'层归一化之前的均值{feature.sum(dim=1)},方差:{feature.var(dim=1)}')
ln = nn.LayerNorm(normalized_shape=[3], elementwise_affine=False)

out = ln(feature)
print(out)
print(f'层归一化之后的均值{out.sum(dim=1)},方差:{out.var(dim=1)}')

这里值得注意的是normalized_shape的设置,要从最后一个维度往前进行设置,且不是设置序号而是维度的大小,并且仅设置最后一个维度比较符合对一个单独的样本之间不同的维度进行归一化。

 可以看到,每一个样本不同维度见进行了归一化,目前来讲,可以大概把shape当作一个两维的,即一个batch_size,dim_size,这样只对最后一维归一即可。

 

 

参考:https://cdn.modb.pro/db/488021

标签:多种,区别,BN,方差,feature,dim,归一化,out
From: https://www.cnblogs.com/HOI-Yzy/p/16803781.html

相关文章

  • 交换机堆叠和级联的区别
    一、指代不同 1、堆叠:可以将多台交换机组成一个单元,从而增大端口密度和提高端口的性能。 2、级联:可以实现多台交换机之间的互连。 二、特点不同 1、堆叠:通......
  • 【23期】请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
    同步(synchronous)IO和异步(asynchronous)IO,阻塞(blocking)IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asyn......
  • javascript concat方法 concat和push方法的区别
    //contact和push的区别---------------------------//contact会返回一个新的数组constarr=[1,2,3]constarr2=arr.concat(4)console.log(arr)co......
  • Func<T>、Action<T> 的区别于说明
    一、FuncFunc是一个.Net内置的委托。Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托。Func<TResult>Func<T,TResult>Func<T1,T2,TResult>Func<T1,T2,T3,TRes......
  • Comic Life - 超棒的漫画制作工具,拥有多种动画模版,创作属于自己的漫画
    ComicLife是一个照片编辑器,能够添加各种效果,并基于它们创建漫画。该工具包包括各种各样的模板,可以很容易地将照片放置在工作表上,还有大量各种形状的标注。除了拼贴画上的......
  • DEM、DSM和DTM之间的区别
    在学习工作中我们经常会遇到DEM、DSM和DTM等术语,它们的含义类似,甚至相互替换。那么它们之间有什么区别?这里我们对这些术语进行介绍。数字表面模型(DigitalSurfaceModel,DS......
  • CST和ANSYS HFSS两款电磁软件的区别丨硕迪科技
    也许您对选择用于仿真项目的软件感到困惑,我们从不同方面比较了CSTStudioSuite和ANSYSHFSS这两款电磁结构全波仿真软件。用户界面CST和HFSS软件都在其用户环境中提供了......
  • 一、传输层协议与网络层协议的区别
    一、传输层协议的功能1.分段及封装应用层送来的数据2.提供端到端的传输服务3.在发送主机与接收主机之间构建逻辑通信二、两台主机进程间通信2.1通信条件两台主......
  • IaaS,PaaS,SaaS 的区别
    IaaS,PaaS,SaaS的区别作者: 阮一峰日期: 2017年7月23日越来越多的软件,开始采用云服务。云服务只是一个统称,可以分成三大类。IaaS:基础设施服务,Infrastructure-as-......
  • Jquery中的attr()和prop()的区别
               ......