Tensorflow BatchNormalization详解:1_原理及细节
Batch Normalization: 原理及细节
觉得有用的话,欢迎一起讨论相互学习~Follow Me
为了标准化这些值,我们首先需要计算出批数据中的平均值,如果你仔细看这些代码,你会发现这不是对输入的批数据计算平均值,而是对任意一个特定层的在传入非线性函数之前的输出求平均值。然后将其通过非线性函数后传递给下一层作为输入。
我们将平均值表示为\(\mu_B\),是所有\(x_i\) 值得和然后除以\(x_i\) 的个数\(m\)。
\[
\mu_B \leftarrow \frac{1}{m}\sum_{i=1}^m x_i
\]
然后我们需要计算方差或者均方差,用\(\sigma_{B}^{2}\)表示。如果你不熟悉数理统计,简单来说就是将每个\(x_i\)的值将其减去这个批次的平均值(先前我们计算过这个值并且用\(\mu_B\)表示)。这就是我们所说的对该值的偏差。我们将结果平方以得到平方偏差。将批次中所有数据的平方偏差求和再除以数值的个数即\(m\),所得的这个平均值叫做平方偏差。
\[
\sigma_{B}^{2} \leftarrow \frac{1}{m}\sum_{i=1}^m (x_i - \mu_B)^2
\]
一旦我们有了均值和方差,我们就可以用下面的方程对数据进行归一化。对于每个值,我们将其减去平均值并处以标准差(几乎是)。(你可能多次听说过标准偏差,但如果你没有研究统计数据,你可能不知道标准偏差实际上是均方差的平方根.)
\[
\hat{x_i} \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma_{B}^{2} + \epsilon}}
\]
上面我们说的是几乎是标准偏差,这是因为该批次的实际标准偏差是\(\sqrt{\sigma_{B}^{2}}\),但是在我们的方程式中我们在分母的位置的平方根号中加入了一个很小的数\(\epsilon\)。这个\(\epsilon\)可以是任意一个很小的正数,在我们的代码中,我们使用值0.001.这个操作是为了确保我们不会试图使用0作为除数,但实际上他也的确为每个批次稍微增加了一点方差。
为什么增加方差?根据统计学上说法,这是有道理的,因为即使我们一次对一个批次进行标准化,我们也正在尝试估计总体训练集合上的分布,而总体方差高于从该总体中抽取的任何样本的方差,因此每批增加差异有助于将其考虑在内。
此时,我们已经得到了一个归一化的值,即 \(\hat{x_i}\) 。但我们不是直接使用它,而是将它乘以一个伽玛值 \(\gamma\),然后添加一个\(\beta\)。 \(\gamma\) 和 \(\beta\) 都是网络的可学习参数,分别用于缩放和移位归一化值。因为它们就像权重一样可以学习,所以它们可以在训练过程中为网络提供一些额外的旋钮,以帮助网络更好的学习。
\[
y_i \leftarrow \gamma \hat{x_i} + \beta
\]
我们现在有了神经层批量标准化后最终的输出,我们可以将其传递给非线性激活函数例如:sigmoid, tanh, ReLU, Leaky ReLU等等。在原始批量标准化论文中Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. 他们提到可能会出现希望在非线性之后而不是之前执行批量标准化,但实际上实践中很难找到像这样的用途。
Tensorflow BatchNormalization详解:1_原理及细节的更多相关文章
- Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作
使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...
- Tensorflow BatchNormalization详解:3_使用tf.layers高级函数来构建带有BatchNormalization的神经网络
Batch Normalization: 使用tf.layers高级函数来构建带有Batch Normalization的神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴 ...
- Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络
Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...
- 丰富图文详解B-树原理,从此面试再也不慌
本文始发于个人公众号:TechFlow,原创不易,求个关注 本篇原计划在上周五发布,由于太过硬核所以才拖到了这周五.我相信大家应该能从标题当中体会到这个硬核. 周五的专题是大数据和分布式,我最初的打算 ...
- Git详解之二 Git细节拾遗
git知识点详解 文件状态 现在我们手上已经有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝.接下来,对这些文件作些修改,在完成了一个阶段的目标之后,提交本次更新到仓库. 请记 ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介
1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...
- TensorFlow 安装详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 『不要把手段当成目标 — <一个瑜伽行者的自传>』 本文提纲 1. 机器学习 2 ...
- Percona-xtrabackup 使用详解与原理
现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...
随机推荐
- RESTful源码笔记之RESTful Framework的基本组件
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式. ...
- sprint2 团队贡献分
团队名:在考虑 团队贡献分: 102 杨晶晶:17 106 邹育萍:18 114 纪焓:16 116 黄敏鹏:28 117 郑培轩:26 138 曾昱霖:15 最新项目的github地址: https ...
- 基于NABCD评论探路者团队贪吃蛇作品及改进建议
1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...
- 《linux内核分析》 第二周
20135130 王川东 计算机三个“法宝”:存储程序计算机.函数调用堆栈和中断机制 深入理解函数调用堆栈: 堆栈是C语言运行时必须的一个记录调用路径和参数的空间: 作用包括: 函数调用框架: 保存参 ...
- flask验证登录学习过程(1)---实践flask_jwt
flask_jwt应用代码: from flask import Flask from flask_jwt import JWT,jwt_required,current_identity from ...
- Beta版冲刺前准备
[团队概要] 团队项目名:小葵日记 团队名:日不落战队 队员及角色: 队员 角色 备注 安琪 前端工程师 队长 佳莹 前端工程师 智慧 后端工程师 章鹏 后端工程师 语恳 UI设计师 炜坤 前端工程师 ...
- 博弈---ZOJ 3057 Beans Game(DP博弈)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3057 有豆类三个桩.TT和DD挑选任意数量的豆子从任何两堆轮流任何桩或相同 ...
- 不要USB数据线调试Android开发
不管是过去Eclipse还是现在的Android Studio开发Android,运行或者调试时都会利用USB数据线连接电脑和手机,特别是当现在的手机只有一个Type-c接口,意味着,插上后,啥也干不 ...
- eclipse中jsp页面Invalid location of tag 解决办法分析小结
在jsp页面使用标签过程中有时候不注意规则的话,eclipse会提示一些错误,下面针对这些错误提出相应的解决办法: <form></form>标签 1. Invalid loc ...
- 【C++】深度探索C++对象模型读书笔记--Data语意学(The Semantics of data)
1. 一个空类的大小是1 byte.这是为了让这一类的两个对象得以在内存中配置独一无二的地址. 2. Nonstatic data member 放置的是“个别的class object”感兴趣的数据 ...