首页 > 其他分享 >神经网络优化篇:详解测试时的 Batch Norm(Batch Norm at test time)

神经网络优化篇:详解测试时的 Batch Norm(Batch Norm at test time)

时间:2024-02-02 10:13:17浏览次数:30  
标签:mini 样本 batch Batch mu time sigma Norm

Batch归一化将的数据以mini-batch的形式逐一处理,但在测试时,可能需要对每个样本逐一处理,来看一下怎样调整的网络来做到这一点。

回想一下,在训练时,这些就是用来执行Batch归一化的等式。在一个mini-batch中,将mini-batch的\(z^{(i)}\)值求和,计算均值,所以这里只把一个mini-batch中的样本都加起来,用m来表示这个mini-batch中的样本数量,而不是整个训练集。然后计算方差,再算\(z_{\text{norm}}^{(i)}\),即用均值和标准差来调整,加上\(\varepsilon\)是为了数值稳定性。\(\tilde{z}\)是用\(\gamma\)和\(\beta\)再次调整\(z_{\text{norm}}\)得到的。

请注意用于调节计算的\(\mu\)和\(\sigma^{2}\)是在整个mini-batch上进行计算,但是在测试时,可能不能将一个mini-batch中的6428或2056个样本同时处理,因此需要用其它方式来得到\(\mu\)和\(\sigma^{2}\),而且如果只有一个样本,一个样本的均值和方差没有意义。那么实际上,为了将的神经网络运用于测试,就需要单独估算\(\mu\)和\(\sigma^{2}\),在典型的Batch归一化运用中,需要用一个指数加权平均来估算,这个平均数涵盖了所有mini-batch,接下来会具体解释。

选择\(l\)层,假设有mini-batch,\(X^{[1]}\),\(X^{[2]}\),\(X^{[3]}\)……以及对应的\(y\)值等等,那么在为\(l\)层训练\(X^{\{ 1\}}\)时,就得到了\(\mu^{[l]}\),还是把它写做第一个mini-batch和这一层的\(\mu\)吧,(\(\mu^{[l]} \rightarrow \mu^{\left\{1 \right\}[l]}\))。当训练第二个mini-batch,在这一层和这个mini-batch中,就会得到第二个\(\mu\)(\(\mu^{\{2\}[l]}\))值。然后在这一隐藏层的第三个mini-batch,得到了第三个\(\mu\)(\(\mu^{\left\{3 \right\}[l]}\))值。正如之前用的指数加权平均来计算\(\theta_{1}\),\(\theta_{2}\),\(\theta_{3}\)的均值,当时是试着计算当前气温的指数加权平均,会这样来追踪看到的这个均值向量的最新平均值,于是这个指数加权平均就成了对这一隐藏层的\(z\)均值的估值。同样的,可以用指数加权平均来追踪在这一层的第一个mini-batch中所见的\(\sigma^{2}\)的值,以及第二个mini-batch中所见的\(\sigma^{2}\)的值等等。因此在用不同的mini-batch训练神经网络的同时,能够得到所查看的每一层的\(\mu\)和\(\sigma^{2}\)的平均数的实时数值。

最后在测试时,对应这个等式(\(z_{\text{norm}}^{(i)} = \frac{z^{(i)} -\mu}{\sqrt{\sigma^{2} +\varepsilon}}\)),只需要用的\(z\)值来计算\(z_{\text{norm}}^{(i)}\),用\(\mu\)和\(\sigma^{2}\)的指数加权平均,用手头的最新数值来做调整,然后可以用左边刚算出来的\(z_{\text{norm}}\)和在神经网络训练过程中得到的\(\beta\)和\(\gamma\)参数来计算那个测试样本的\(\tilde{z}\)值。

总结一下就是,在训练时,\(\mu\)和\(\sigma^{2}\)是在整个mini-batch上计算出来的包含了像是64或28或其它一定数量的样本,但在测试时,可能需要逐一处理样本,方法是根据的训练集估算\(\mu\)和\(\sigma^{2}\),估算的方式有很多种,理论上可以在最终的网络中运行整个训练集来得到\(\mu\)和\(\sigma^{2}\),但在实际操作中,通常运用指数加权平均来追踪在训练过程中看到的\(\mu\)和\(\sigma^{2}\)的值。还可以用指数加权平均,有时也叫做流动平均来粗略估算\(\mu\)和\(\sigma^{2}\),然后在测试中使用\(\mu\)和\(\sigma^{2}\)的值来进行所需要的隐藏单元\(z\)值的调整。在实践中,不管用什么方式估算\(\mu\)和\(\sigma^{2}\),这套过程都是比较稳健的,因此不太会担心具体的操作方式,而且如果使用的是某种深度学习框架,通常会有默认的估算\(\mu\)和\(\sigma^{2}\)的方式,应该一样会起到比较好的效果。但在实践中,任何合理的估算的隐藏单元\(z\)值的均值和方差的方式,在测试中应该都会有效。

