【动手学计算机视觉】第十三讲:批量归一化

简介: 当我们使用一些波动幅度较大的数据做预测分析时,我们需要对它进行标准化、归一化、滑动窗口等方式做预处理,这样不仅可以提高计算速度,还可以一定程度上提高结果的准确度。这一点在深度神经网络中同样适用,批量归一化(Batch Normalization, BN)就是其中用于数据归一化的一种非常常用的算法,在tensorflow、mxnet这些知名的机器学习框架中都对BN进行了实现,它不仅能够加快训练过程,同时还具备一些正则化功能,对防止过拟合具有一定作用。下面就来详细介绍一下这个算法。备注:在有些文章中Batch Normalization也有被译作批量标准化

前言

当我们用一些数据做一个预测系统时,我们首先需要对数据进行预处理,例如标准化、正则化、滑动窗口等,比如常用的Z-score、最大最小标准化,它能将数据转化为同一个量级,这样的话能够保证数据的稳定性、可比性。

这些标准化方法在浅层神经网络中已经足够使用,效果已经很不错。但是在深度学习中,网络越来越深,使用这些标准化方法就难以解决相应的问题。

为什么需要批量归一化?

在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的去适应新的数据分布,在深度神经网络中,这让训练变得非常复杂而且缓慢。对于这样,往往需要设置更小的学习率、更严格的参数初始化。通过使用批量归一化(Batch Normalization, BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布,这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的,这样就解决了数据分布不断改变带来的训练缓慢、小学习率等问题。

在哪里使用批量归一化?

批量归一化是卷积神经网络中一个可选单元,如果使用BN能够保证训练速度更快,同时还可以具备一些正则化功能。

在卷积神经网络中卷积层和全连接层都可以使用批量归一化。

对于卷积层,它的位置是在卷积计算之后、激活函数之前。对于全连接层,它是在仿射变换之后,激活函数之前,如下所示:

conv_1 = tf.nn.conv2d()
norm_1 = tf.nn.batch_normalization(conv_1)
relu_1 = tf.nn.relu(norm_1)
pool_1 = tf.nn.max_pool(relu_1)

以卷积层为例,网络架构的流程为:

  • 卷积运算
  • 批量归一化
  • 激活函数
  • 池化

批量归一化

65.png

在讲批量归一化之前,首先讲一下数据标准化处理算法Z-score。Z-score标准化也成为标准差标准化,它是将数据处理成均值为0,方差为1的标准正态分布,它的转化公式为,

66.png

67.png

其实批量归一化在思想上和Z-score是有很多共通之处的。

在深度学习训练过程中会选取一个小批量,然后计算小批量数据的均值和方差,

68.png

然后对数据进行归一化处理,


69.png

70.png

下面看一下原文中批量归一化的算法步骤:

71.png

  • 获取每次训练过程中的样本
  • 就算小批量样本的均值、方差
  • 归一化
  • 拉伸和偏移

这里要着重介绍一下最后一步尺度变换(scale and shift),前面3步已经对数据进行了归一化,为什么还需要拉伸和偏移呢?因为经过前三步的计算使得数据被严格的限制为均值为0、方差为1的正态分布之下,这样虽然一定程度上解决了训练困难的问题,但是这样的严格限制网络的表达能力,通过加入拉伸偏移这两个参数可以使得数据分布的自由度更高,网络表达能力更强。另外,这两个参数和其他参数相同,通过不断的学习得出。

tensorflow中BN的使用

在tensorflow中可以直接调用批量归一化对数据进行处理,它的函数为,

tf.nn.batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None)

来解释一下函数中参数的含义:

  • x:输入的数据,可以是卷积层的输出,也可以是全连接层的输出
  • mean:输出数据的均值
  • variance:输出数据的方差
  • offset:偏移,就是前面提到的beta
  • scale:缩放,前面提到的gamma
  • variance_epsilon:一个极小的值,避免分母为0


相关文章
|
11月前
|
自然语言处理 算法 BI
Baum-Welch算法
Baum-Welch算法是一种用于隐马尔可夫模型(HMM)的训练算法,通过期望最大化(EM)框架迭代估计模型参数,直至收敛。该算法主要应用于语音识别、生物信息学和自然语言处理等领域,通过优化初始状态概率、状态转移概率和观测概率,提高模型对观测数据的拟合度。尽管存在局部最优和计算复杂性等挑战,但仍是HMM参数估计的重要工具。
|
12月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
3161 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的人力资源招聘与员工培训
【7月更文挑战第25天】 ERP系统中的人力资源招聘与员工培训
214 1
|
数据可视化 Ubuntu Linux
PyCharm连接远程服务器配置的全过程
相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。 通常服务器系统采用Linux,而我们平常使用频繁的是Windows系统,二者在操作方面存在很大的区别,比如我们实验室的服务器采用Ubuntu系统,创建远程交互任务时可以使用Terminal终端或者VNC桌面化操作,我觉得VNC很麻烦,所以采用Terminal进行实验,但是Terminal操作给我最不好的体验就是无法可视化中间实验结果,而且实验前后的数据上传和下载工作也让我头疼不已。
|
移动开发 C#
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
481 0
|
人工智能 NoSQL atlas
Fireworks AI和MongoDB:依托您的数据,借助优质模型,助力您开发高速AI应用
我们欣然宣布MongoDB与 Fireworks AI 正携手合作让客户能够利用生成式人工智能 (AI)更快速、更高效、更安全地开展创新活动
2984 2
|
vr&ar
分解为BCNF范式的方法(详细讲解)
分解为BCNF范式的方法(详细讲解)
425 1
|
Linux
Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示
Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示
838 0
|
监控 数据可视化 前端开发
基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)
基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)
|
人工智能 算法 计算机视觉
极智AI | 目标检测实现分享一:详解YOLOv1算法实现
大家好,我是极智视界,本文详细介绍一下 YOLOv1 算法的设计与实现,包括训练。
566 0