Batch Normalization 批归一化 每个mini-batch进行归一化操作 显著提高深度神经网络的训练速度和性能

Batch Normalization

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

NLP相关Paper笔记和代码复现

本文提出了Batch Normalization(批标准化)技术,旨在加速深度神经网络的训练过程,并通过减少内部协变量偏移(internal covariate shift)来提高模型的泛化能力。内部协变量偏移指的是在训练过程中,由于网络参数的更新,每一层的输入分布会发生变化,这导致训练变得困难。Batch Normalization通过标准化每一层的输入,使得每一层的输入分布具有固定的均值和方差,从而提高了训练效率和模型的稳定性。

  • 关键内容:

内部协变量偏移:在训练深度神经网络时,由于网络参数的更新,每一层的输入分布会发生变化,这种现象被称为内部协变量偏移。内部协变量偏移导致训练困难,因为网络需要不断地适应新的输入分布。

Batch Normalization:Batch Normalization技术通过在每一层之后添加标准化操作来减少内部协变量偏移。具体地,它计算每一批数据的均值和方差,并使用这些统计量来标准化该层的输出。然后,通过一个可学习的仿射变换(affine transformation)来恢复数据的表示能力。

标准化和仿射变换:对于给定的输入x,Batch Normalization首先计算其均值μ和方差σ²,然后将其标准化为(x - μ) / √(σ² + ε),其中ε是一个小的常数以避免除以零。接下来,通过一个可学习的缩放因子γ和偏移量β对标准化后的数据进行仿射变换,得到最终的输出y = γ * (x - μ) / √(σ² + ε) + β。

  • Batch Normalization的优点:

加速训练:通过减少内部协变量偏移,Batch Normalization使得训练过程更加稳定,从而可以使用更大的学习率来加速训练。

提高泛化能力:Batch Normalization具有正则化效果,可以减少过拟合,从而提高模型的泛化能力。

允许使用更大的学习率:由于Batch Normalization使得训练过程更加稳定,因此可以使用更大的学习率来加速训练。

不再需要逐层预训练:在引入Batch Normalization之前,训练深度神经网络通常需要逐层预训练。而Batch Normalization使得训练整个网络成为可能。

训练深度神经网络非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化,导致调参工作要做的很小心,训练更加困难,论文中将这种现象称为“internal covariate shift”,而Batch Normalization正式用来解决深度神经网络中internal covariate shift现象的方法。有关covariate shift的内容,可以参阅我另一篇论文阅读笔记。

介绍

Batch Normalization是在每个mini-batch进行归一化操作,并将归一化操作作为模型体系结构的一部分,使用BN可以获得如下的好处,Batch Normalization(BN)是深度学习中的一个重要技术,特别在训练深度神经网络时,它带来了很多好处。下面我将详细解释你提到的这些好处:

  • 可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度。通过归一化操作,Batch Normalization将每个神经元的激活值限制在一个合理的范围内,使得梯度在反向传播时更加稳定,因此可以使用更大的学习率来加速训练过程
  • 可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。在Batch Normalization中,由于已经对每个mini-batch的数据进行了均值和方差的归一化,因此在归一化后的层中,bias项可以被安全地省略,因为均值已经被调整为
  • 对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差也会放缩同样的倍数,相除抵消。传统的神经网络训练对权重初始化非常敏感,不合适的初始化可能导致训练陷入局部最小值或训练过程不稳定。Batch Normalization通过归一化操作,使得模型对权重的尺度不再敏感,因此可以使用简单的初始化方法,如均值为0、方差为1的高斯分布。
  • 对权重的尺度不再敏感。在Batch Normalization中,权重的尺度变化会被归一化操作所抵消,因此模型对权重的具体尺度不再敏感。这使得模型在训练过程中更加鲁棒。
  • 深层网络可以使用sigmoid和tanh了,BN抑制了梯度消失。在没有Batch Normalization的情况下,深层网络中的sigmoid和tanh激活函数在反向传播时容易出现梯度消失的问题。Batch Normalization通过限制激活值的范围,缓解了这个问题,使得深层网络可以更有效地使用这些激活函数。
  • **Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合。**由于Batch Normalization在训练过程中引入了随机性(每个mini-batch的数据分布可能略有不同),它实际上起到了一种正则化的作用。这有助于减少过拟合,使得模型在测试集上的性能更好。因此,在使用Batch Normalization时,可以适当减少其他正则化技术(如dropout)的使用。

总的来说,Batch Normalization是一个简单而有效的技术,可以显著提高深度神经网络的训练速度和性能。然而,需要注意的是,虽然Batch Normalization带来了很多好处,但它并不是万能的,在某些情况下可能并不适用或效果不佳。因此,在使用Batch Normalization时,需要根据具体的问题和数据集进行选择和调整。

