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\)值的均值和方差的方式,在测试中应该都会有效。

神经网络优化篇:详解测试时的 Batch Norm(Batch Norm at test time)的更多相关文章

  1. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  2. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  3. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  4. setTimeout和setInterval定时器使用详解测试

    var len=4; while(len--){ var time=setTimeout(function(){ console.log(len); },0); console.log(time); ...

  5. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  6. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  7. CentOS 7 下编译安装lnmp之MySQL篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...

  8. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  9. java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

  10. 组件--Fragment(碎片)第二篇详解

    感觉之前看的还是不清楚,重新再研究了一次 Fragment常用的三个类: android.app.Fragment 主要用于定义Fragment android.app.FragmentManager ...

随机推荐

  1. @Constraint注解,做特殊的入参校验

    // @Constraint 是 Java 中的注解之一,用于标记自定义的约束注解.约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性. @Constraint(validatedB ...

  2. C#对字符串进行加密解密

    首先上效果图 加解密接口 internal string ToEncrypt(string encryptKey, string str) { try { byte[] P_byte_key = // ...

  3. java进阶(16)--System常用方法总结

    一.Systen.out静态变量 静态变量,用的最多的是调用print方法   二.System.out.println() println()其实是printStream类的方法   三.Sytem ...

  4. docker 镜像管理之 overlay2 最佳实践

    1. Docker 镜像 Docker 镜像是个只读的容器模板,它组成了 Docker 容器的静态文件系统运行环境 rootfs,是启动 Docker 容器的基础. Docker 镜像是容器的静态视角 ...

  5. PR 调整时间线宽度

    1.问题 这里的宽度太小,不好进行下一步的调整 2.解决方法 方法一 按下=可以放宽 按下-(=左边的那个键)可以缩小宽度 方法二 拖动下方的滑动条即可 方法三 按住ALT+滚轮,即可调节

  6. JS - HTML精确定位

    scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...

  7. 【ES系列】(一)简介与安装

    首发博客地址 首发博客地址 系列文章地址 教学视频 为什么要学习 ES? 强大的全文搜索和检索功能:Elasticsearch 是一个开源的分布式搜索和分析引擎,使用倒排索引和分布式计算等技术,提供了 ...

  8. [转帖]SCSI、ISCSI、iSER、NVMe、NVMe-oF、NVMe-oF over RDMA

    在存储系统中,上层协议可以泛指"指令",也就是比如"读出从某某开始的多少长度的扇区",指令包含三大关键信息: (1)操作码:Opreation Code,或称为 ...

  9. [转帖]oceanbase 的简单介绍

    English | 中文版 OceanBase Database 是一个分布式关系型数据库.完全由蚂蚁集团自主研发. OceanBase 基于 Paxos 协议以及分布式架构,实现了高可用和线性扩展. ...

  10. [转帖]HikariCP常用监控指标与故障排查实战

    编者有言:本书由资深数据库连接池专家撰写,褚霸.德哥.张亮.吴晟等近10位专家高度评价,从设计思想.功能使用.原理实现.工程实践.技术扩展5个维度对HikariCP进行全面讲解和深入分析. 本文将带你 ...