标签:mini,样本,batch,Batch,mu,time,sigma,Norm
From: https://www.cnblogs.com/oten/p/18002613

相关文章

  • ILRuntime是如何实现热更新的
    一、ILRuntime的基本原理ILRuntime的基本原理是将C#代码编译成IL代码,然后在运行时通过IL解释器将其转换成机器码执行。这种方式与传统的AOT(AheadofTime)编译方式不同,传统的AOT编译方式是在编译时将C#代码编译成机器码,然后在运行时直接执行机器码。由于ILRuntime是在运行时解释......
  • ILRuntime编码中如何注意性能问题
    一、避免频繁的反射操作在使用ILRuntime时,我们需要频繁地进行反射操作,例如获取类型、获取方法、获取属性等等。反射操作是非常耗费性能的,所以我们需要尽可能地避免频繁的反射操作。例如,我们需要获取一个类型的所有属性,我们可以使用以下代码:PropertyInfo[]properties=typeof......
  • niushop单商户v5多店版升级到v5.3后商业插件报错问题综合解决方式variable type error
    大家可能像我一样遇到一个奇葩问题就是,niushop系统从5.2内核升级到5.3后所有的插件都不能正常使用了,特别是第三方的商业插件,官方给的说法是要重新适配,这个需要较多时间,不过我总结了一下自己就可以修复比如以下插件会遇到这种问题!niushop支付宝小程序插件niushop阿里云插件niushop......
  • 安装MySQL出现由于找不到vcruntime140_1.dll,无法继续执行代码的提示
    问题描述:在安装MySQL服务的时候,执行安装命令提示如下的错误信息。解决方法:通过分析可以知道,是由于缺少了vcruntime140_1.dll动态链接库文件,这是windows缺少vc_redist.x64.exe程序导致的服务安装错误,与我们要安装的MySQL服务并没有关系。(如果您的安装过VS类型的工具,就不会提示该......
  • C++第五十五篇-定时器SetTimer
    使用的一个百度AI代码生成网站: https://yiyan.baidu.com/定时器的实现示例:新建一个程序 编写ConsoleApplication1.cpp#include<iostream>#include<Windows.h>usingnamespacestd;#pragmacomment(lib,"User32.lib")//首先定义一个计时器计时事件的定义#define......
  • 神经网络优化篇:详解Batch Norm 为什么奏效?(Why does Batch Norm work?)
    BatchNorm为什么奏效?为什么Batch归一化会起作用呢?一个原因是,已经看到如何归一化输入特征值\(x\),使其均值为0,方差1,它又是怎样加速学习的,有一些从0到1而不是从1到1000的特征值,通过归一化所有的输入特征值\(x\),以获得类似范围的值,可以加速学习。所以Batch归一化起的作用的原因,直......
  • delphi中的Format、FormatDateTime函数详解(转)
    Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用:首先看它的声明:functionFormat(constFormat:string;constArgs:arrayofconst):string;overload;事实上Format方法有两个种形式,另外一种是三个参数的,......
  • 详解Python TimedRotatingFileHandler 多进程环境下的问题和解决方法
    详解PythonTimedRotatingFileHandler多进程环境下的问题和解决方法在Python的日志处理模块中,TimedRotatingFileHandler是一个非常有用的类,它可以按时间对日志文件进行轮换。然而,在多进程环境下,TimedRotatingFileHandler可能会出现一些问题。本文将详细介绍这些问题以及可能的解决......
  • ssh: connect to host github.com port 22: Connection timed out
    ssh:connecttohostgithub.comport22:Connectiontimedout本地pull/push推送代码到github.com项目报错22端口超时,测试连接也是超时,如下图: 因为已经开强了,所以网络是通的,Google也正常访问怀疑是ssh秘钥问题,发现官方文档有相关介绍,按着操作解决。官方文档放在最后。......
  • 神经网络优化篇:将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural netwo
    将BatchNorm拟合进神经网络假设有一个这样的神经网络,之前说过,可以认为每个单元负责计算两件事。第一,它先计算z,然后应用其到激活函数中再计算a,所以可以认为,每个圆圈代表着两步的计算过程。同样的,对于下一层而言,那就是\(z_{1}^{[2]}\)和\(a_{1}^{[2]}\)等。所以如果没有应用Bat......