我们从梯度计算开始看起,如在SGD中是优化参数 θ \theta θ,从而最小化损失,如下公式:
θ = a r g m i n θ 1 N ∑ i = 1 N l ( x i , θ ) \theta=arg\underset{\theta}{min}\frac{1}{N}\sum_{i=1}^{N}l(x_i,\theta) θ=argθminN1i=1Nl(xi,θ)
其中, x 1 . . . x N x_1...x_N x1...xN是训练数据集。使用SGD,训练将逐步进行,并且在每个步骤中,我们考虑大小为 m m m 的mini-batch,即 x 1 . . . m x_1...m x1...m,通过计算 1 m ∂ ( x i , θ ) ∂ θ \frac{1}{m}\frac{\partial(x_i,\theta)}{\partial\theta} m1θ(xi,θ),使用小批量数据来近似损失函数关于参数的梯度。使用小批量样本,而不是一次一个样本,在一些方面是有帮助的。首先,小批量数据的梯度损失是训练集上的梯度估计,其质量随着批量增加而改善。第二,由于现代计算平台提供的并行性,对一个批次的计算比单个样本计算 m m m 次效率更高。

虽然随机梯度是简单有效的,但它需要仔细调整模型的超参数,特别是优化中使用的学习速率以及模型参数的初始值。训练的复杂性在于每层的输入受到前面所有层的参数的影响——因此当网络变得更深时,网络参数的微小变化就会被放大。如果我们能保证非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,训练将加速。

BN之前的一些减少Covariate Shift的方法

对网络的输入进行白化,网络训练将会收敛的更快——即输入线性变换为具有零均值和单位方差,并去相关。当每一层观察下面的层产生的输入时,实现每一层输入进行相同的白化将是有利的。通过白化每一层的输入,我们将采取措施实现输入的固定分布,消除Internal Covariate Shift的不良影响。那么如何消除呢?考虑在每个训练步骤或在某些间隔来白化激活值,通过直接修改网络或根据网络激活值来更改优化方法的参数,但这样会弱化梯度下降步骤。

例如:例如,考虑一个层,其输入u加上学习到的偏置 b b b,通过减去在训练集上计算的激活值的均值对结果进行归一化: x ^ = x − E [ x ] \hat x=x - E[x] x^=xE[x] x = u + b x = u+b x=u+b X = x 1 … N X={x_{1\ldots N}} X=x1N 是训练集上 x x x 值的集合, E [ x ] = 1 N ∑ i =

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图文教程 | 2024年IDEA安装使用、破解教程,JDK简易下载方法

前言 📢博客主页:程序源⠀-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 目录 一、IDEA安装 二、激活 三、JDK安装 四、JDK环境配置 五、验证 一、IDEA安装 进入官网下载: Other…

命令行中,Python 想使用本地环境,但总是显示为Anaconda的虚拟环境

电脑环境 Python 本地环境(Python3.9.5)Anaconda 虚拟环境(Python3.8.8) 遇到的问题 在cmd 中,我想在本地环境使用 Python、pip ,但它却是一直识别成Anaconda的虚拟环境。 解决方法 环境变量配置中&am…

Go Gin使用JWT实现认证机制

什么是JWT JWT是JSON Web Token的缩写,是一种跨域认证的解决方案。 使用JWT解决什么问题 传统的登录认证的实现,依赖客户端浏览器的cookie和服务器的session,这种实现登录的方式有很大的局限性。 对于部署在单台服务器的应用来说,使用cookie+session登录认证的方案尚…

✅什么是时间轮?

一、问题解析 时间轮算法(Time Wheel Algorithm)是一种用于处理定时任务和调度的常见算法。 时间轮算法主要需要定义一个时间轮盘,在一个时间轮盘中划分出多个槽位,每个槽位表示一个时间段,这个段可以是秒级、分钟级、…

数据结构(十五)----排序算法(2)

目录 一.选择排序 1.简单选择排序 2.堆排序 •建立大根堆 •基于大根堆进行排序 堆排序算法效率: 堆排序算法稳定性: 3.堆的插入和删除 •在堆中插入新元素 •在堆中删除元素 二.归并排序 归并排序算法效率: 归并排序算法的稳定…

Reverst:基于QUIC协议和HTTP3的反向隧道工具

关于Reverst Reverst是一款功能强大的反向隧道工具,Reverst由一个具备负载均衡功能的反向隧道服务器和一个服务器-客户端库组成,该工具使用Go语言开发,基于QUIC和HTTP/3实现其功能。 关于QUIC和HTTP/3 QUIC,即快速UDP互联网连接…

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…

