BatchNorm和LayerNorm
一、BatchNorm
论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
从论文名字就可以看出,BatchNorm技术是用来加速网络训练的,手段就是通过“Reducing Internal Covariate Shift(减小内部协变量偏移)”,什么叫做“Internal Covariate Shift”呢? 看一下下图所示的sigmoid函数图:
![](/assets/blank.gif)
可以看出当x值在0附近时,其导数较大,靠近两边时导数很小。而在深度神经网络中,如果不加以约束,则激活函数的输入值很容易向两边偏移,导致导数变小,这样会使得网络训练变慢,而且逐层累乘后还会产生梯度消失现象。所以normalization的作用相当于数据在经过每层时都将它拉回为一个统一分布。batch normalization过程如下:
其中xi是线性激活值。首先求出均值和方差,之后再减去均值、除以方差。参数应该是为了防止因为方差接近0而使得除以0无限大的问题,所以在pytorch中
是一个比较小的值(1e-5)。为了防止网络表达性下降,又在normaliza只后添加一个逆变换,即将x乘以一个缩放值
并加上一个偏移量
,其中
和
都是可学习参数。
因此,normalization其实更像是另一个神经网络层,因为有可学习参数存在,但是参数量相对来说是极少的,与线性变换中y=wx+b的b参数量一致,为神经元个数。
另外,也有实验表明batch normalization放在非线性激活层之后也有同样甚至更好的加速效果,这样的话似乎上述原理很难解释为什么BatchNorm能够加速训练,毕竟Normalization都是与激活函数无关的,这里有一个更容易理解的解释:BatchNorm为什么能缓解梯度消失问题
BatchNorm的缺点:
1.需要较大的batch以体现整体数据分布
2.训练阶段需要保存每个batch的均值和方差,以求出整体均值和方差在infrence阶段使用
3.不适用于可变长序列的训练,如RNN
一、LayerNorm
LayerNorm克服了以上BatchNorm的缺点,在特征维度进行归一化,对每个Batch有一个均值和方差,因此不依赖于batch大小,即使batch为1也能使用。
LayerNorm只是归一化的维度与BatchNorm有所区别,但是其他区别不大。LayerNorm中也存在和
可学习参数,并且
和
是在特征维度进行,而不是在Batch维度。
例如,input是batch×seq_len×hidden,则Layer首先在hidden维度求出batch×seq_len个标准差和均值,再使用它们进行归一化,但和
只有hidden个,因此LayerNorm归一化之后的缩放是再特征维度上进行。
使用numpy实现LayerNorm:
a=array([[[-0.66676328, -0.95822262, 1.2951657 , 0.67924618],[-0.46616455, -0.39398589, 1.95926177, 2.36355916],[-0.39897415, 0.80353481, -1.46488175, 0.55339737]],[[-0.66223895, -0.16435625, -1.96494932, -1.07376919],[ 1.30338369, -0.19603094, -1.43136723, -1.0207508 ],[ 0.8452505 , -0.08878595, -0.5211611 , 0.10511936]]])
u=np.mean(a, axis=(2,))
s = np.std(a, axis=(2,))y = a-u[...,None]
y = y/s[...,None]
print(y)########################输出###################################
array([[[-0.80954074, -1.12241971, 1.29657224, 0.63538821],[-1.0214588 , -0.96610083, 0.83874033, 1.14881929],[-0.30472338, 1.04125172, -1.49779981, 0.76127147]],[[ 0.46047519, 1.21440667, -1.51218696, -0.16269489],[ 1.56757537, 0.13400543, -1.04708279, -0.65449801],[ 1.53885365, -0.35203004, -1.2273397 , 0.04051609]]])
Pytorch的LayerNorm:
import torch.nn.functional as Finput = torch.tensor(a)
y = F.layer_norm(input,(4,))
print(y)#####################输出################
tensor([[[-0.8095, -1.1224, 1.2966, 0.6354],[-1.0215, -0.9661, 0.8387, 1.1488],[-0.3047, 1.0412, -1.4978, 0.7613]],[[ 0.4605, 1.2144, -1.5122, -0.1627],[ 1.5676, 0.1340, -1.0471, -0.6545],[ 1.5388, -0.3520, -1.2273, 0.0405]]])
Pytorch LayerNorm添加缩放:
的确是只在特征维度进行缩放了。
w = torch.tensor([1,1,2,2])
b = torch.tensor([1,1,1,1])
y = F.layer_norm(input,(4,),w,b)
print(y)#########################输出######################
tensor([[[ 0.1905, -0.1224, 3.5931, 2.2708],[-0.0215, 0.0339, 2.6775, 3.2976],[ 0.6953, 2.0412, -1.9956, 2.5225]],[[ 1.4605, 2.2144, -2.0243, 0.6746],[ 2.5676, 1.1340, -1.0942, -0.3090],[ 2.5388, 0.6480, -1.4546, 1.0810]]])
BatchNorm和LayerNorm相关推荐
- BatchNorm、LayerNorm、InstanceNorm、GroupNorm、WeightNorm
今天看Transform时看到了LayerNorm,然后想到之前用过BatchNorm,就想着这两个有啥区别呢,然后找资料,就发现还有其他的归一化处理,就在这里整理一下,方便以后查阅. BatchNo ...
- BatchNorm与LayerNorm
BatchNorm批量归一化:批量归一化是对一个中间层的单个神经元进行归一化操作.计算第l层网络中每个神经元在Batch大小为N的样本上输出的N个结果,计算每个神经元输出的N个结果的均值和方差,然后使 ...
- pytorch中的BatchNorm和LayerNorm
参考文章 https://blog.csdn.net/weixin_39228381/article/details/107896863 https://blog.csdn.net/weixin_39 ...
- BatchNorm和LayerNorm的比较
BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好:BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果bat ...
- Batchnorm 和Layernorm 区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一.Batchnorm 二.Layernorm 三.总结 一.Batchnorm BatchNorm,一般用于CV任务,是把一个 ...
- BatchNorm和LayerNorm的区别
BatchNorm: 对一个batch-size样本内的每个特征做归一化 LayerNorm: 针对每条样本,对每条样本的所有特征做归一化 简单举例: 假设现在有个二维矩阵:行代表batch-size ...
- 【AI基础】图解手算BatchNorm、LayerNorm和GroupNorm
这几天整理对比了一下网络中几个常用的Norm的方法,之前也看过,网上有很多讲的非常详细的资料,以前看一下理解了就过了,时间长了就模糊了,此次自己亲手算了一遍,加深了印象,特此整理一下,以便之后的回 ...
- 深度学习基础之BatchNorm和LayerNorm
文章目录 BatchNorm LayerNorm 总结 参考 BatchNorm Batch Normalization(下文简称 Batch Norm)是 2015 年提出的方法.Batch Nor ...
- PyTorch学习之归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)
BN,LN,IN,GN从学术化上解释差异: BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好:BN主要缺点是对batchsize的大小比较敏感,由于每次计算均 ...
最新文章
- 批量新建文件夹并命名_dos命令实现批量新建文件夹
- Java图形化界面设计——容器(JFrame)
- php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传
- 使用OpenCV实现图像中的文字切割
- VisualBox中增大linux硬盘空间的方法
- 安装搜狗输入法之后 Linux Mint 19.1 字体发虚解决方案
- C# 9 新特性 —— 补充篇
- 2013搜狗校园招聘笔试题
- IDEA工具开发必备设置-极大提高开发效率
- mysql ip v4 v6_mysql IPv4 IPv6
- 函数不可以直接调用其他函数内部定义的变量_基础知识回顾函数(一)
- Android应用案例开发大全 吴亚峰 苏亚光
- 项目管理——如何制定生产计划控制生产进度
- char在c语言中的意思(char在c++中的意思)
- 学计算机硬盘电脑多大好,笔记本电脑固态硬盘要多大的合适
- github官网无法进入的问题
- C++多线程启动、暂停、继续与停止
- Java程序是如何运行的
- 网站数据统计分析之二:前端日志采集是与非
- ESP8266的Arduino及驱动安装
热门文章
- 跟着Cell学作图 | 2.柱状图+误差棒+散点+差异显著性检验
- 杂学Linux-基础篇
- 从一个简洁的进度刻度绘制中了解自定义View的思路流程
- LUA 异常抛出与捕获
- Word自动生成目录,自定义字体
- 2022年内蒙古最新建筑八大员(质量员)模拟考试题库及答案解析
- iphone12 蓝色翻车
- 8种基本数据类型转换
- 联想笔记本不显示电量百分比 lenovobatterygaugepackage.dll
- linux sudo不能执行命令,为什么linux中sudo执行会“找不到命令”