news 2026/6/9 10:22:09

与学习相关的技巧(Batch Normalization)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
与学习相关的技巧(Batch Normalization)

Batch Normalization

在上一节,我们观察了各层的激活值分布,并从中了解到如果设定了合
适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进
行学习。那么,为了使各层拥有适当的广度,“强制性”地调整激活值的分布
会怎样呢?实际上,Batch Normalization[11]方法就是基于这个想法而产生的。

Batch Normalization 的算法

Batch Normalization(下文简称Batch Norm)是2015 年提出的方法。
Batch Norm虽然是一个问世不久的新方法,但已经被很多研究人员和技术
人员广泛使用。实际上,看一下机器学习竞赛的结果,就会发现很多通过使
用这个方法而获得优异结果的例子。

为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点。

  • 可以使学习快速进行(可以增大学习率)。
  • 不那么依赖初始值(对于初始值不用那么神经质)。
  • 抑制过拟合(降低Dropout等的必要性)。

考虑到深度学习要花费很多时间,第一个优点令人非常开心。另外,后
两点也可以帮我们消除深度学习的学习中的很多烦恼。

如前所述,Batch Norm的思路是调整各层的激活值分布使其拥有适当
的广度。为此,要向神经网络中插入对数据分布进行正规化的层,即Batch
Normalization 层(下文简称Batch Norm层),如图6-16 所示。

Batch Norm,顾名思义,以进行学习时的mini-batch 为单位,按minibatch
进行正规化。具体而言,就是进行使数据分布的均值为0、方差为1 的
正规化。用数学式表示的话,如下所示。

μ B ← 1 m ∑ i = 1 m x i \mu_B \leftarrow \frac{1}{m} \sum_{i=1}^m x_iμBm1i=1mxi

σ B 2 ← 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^m (x_i - \mu_B)^2σB2m1i=1m(xiμB)2

x ^ i ← x i − μ B σ B 2 + ϵ \hat{x}_i \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}x^iσB2+ϵxiμB
这里对mini-batch 的m个输入数据的集合B = x 1 , x 2 , . . . , x m B = {x_1, x_2, . . . , x_m}B=x1,x2,...,xm求均值
μB 和方差$\sigma_B^2 \leftarrow \frac{1}{m} $。然后,对输入数据进行均值为0、方差为1(合适的分布)的
正规化。式(6.7)中的ε 是一个微小值(比如,10e-7等),它是为了防止出现
除以0 的情况。

式(6.7)所做的是将mini-batch 的输入数据x 1 , x 2 , . . . , x m {x_1, x_2, . . . , x_m}x1,x2,...,xm变换为均值为0、方差为1 的数据,非常简单。通过将这个处理插入到
激活函数的前面(或者后面)A,可以减小数据分布的偏向。

接着,Batch Norm层会对正规化后的数据进行缩放和平移的变换,用
数学式可以如下表示。

y i ← γ x ^ i + β y_i \leftarrow \gamma \hat{x}_i + \betayiγx^i+β

这里,γ 和β 是参数。一开始γ = 1,β = 0,然后再通过学习调整到合
适的值。

上面就是Batch Norm的算法。这个算法是神经网络上的正向传播。如
果使用第5 章介绍的计算图,Batch Norm可以表示为图6-17。

Batch Norm的反向传播的推导有些复杂,这里我们不进行介绍。不过
如果使用图6-17的计算图来思考的话,Batch Norm的反向传播或许也能比较
轻松地推导出来。Frederik Kratzert 的博客“Understanding the backward
pass through Batch Normalization Layer”[13] 里有详细说明,感兴趣的读者
可以参考一下。

Batch Normalization的评估

现在我们使用Batch Norm 层进行实验。首先,使用MNIST数据集,观察使用Batch Norm层和不使用Batch Norm层时学习的过程会如何变化(源
代码在ch06/batch_norm_test.py中),结果如图6-18 所示。

从图6-18 的结果可知,使用Batch Norm后,学习进行得更快了。接着,
给予不同的初始值尺度,观察学习的过程如何变化。图6-19 是权重初始值的
标准差为各种不同的值时的学习过程图。

我们发现,几乎所有的情况下都是使用Batch Norm时学习进行得更快。
同时也可以发现,实际上,在不使用Batch Norm的情况下,如果不赋予一
个尺度好的初始值,学习将完全无法进行。

综上,通过使用Batch Norm,可以推动学习的进行。并且,对权重初
始值变得健壮(“对初始值健壮”表示不那么依赖初始值)。Batch Norm具备
了如此优良的性质,一定能应用在更多场合中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 17:13:15

医疗系统多表单连续操作测试方案

医疗信息系统(如HIS、EMR)常涉及挂号→问诊→检查→处方→结算的多表单串联操作。本文针对此类场景构建覆盖全链路的测试方案,重点解决数据一致性、状态流转及异常中断三大核心问题。 一、测试目标分层设计 功能连贯性验证 跨表单数据继承&a…

作者头像 李华
网站建设 2026/6/2 14:40:19

Java springboot基于Android的校园服务系统失物招领二手闲置跑腿代购(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录前言一、开发介绍二、详细视频演示三、项目部分实现截图 四、uniapp介绍 五、系统测试 六、代码参考 源码获取 目的 基于Android的校园服务系统整合失物招领、二手闲置交易、跑腿代购等功能,采用Spring Boot框架构建后端服务,My…

作者头像 李华
网站建设 2026/6/6 18:44:48

Java springboot基于微信小程序的仓库点单系统物资盘点(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 基于微信小程序的仓库点单系统,采用Spring Boot框架构建后端服务&#x…

作者头像 李华
网站建设 2026/6/9 1:01:35

AI写论文必知!4款AI论文生成工具,为你的论文创作保驾护航!

在2025年,学术写作迎来了智能化的浪潮,越来越多的人开始尝试使用AI写论文的工具。当涉及到硕士和博士等长篇论文时,许多工具却表现不佳。它们往往缺乏理论的深度,或者逻辑结构显得松散,不能满足专业论文写作的需求。普…

作者头像 李华
网站建设 2026/6/3 23:14:08

超实用!AI教材生成工具,快速编写低查重教材,轻松搞定教学难题

AI 教材写作工具:助力高效教材创作 在编写教材的过程中,我总是能精准感受到“缓慢进展”所带来的各种困扰。就算框架和资料准备得相当充分,内容撰写时却常常陷入瓶颈——有一句话反复修改半个小时,依旧觉得没有找到合适的表达&am…

作者头像 李华