photoshop(PS)有什么快速提升工作效率的功能?或者实用功能?这里告诉你7条!

1:文件太多,不方便马上找到需要插入元素(元素放入PS会发现,位置不知道在哪里),点击需要选中或者搭配的元素,ctrlV就可以快速插入目标/图层元素的位置了! 点击当前元素,选中&#xf…

Linux备份---异地

参考文档:Linux环境实现mysql所在服务器定时同步数据文件到备份服务器(异地容灾备份场景)_mysql异地备份-CSDN博客 通过SSH进行连接: 应用服务器: 通过ssh-keygen -t rsay建立ssh通信的密钥 密钥建立后,…

边缘计算安全有多重要

德迅云安全研究发现边缘安全是对存储或处理在网络边缘的数据的保护。边缘可以用不同的方式定义,但一般来说,它包括企业直接控制之外的任何设备或位置。这可能包括传感器、连接物联网的设备和移动设备。 边缘计算正在彻底改变商业运作方式。这引发了对边缘…

VuePress与Docusaurus:构建高效文档站点

VuePress 和 Docusaurus 都是非常流行的开源静态站点生成器,特别适用于构建技术文档和知识库。它们都提供了美观的预设主题、易于使用的Markdown语法支持以及自动生成的导航和侧边栏。 2500G计算机入门到高级架构师开发资料超级大礼包免费送! VuePress…

维修AB罗克韦尔工控机 PanelView 900 2711-T9C8 SER C 触摸屏人机界面

可视化和 HMI 解决方案可帮助您满足生产力、创新和全球化需求。为电子操作员界面终端、分布式客户端/服务器 HMI 和信息软件提供了一致的外观和感觉。编程工具和高级软件应用程序包括远程访问和数据分析,可加速开发并提高效率。 图形终端 图形终端提供各种尺寸、操…

SpringBoot 使用logback(多环境配置)

Logback是由log4j创始人设计的又一个开源日志组件。可用于项目日志功能。官网地址 第1步&#xff1a;添加坐标依赖 <!--logback--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version…

Python 提取PDF表格数据并保存到TXT文本或Excel文件

目录 安装Python库 Python提取PDF表格数据并保存到文本文档 Python提取PDF表格数据并保存到Excel文档 PDF文件常用于存储和共享各种类型的文档&#xff0c;这些文档可能包括大量的数据表格。通过提取这些PDF表格数据&#xff0c;我们可以将其导入到Excel、数据库或统计软件等…

技术架构

一、单机架构 简介&#xff1a;应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期&#xff0c;访问量比较小&#xff0c;单机足以满足 架构工作原理&#xff1a;以电商为例&#xff0c;可以看到通过应用&#xff08;划分了多个模块&#xff09;和数据库在单个服…

开发者选型:小程序原生or 小程序框架?

从2017年小程序推出以来&#xff0c;小程序的发展可谓突飞猛进。其流量入口多、易于传播且开发成本低的特性&#xff0c;使得越来越多的企业摒弃原生开发选择小程序。市场业务需求也越来越大&#xff0c;但是对于开发者来说哦&#xff0c;用原生去开发小程序很难受&#xff0c;…

C++ STL概念之 序列式容器4(bitset / array / forward_list / deque)

bitset 接口 set all bits (1) bitset& set() noexcept;single bit (2) bitset& set (size_t pos, bool val true); 用于序列中的一位或所有位设置为1。 bitset& set() noexcept; 这个版本将位序列中的所有位都设为1。 bitset& set(size_t pos, bool val …

Java 高级面试问题及答案2

Java 高级面试问题及答案 问题 1: 请解释 Java 中的多线程和并发的区别&#xff0c;并举例说明如何避免常见的并发问题。 答案&#xff1a; 多线程是指程序中有多个线程同时执行&#xff0c;而并发是指程序设计中允许多个操作看起来是同时执行的&#xff0c;即使它们可能不是…

视频智能检测AI智能分析网关V4告警消息推送:公众号消息推送的配置步骤介绍

TSINGSEE青犀智能分析网关V4属于高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;目前拥有3种型号&#xff08;8路/16路/32路&#xff09;&#xff0c;支持Caffe/DarkNet/TensorFlow/PyTorch/MXNet/ONNX/PaddlePaddle等主流深度学习框架。硬件内部署了近40种AI算法模型…

继承,多态,封装以及对象的打印

前言&#xff1a; 我们都知道Java是一种面向对象的编程语言&#xff0c;面向对象语言的三大特性就是继承&#xff0c;多态&#xff0c;封装&#xff0c;而这些特性正好的Java基础的一个主体内容。在学到这之前&#xff0c;我们肯定已经学习过了类和对象&#xff0c;所以这部分…