首页 > 其他分享 >2.6 类神经网路训练不起来怎么办 (五):批次标准化 (Batch Normalization)简介

2.6 类神经网路训练不起来怎么办 (五):批次标准化 (Batch Normalization)简介

时间:2023-06-16 17:33:24浏览次数:36  
标签:批次 标准化 batch Batch Normalization 2.6 自变量

1. 提出背景

  在前文,我们提过\(error\ surface\)在不同方向的斜率不一样,因此采用固定的学习率很难将模型\(train\)起来,上节提出了自适应学习率,这里还有一个方法就是直接将e\(rror\ surface\)铲平.

  或许首先想要提出的是为什么会产生不同方向上斜率相差很大的现象.观察下图,假设\(Y = w_1x_1+w_2x_2\).则\(Loss = \hat y - Y\).
  假设\(w_1\ change\)了,那么什么情况会导致Loss变化很小.一个可能的情况就是\(w_1\)配对的\(x_1\)取值都很小,所以计算出的\(Y\)改变也不大.
image
  反之,假设\(w_2\)配对的\(x_2\)取值都很大,那么\(Y\)的变化就会很大,则\(loss\)变化也会很大.
image
  由于输入自变量 x 的量级不同,导致不同参数 w 的loss变化速度不同,也就形成了坡度不同的error surface.故而,为了使不同参数的loss 变化速度一样,我们只需要让自变量 x 全部处于同一量级上,这就叫做标准化!!!

2. Feature Normalization(归一化)

  归一化有很多种方式.假设每个自变量都是一个向量,有多维.x的上标表示第R个自变量,x的下标表示第 i 维.
image
  将每个自变量的第 i 维抽出来,计算平均值和标准差,再用来给第 i 维数值进行标准化.用标准化后的数值代表原来的数值,且平均值变为\(0\),标准差变为\(1\).所有\(\tilde{x}\)平均值都为 0,方差都为 1.自变量标准化能使梯度下降收敛更快!
  也就是说,当特征化后,原来很大的\(x_i\)会变小,这样就不会引起一个梯度大,一个梯度小的问题.

2.1 每层都需要一次 Normalization

  经过\(feature\ normalization\)后的 \(\tilde{x}\) 都在同一量级,但是\(W_1\)的不同维度可能有不同的量级,因此计算出来的 z 在不同维度也可能有不同的量级.所以隐藏层 \(z\)或\(a\) 也需要进行标准化.
image
  可能会提出疑问,到底是在激活函数层前使用Normalization还是激活函数层后使用Normalization.但一般而言,normalization 步骤要放在 activation function 之前或之后都是可以的.如果选择的是 sigmoid,比较推荐对 \(z\) 做 feature normalization.因为 Sigmoid 在 0 附近斜率比较大,所以如果对 \(z\) 做 feature normalization,把所有的值都挪到 0 附近,算 gradient 时,出来的值会比较大.
  怎么对\(z\)做Normalization呢?方法也差不多.
image

2.2 对一批 \(z\) 数据进行归一化

  通过Normalization,模型变为需一次处理一批 features 的模型,数据之间相互关联.
image
image
  这也就是\(Batch\ Normalization\).计算出来的平均值向量和标准差向量大小取决于 z,所以这是一个大型网络,假如将所有的资料输入进去,GPU的内存不够存所有的训练资料,所以分批次输入资料,保证一次只对一个batch 进行标准化.但是批次标准化适用于 batch size 大的,因为只要batch够大就能足以代表全部分布.

2.3 Batch Normalization 加入限制

  往往在批次标准化后还要加一层网络,这时因为\(Normalization\)后,\(z\)的均值会是0,可以视作是给network一些限制,但这个限制可能会带来负面的影响,因此就加入\(\beta\)和\(\gamma\)(可以理解为噪音),用于调整 z 的分布.
image
  但会有人质疑,这样操作与\(Normalization\)的初衷相违背.但通常我们会将\(\gamma\)设为\(1\),\(\beta\)设为\(0\).所以刚开始训练时,每个\(dimension\)的分布还是比较接近的.到后来根据训练调整\(\gamma\)和\(\beta\)的值.

