小知识点快速总结:Batch Normalization Layer(BN层)的作用

2024-06-16 10:04

本文主要是介绍小知识点快速总结:Batch Normalization Layer(BN层)的作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本系列文章只做简要总结,不详细说明原理和公式。

目录

  • 1. 参考文章
  • 2. 主要作用
  • 3. 具体分析
    • 3.1 正则化,降低过拟合
    • 3.2 提高模型收敛速度,加速训练
    • 3.3 减少梯度爆炸或者梯度消失的情况
  • 4. 补充
    • 4.1 BN层做的是标准化不是归一化
    • 4.2 BN层的公式
    • 4.3 BN层为什么要引入gamma和beta参数

1. 参考文章

[1] Sergey Ioffe, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”
[2] WellWang_S, “神经网络中BN层的原理与作用”
[3] 是Dream呀,“机器学习:BN层介绍及深入理解”
[4] 标准化和归一化,请勿混为一谈,透彻理解数据变换
[5] 针对:'‘标准化和归一化什么区别?’'问题,答主本空的回答

2. 主要作用

BN层主要是为了解决网络训练过程中出现的internal Covariate Shift(内部协方差偏移,简成ICS)问题。ICS问题会导致随着网络深度的加深,训练越来越困难,收敛越来越慢。

具体可以分为三个作用:
  1.正则化,降低过拟合。
  2.提高模型收敛速度,加速训练。
  3.减少梯度爆炸或者梯度消失的情况。

在机器学习领域有个很重要的假设:独立同分布。即训练集和测试集必须具有相同的分布,这样经过训练的模型才能在测试集合上去的很好的表现。

但是,在网络的训练过程中,随着反向传播的进行,网络每一层的权重都会进行更新,这就导致每一层输入数据的分布由于上一层权重的更新而时刻改变[1] 这种数据分布的变化也会随着网络的加深,而逐渐剧烈。使得网络深层很难进行学习。

并且原文[1]中也指出在网络的训练过程中,数据分布改变后会往激活函数的上限或者下限偏移,随着网络的层层加深,数据整体分布会逐渐偏移到激活函数的梯度饱和区域,出现梯度降低甚至消失现象,使得网络难以训练,无法收敛。

上面这种现象就被称为ICS问题

那么BN的作用就显而易见了,就是将每个Batch内的数据分布都拉到均值为0,方差为1的标准正态分布,使得每一层神经网络的输入保持相同分布(博客[4]中说到,标准化不会改变原有分布,但是大部分数据都是正态分布,所以我也写成标准正态分布)

3. 具体分析

3.1 正则化,降低过拟合

我个人理解:首先网络过拟合说明网络对于训练集的数据分布学习的太好了,几乎完全一样了。这样会导致网络缺乏泛化性。BN层作为一种标准化方法,可以将所有的数据分布统一成标准正态分布,减少方差大的特征(离散特征)对于整体数据分布的影响[5] 从而让网络更加关注共性特征,降低对离散特征的学习,提高泛化性。

3.2 提高模型收敛速度,加速训练

在第二章中,我们提到网络之所以难以收敛,主要是因为ICS问题导致的数据分布偏移,从而出现激活函数梯度消失现象。从下图中(来自博客[5])可以看到,经过标准化后,数据都会集中在均值为0,方差为1的正太分布中,这个数据分布正好是激活函数中梯度响应最大的区域,可以有效地提高模型的收敛速度,加速模型训练。

原始数据标准化后数据
在这里插入图片描述在这里插入图片描述

3.3 减少梯度爆炸或者梯度消失的情况

网络权重更新依据的是梯度的反向传递。梯度求解的主要受有4个因素影响,分别是:

  • 当前层的输入(上一层的输出)。
  • 激活函数的偏导。
  • 后一层的权重。
  • 损失函数L的偏导。

由于链式求导法则,梯度是不同层的4个因素的累乘。如果4个因素中设置不合理则会导致梯度爆炸或者梯度消失的现象。

BN层之所以会减少梯度爆炸或者梯度消失,因为BN层制约着激活函数的偏导这一因素。

当然BN层只能减轻,但无法完全解决。
例如:
第一种情况: 权重设置不合理,还是会导致梯度爆炸现象。
第二种情况: 如果采用sigmod激活函数,其最大梯度是0.25,如果网络设置过深,0.25的累乘会导致梯度越来越小,甚至梯度消失。

4. 补充

4.1 BN层做的是标准化不是归一化

BN层,也被称为Batch Normalization Layer。虽然被翻译为批次归一化层,但是从公式上看,BN层实际上实现的是标准化。不要被归一化这个翻译迷惑。结果并不是将数据缩放到0-1,然是将数据缩放到均值为0,方差为1的相同分布中。
在这里插入图片描述
在这里插入图片描述

4.2 BN层的公式

在这里插入图片描述

4.3 BN层为什么要引入gamma和beta参数

截图自:[2] WellWang_S, “神经网络中BN层的原理与作用”,如需详细理解,可以去该作者文章中细读。

在这里插入图片描述

这篇关于小知识点快速总结:Batch Normalization Layer(BN层)的作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066155

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用