因此,今天,我将探讨批量标准化( 批量标准化: 通过 Sergey Ioffe 和 Christian Szegedy 减少内部协变量来加速深度网络培训 )。 但是,为了加强我对数据预处理的理解,我将覆盖3个案例,
案例1 - 规范化 :整体数据(Numpy)
案例2 - 标准化 :整体数据(Numpy)
情况3 - 批量标准化 :微型批量(Numpy / Tensorflow)
**注**我不会在这篇文章中回顾传播!
实验设置
![](https://cdn-images-1.medium.com/max/1200/1*v9Qdu7kEM7ZrbC-rFnvzIg.png)
![](https://cdn-images-1.medium.com/max/1200/1*t6hXXvoqeJe4hhh8wH5dfQ.png)
![](https://cdn-images-1.medium.com/max/800/1*4TK0h4_AINYymXWbFGP2Fw.png)
![](https://cdn-images-1.medium.com/max/1600/1*fJiU3WouiU_3mGstSs0Zyg.png)
红框 →(图像数量,图像宽度,图像高度,通道数量)现在我们将使用32 * 32灰度图像。
左图 →我们图像数据的直方图
正如您在上面看到的,我们的图像平均值为26,方差为306。左边我们可以看到图像数据的直方图。
情况1:标准化 - 整体数据
![](https://cdn-images-1.medium.com/max/1200/1*FxUb57f-MnTsXKe3hK_cbg.png)
![](https://cdn-images-1.medium.com/max/1200/1*AnoNwYUac9Xk0-Kj8_1Xmg.png)
![](https://cdn-images-1.medium.com/max/800/1*Hnzh1LSq-wS41d7fKfyuaw.png)
![](https://cdn-images-1.medium.com/max/1600/1*awI18jG3_emJ98Tz5mztuw.png)
但是,一旦我们绘制直方图或查看均值和标准差,我们可以清楚地看到我们的数据在0和1的范围内。
案例2:标准化 - 整体数据
![](https://cdn-images-1.medium.com/max/1200/1*Rh9FAXH_EtaJwaKqVh4oEA.png)
![](https://cdn-images-1.medium.com/max/1200/1*p1RDofSFrSZcpa8Y6z1Y8A.png)
再一次,从视觉上看,我看不出有什么不同。
![](https://cdn-images-1.medium.com/max/800/1*JevHVRMixsivWcEulq5VPQ.png)
![](https://cdn-images-1.medium.com/max/1600/1*huExjJIhG1mq6zRPK6d5xQ.png)
但是,当我们看到直方图的轴时,我们可以清楚地看到,我们的数据的均值已经移到0(几乎),方差是1。
批量标准化等式
![](https://cdn-images-1.medium.com/max/1600/1*Wh5KvzofrPoaod0RpkQgQA.png)
红框→用于标准化的等式
蓝线→要学习的参数
现在我们已经涉及了规范化和标准化,我们可以看到批量规范化的公式与标准化的过程完全相同。 唯一的区别是gamma和beta术语,用蓝色下划线。 我们可以将这些术语看作完全像权重,我们将根据地面实况数据计算误差,并使用反向传播学习这些参数。
但有一件事我想注意! 如果我们设置伽玛(谢谢 洛阳方 纠正我 ) 为1,贝塔值为0,那么整个过程就是标准化。 而对于Tensorflow的实施,我们将滥用这个属性。
案例3:批量标准化 - 纯粹实施
![](https://cdn-images-1.medium.com/max/1600/1*SQJUUQ6dKVAh14CFubRiLg.png)
红线 →迷你批次,从我们的图像数据的前10个图像
蓝框 →数据标准化
![](https://cdn-images-1.medium.com/max/1200/1*6GsJ5Q-fRfgK_bJDxuMU6w.png)
![](https://cdn-images-1.medium.com/max/1200/1*LtUxg28mT8tLDD45hFnYuQ.png)
这里有一点需要注意,对于批量标准化,我们将从我们的测试数据中获取前10个图像并应用批量标准化。
![](https://cdn-images-1.medium.com/max/800/1*xyHd9VFFyirGRD5Ez3Hleg.png)
![](https://cdn-images-1.medium.com/max/1600/1*xEKh6m4Q76BaMk41mQoMgA.png)
再次,我们可以看到平均值在0左右,方差为1.现在让我们来看看张量流的实现。
情况3:批量标准化 - Tensorflow
![](https://cdn-images-1.medium.com/max/1600/1*-VF0YXVZXleNJjBFobtf5w.png)
红线 →迷你批次,从我们的图像数据的前10个图像
蓝线→偏移(Beta)为0,缩放(Gamma)为1
![](https://cdn-images-1.medium.com/max/1200/1*LtUxg28mT8tLDD45hFnYuQ.png)
![](https://cdn-images-1.medium.com/max/1200/1*6GsJ5Q-fRfgK_bJDxuMU6w.png)
再一次,在视觉上,我们看不出任何区别。
![](https://cdn-images-1.medium.com/max/800/1*xyHd9VFFyirGRD5Ez3Hleg.png)
![](https://cdn-images-1.medium.com/max/1600/1*Mpme6YXMp7s3jxSNOol6QA.png)
但是,如果我们看一下数据的均值和方差,我们可以看到它与应用标准化完全相同 。
交互式代码(Google Collab / Replit / Microsoft Azure Notebook)
![](https://cdn-images-1.medium.com/max/800/1*dTM2zq8YLPvceF9rVApSfQ.png)
![](https://cdn-images-1.medium.com/max/800/1*nWQt9z2EHbQiaiYa-75KdQ.png)
![](https://cdn-images-1.medium.com/max/800/1*9-LZ1C0y_DJM8Ufi_ME4Bw.png)
参考
- 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