天天看点

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

因此,今天,我将探讨批量标准化( 批量标准化: 通过 Sergey Ioffe 和 Christian Szegedy 减少内部协变量来加速深度网络培训 )。 但是,为了加强我对数据预处理的理解,我将覆盖3个案例,

案例1 - 规范化 :整体数据(Numpy)

案例2 - 标准化 :整体数据(Numpy)

情况3 - 批量标准化 :微型批量(Numpy / Tensorflow)

**注**我不会在这篇文章中回顾传播!

实验设置

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

这个实验的设置非常简单。 要模拟真实世界的用例,可以从随机正常分布中创建一个32 * 32图像,并为其添加一些噪声。 以上是我们的形象。

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

红框 →(图像数量,图像宽度,图像高度,通道数量)现在我们将使用32 * 32灰度图像。

左图 →我们图像数据的直方图

正如您在上面看到的,我们的图像平均值为26,方差为306。左边我们可以看到图像数据的直方图。

情况1:标准化 - 整体数据

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

对于我们的第一种情况,我们可以对整个数据集进行标准化。 从视觉上看,我们可以观察到没有区别。

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

但是,一旦我们绘制直方图或查看均值和标准差,我们可以清楚地看到我们的数据在0和1的范围内。

案例2:标准化 - 整体数据

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

再一次,从视觉上看,我看不出有什么不同。

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

但是,当我们看到直方图的轴时,我们可以清楚地看到,我们的数据的均值已经移到0(几乎),方差是1。

标准化/标准化方程式

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

来自这个网站的图片

左→方程式进行归一化

右 →标准化等式

以防万一,如果有人想知道,让我们回顾一下正常化和标准化的情况。 请注意, μ是平均值, σ是标准偏差。

批量标准化等式

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

红框→用于标准化的等式

蓝线→要学习的参数

现在我们已经涉及了规范化和标准化,我们可以看到批量规范化的公式与标准化的过程完全相同。 唯一的区别是gamma和beta术语,用蓝色下划线。 我们可以将这些术语看作完全像权重,我们将根据地面实况数据计算误差,并使用反向传播学习这些参数。

但有一件事我想注意! 如果我们设置伽玛(谢谢 洛阳方 纠正我 ) 为1,贝塔值为0,那么整个过程就是标准化。 而对于Tensorflow的实施,我们将滥用这个属性。

案例3:批量标准化 - 纯粹实施

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

红线 →迷你批次,从我们的图像数据的前10个图像

蓝框 →数据标准化

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

这里有一点需要注意,对于批量标准化,我们将从我们的测试数据中获取前10个图像并应用批量标准化。

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

再次,我们可以看到平均值在0左右,方差为1.现在让我们来看看张量流的实现。

情况3:批量标准化 - Tensorflow

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

红线 →迷你批次,从我们的图像数据的前10个图像

蓝线→偏移(Beta)为0,缩放(Gamma)为1

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

再一次,在视觉上,我们看不出任何区别。

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

但是,如果我们看一下数据的均值和方差,我们可以看到它与应用标准化完全相同 。

交互式代码(Google Collab / Replit / Microsoft Azure Notebook)

【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code

对于Google Colab,您需要一个Google帐户才能查看代码,并且您无法在Google Colab中运行只读脚本,因此请在游戏场地上制作副本。 最后,我绝不会要求获得在Google云端硬盘上访问您的文件的权限,仅供参考。 快乐编码!

要访问Google Colab上的代码, 请点击此处 。

要访问Repl上的代码, 请点击此处 。

要访问Microsoft Azure Notebook上的代码, 请点击此处 。

最后的话

最近Face book AI研究小组正式发布。 ( 由 吴宇欣 和 何凯明 组织的标准化 )我会尽力掩盖这一点。

如果发现任何错误,请发送电子邮件至[email protected],如果您希望查看我所有写作的列表,请在此处查看我的网站 。

同时在我的twitter上跟随我,访问我的网站或我的Youtube频道获取更多内容。 如果您有兴趣,我也在这里比较了解耦神经网络。

参考

  1. CS231n 2016年冬季:第5讲:神经网络第2部分(2018年)。 YouTube上。 检索2018年3月19日,从https://www.youtube.com/watch?v=gYpoJMlgyXA&feature=youtu.be&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC&t=3078
  2. Thorey,C。(2016)。 通过批量标准化的梯度是什么样的? Cthorey.github.io。 检索于2018年3月19日,来自http://cthorey.github.io/backpropagation/
  3. 批量范数Backprop方程的导出| Chris Yeh。 (2018)。 Chrisyeh96.github.io。 检索于2018年3月19日,来自https://chrisyeh96.github.io/2017/08/28/deriving-batchnorm-b​​ackprop.html
  4. 导出批量归一化后向梯度的梯度。 (2018)。 Kevinzakka.github.io。 检索于2018年3月19日,来自https://kevinzakka.github.io/2016/09/14/batch_normalization/
  5. Kratzert,F。(2018)。 了解向后传递批处理标准化层。 Kratzert.github.io。 检索2018年3月19日,从https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html
  6. (2018)。 Arxiv.org。 检索于2018年3月19日,来自https://arxiv.org/pdf/1502.03167.pdf
  7. numpy.histogram - NumPy v1.13手册。 (2018)。 Docs.scipy.org。 检索于2018年3月19日,来自https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.histogram.html
  8. numpy.random.weibull - NumPy v1.13手册。 (2018)。 Docs.scipy.org。 检索于2018年3月19日,来自https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.weibull.html#numpy.random.weibull
  9. numpy.var - NumPy v1.14手册。 (2018)。 Docs.scipy.org。 检索于2018年3月26日,来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.var.html
  10. 资料?,H。(2018)。 如何使用Python中的Matplotlib绘制一个直方图并列出数据? Stackoverflow.com。 检索2018年3月26日,从https://stackoverflow.com/questions/33203645/how-to-plot-a-histogram-using-matplotlib-in-python-with-a-list-of-data
  11. numpy.random.randn - NumPy v1.14手册。 (2018)。 Docs.scipy.org。 检索于2018年3月27日,来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html
  12. Wu,Y.,&He,K。(2018)。 组标准化。 Arxiv.org。 检索于2018年3月27日,来自https://arxiv.org/abs/1803.08494
  13. 标准化与标准化| 数据挖掘博客 - www.dataminingblog.com 。 (2007年)。 Dataminingblog.com。 检索于2018年3月27日,来自http://www.dataminingblog.com/standardization-vs-normalization/
  14. Ioffe,S.,&Szegedy,C。(2015)。 批量标准化:通过减少内部协变量来加速深度网络培训。 Arxiv.org。 检索于2018年3月27日,来自https://arxiv.org/abs/1502.03167
  15. 正态分布。 (2018)。 Mathsisfun.com。 检索于2018年3月27日,来自https://www.mathsisfun.com/data/standard-normal-distribution.html

https://towardsdatascience.com/understanding-batch-normalization-with-examples-in-numpy-and-tensorflow-with-interactive-code-7f59bb126642

继续阅读