因此,今天,我将探讨批量标准化( 批量标准化: 通过 Sergey Ioffe 和 Christian Szegedy 减少内部协变量来加速深度网络培训 )。 但是,为了加强我对数据预处理的理解,我将覆盖3个案例,
案例1 - 规范化 :整体数据(Numpy)
案例2 - 标准化 :整体数据(Numpy)
情况3 - 批量标准化 :微型批量(Numpy / Tensorflow)
**注**我不会在这篇文章中回顾传播!
实验设置
这个实验的设置非常简单。 要模拟真实世界的用例,可以从随机正常分布中创建一个32 * 32图像,并为其添加一些噪声。 以上是我们的形象。
红框 →(图像数量,图像宽度,图像高度,通道数量)现在我们将使用32 * 32灰度图像。
左图 →我们图像数据的直方图
正如您在上面看到的,我们的图像平均值为26,方差为306。左边我们可以看到图像数据的直方图。
情况1:标准化 - 整体数据
对于我们的第一种情况,我们可以对整个数据集进行标准化。 从视觉上看,我们可以观察到没有区别。
但是,一旦我们绘制直方图或查看均值和标准差,我们可以清楚地看到我们的数据在0和1的范围内。
案例2:标准化 - 整体数据
再一次,从视觉上看,我看不出有什么不同。
但是,当我们看到直方图的轴时,我们可以清楚地看到,我们的数据的均值已经移到0(几乎),方差是1。
标准化/标准化方程式
来自这个网站的图片
左→方程式进行归一化
右 →标准化等式
以防万一,如果有人想知道,让我们回顾一下正常化和标准化的情况。 请注意, μ是平均值, σ是标准偏差。
批量标准化等式
红框→用于标准化的等式
蓝线→要学习的参数
现在我们已经涉及了规范化和标准化,我们可以看到批量规范化的公式与标准化的过程完全相同。 唯一的区别是gamma和beta术语,用蓝色下划线。 我们可以将这些术语看作完全像权重,我们将根据地面实况数据计算误差,并使用反向传播学习这些参数。
但有一件事我想注意! 如果我们设置伽玛(谢谢 洛阳方 纠正我 ) 为1,贝塔值为0,那么整个过程就是标准化。 而对于Tensorflow的实施,我们将滥用这个属性。
案例3:批量标准化 - 纯粹实施
红线 →迷你批次,从我们的图像数据的前10个图像
蓝框 →数据标准化
这里有一点需要注意,对于批量标准化,我们将从我们的测试数据中获取前10个图像并应用批量标准化。
再次,我们可以看到平均值在0左右,方差为1.现在让我们来看看张量流的实现。
情况3:批量标准化 - Tensorflow
红线 →迷你批次,从我们的图像数据的前10个图像
蓝线→偏移(Beta)为0,缩放(Gamma)为1
再一次,在视觉上,我们看不出任何区别。
但是,如果我们看一下数据的均值和方差,我们可以看到它与应用标准化完全相同 。
交互式代码(Google Collab / Replit / Microsoft Azure Notebook)
对于Google Colab,您需要一个Google帐户才能查看代码,并且您无法在Google Colab中运行只读脚本,因此请在游戏场地上制作副本。 最后,我绝不会要求获得在Google云端硬盘上访问您的文件的权限,仅供参考。 快乐编码!
要访问Google Colab上的代码, 请点击此处 。
要访问Repl上的代码, 请点击此处 。
要访问Microsoft Azure Notebook上的代码, 请点击此处 。
最后的话
最近Face book AI研究小组正式发布。 ( 由 吴宇欣 和 何凯明 组织的标准化 )我会尽力掩盖这一点。
如果发现任何错误,请发送电子邮件至[email protected],如果您希望查看我所有写作的列表,请在此处查看我的网站 。
同时在我的twitter上跟随我,访问我的网站或我的Youtube频道获取更多内容。 如果您有兴趣,我也在这里比较了解耦神经网络。
参考
- CS231n 2016年冬季:第5讲:神经网络第2部分(2018年)。 YouTube上。 检索2018年3月19日,从https://www.youtube.com/watch?v=gYpoJMlgyXA&feature=youtu.be&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC&t=3078
- Thorey,C。(2016)。 通过批量标准化的梯度是什么样的? Cthorey.github.io。 检索于2018年3月19日,来自http://cthorey.github.io/backpropagation/
- 批量范数Backprop方程的导出| Chris Yeh。 (2018)。 Chrisyeh96.github.io。 检索于2018年3月19日,来自https://chrisyeh96.github.io/2017/08/28/deriving-batchnorm-backprop.html
- 导出批量归一化后向梯度的梯度。 (2018)。 Kevinzakka.github.io。 检索于2018年3月19日,来自https://kevinzakka.github.io/2016/09/14/batch_normalization/
- 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
- (2018)。 Arxiv.org。 检索于2018年3月19日,来自https://arxiv.org/pdf/1502.03167.pdf
- 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
- 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
- numpy.var - NumPy v1.14手册。 (2018)。 Docs.scipy.org。 检索于2018年3月26日,来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.var.html
- 资料?,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
- 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
- Wu,Y.,&He,K。(2018)。 组标准化。 Arxiv.org。 检索于2018年3月27日,来自https://arxiv.org/abs/1803.08494
- 标准化与标准化| 数据挖掘博客 - www.dataminingblog.com 。 (2007年)。 Dataminingblog.com。 检索于2018年3月27日,来自http://www.dataminingblog.com/standardization-vs-normalization/
- Ioffe,S.,&Szegedy,C。(2015)。 批量标准化:通过减少内部协变量来加速深度网络培训。 Arxiv.org。 检索于2018年3月27日,来自https://arxiv.org/abs/1502.03167
- 正态分布。 (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