2.4 Testing 时会遇到的问题

  如果我们已经有了给定的\(Testing\)数据集,可以将数据集分批次\(Normalization\).但实际上我们获得\(Testing\ dataset\)的大小是不固定的,不可能每次都等数据凑齐\(batch\)后再\(testing\).但是没有\(\mu\)难以标准化.这个问题的解决依赖\(train\ dataset\).在testing中没有batch,而training时有 t 个batch,就有 t 个μ.所以Pytorch通过计算training中的 moving average(滑动平均)来代替testing的μ和\(\sigma\)!
image
  滑动平均是计算\(train\ set\)每个\(batch\)的μ,使用上图的公计算基于\(train\ set\)的μ.

2.5 Batch Normalization对比实验

  黑线是没有做BN的结果,而红色即是做了BN后的结果.虽然红线和黑线差不多的\(acc\),但显然红线更快.一般激活函数选择RELU.
image
  当做了BN后,error surface会比较容易训练,因此可以将\(lr\)调大.

2.6 其他Normalization 方法

image

标签:批次,标准化,batch,Batch,Normalization,2.6,自变量
From: https://www.cnblogs.com/newblg/p/17486122.html

相关文章

  • 最新jQuery引用google地址外部文件(jquery 1.2.6至jquery1.7.2)
    评:1.很多网站都是使用这种方式引入,客户的浏览器可能已经缓存过了jquery。可以直接调用本地的,速度更快…2.Googlecode使用了cdn技术在很多地方有节点服务器,加载jquery时绝对不会比在你服务器上加载慢,本地服务器除外:)3.可以节省服务器流量,降低服务器带宽压力可以使用......
  • s1sh整合实例 Strut1.2+Spring2.6+Hibernate3.2
    [code]开发环境:MyEclipse8.5+Mysql说明:本实例是简单注册程序(只有两个属性)数据库脚本:user.sqlCREATETABLE`user`(`Id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(255)DEFAULTNULL,`password`varchar(255)DEFAULTNULL,P......
  • 第二十九节:批量插入框架[Zack.EFCore.Batch]和EFCore7.x自带的批量删除、更新
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 2.6万字的软件测试高频面试题(2023全新版),内容包括:面试技巧,HR面试、基础面试、JMeter面
    1.求职面试准备(记得收藏保存转发给你的朋友)1.1面试技巧......
  • batch_norm在强化学习中建议使用的形式
    defbatch_norm(layer,**kwargs):"""Applybatchnormalizationtoanexistinglayer.Thisisaconveniencefunctionmodifyinganexistinglayertoincludebatchnormalization:Itwillstealthelayer'snonlinearityift......
  • 2.2类神经网路训练不起来怎么办 (二): 批次 (batch) 与动量 (momentum)
    1.Batch(批次)对抗临界点的两个方法就是batch和momentum  将一笔大型资料分若干批次计算loss和梯度,从而更新参数.每看完一个epoch就把这笔大型资料打乱(shuffle),然后重新分批次.这样能保证每个epoch中的batch资料不同,避免偶然性.epoch是指将数据集分成batch后,......
  • Json解析字符串报错syntax error, expect {, actual string, pos 0, fastjson-version
    ExpectedBEGIN_OBJECTbutwasSTRINGatline1column2path$syntaxerror,expect{,actualstring,pos0,fastjson-version1.2.62syntaxerror,expect{,actualstring,pos0,fastjson-version1.2.62以上的报错都是Json字符串格式错误,比如缺少{},比如两头多了......
  • 正则化(regularization)和归一化(normalization)
    正则化:批量归一化和dropout批量归一化和dropout作为正则化器来克服深度学习模型中的过度拟合问题。 来源您遇到过导致过拟合的大型数据集吗?过度拟合的原因之一是网络中的权重很大。具有较大网络权重的网络可能是网络不稳定的标志,其中输入的微小变化可能导致输......
  • mybatis-plus 批量插入方法saveBatch 踩坑
    1、问题描述由于我在数据库的一张表设置了两个主键,所以创建的实体我想都加上@TableId注解但是这样在mybatis-plus中一个实体只能有一个@TableId注解标识的主键2、然后我在批量插入时就遇到了问题,我使用的saveBatch方法进行的批量插入,在插入时实体的两个id我都设置值了,但是......
  • 标准化(Standardization)、归一化(Normalization)
    归一化:1)把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为......