首页 > 其他分享 >【深度学习】各种类型的归一化——BN、LN、IN和GN

【深度学习】各种类型的归一化——BN、LN、IN和GN

时间:2024-12-04 23:01:25浏览次数:5  
标签:LN BN 样本 归一化 数据 Normalization

        深度学习的是数据分布,无论是检测一个人或一只猫,我们检测的本质是因为这张图片对应人的像素分布是有一定分布规律的。在网络训练过程中,数据并不会一成不变会发生协方差偏移的问题,这样会给模型学习带来一定难度;而且同一特征在不同图片,由于图片的色调、亮度等会有很多变化。归一化是深度学习中常用的技术,能够加速训练,增强模型的稳定性和泛化能力。以下是几种常见的归一化方法:

1. Batch Normalization (BN)

        Batch Normalization 是在训练过程中对每个小批量(batch)进行归一化,它通过将每层的输入标准化(即减去均值,除以标准差)来使得网络更稳定,避免梯度爆炸或消失,本质就是让均值变为0,方差变为1。

        如上图所示,BN步骤主要分为4步:

  • 求每一个训练批次数据的均值
  • 求每一个训练批次数据的方差
  • 使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。
  • 尺度变换和偏移:将x_i乘以\gamma调整数值大小,再加上\beta增加偏移后得到y_i,这里的\gamma是尺度因子,\beta是平移因子。这一步是BN的精髓,由于归一化后的x_i基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:\gamma,\beta\gamma\beta是在训练时网络自己学习得到的。

        一个标准的归一化步骤就是减均值除方差,那这种归一化操作有什么作用呢?

       假设没有进行任何归一化处理的数据,其分布可能在激活函数的“平坦”区域,如Sigmoid函数的两端上(左图红色部分)。这会导致梯度小,从而使得权重更新缓慢,甚至在训练过程中陷入停滞;训练速度慢,模型需要更多的时间来收敛。在理想情况下,我们希望输入数据集中在激活函数的梯度较大的区域,这样能够使得网络更有效地学习。通过减去均值并除以方差,我们可以将数据的分布调整到接近标准正态分布。这使得数据的分布集中在0附近,避免了训练过程中的梯度消失问题。例如,对于 ReLU 激活函数来说,数据集中在0附近时,它的梯度相对较大,能够加速模型的学习。

        虽然减去均值并除以方差后,数据的分布会变成正态分布,但这并不意味着正态分布是最适合网络训练的。数据的原始分布可能是高度不对称的,或者某些激活函数(如Sigmoid)可能并不对标准正态分布的数据表现得最好。举例来说,Sigmoid函数在-1到1的范围内的梯度变化相对较小,导致它在这一区间的学习速度很慢。

        即使经过减均值除方差操作,得到的分布仍然是标准正态分布,但这并不一定能提供最好的学习效果。 Batch Normalization(BN) 在标准化数据后,通过引入两个可学习的参数——尺度因子(γ)偏移因子(β),来调整数据的分布。

  • 尺度因子(γ):调整标准差的大小,从而改变数据的“扩展程度”。
  • 偏移因子(β):调整数据的均值,从而改变数据的“平移”。

        这种做法使得即使在标准化之后,数据的分布也可以根据训练数据的特性进一步调整。BN的核心思想就是通过这些可学习的参数,使得数据的分布更适应网络的需求,提高非线性变换的效果,从而提升模型的表现。BN的极端情况是当 尺度因子(γ)偏移因子(β) 等于小批量的均值和方差时,经过BN处理后的数据和原始输入数据完全相同。虽然这种情况不常见,但它揭示了BN能够灵活调整数据分布的能力,从而优化模型的训练过程。

        BN对于卷积神经网络不同,因为卷积神经网络的特征是对应到一整张特征响应图上的,所以做BN时也应以响应图为单位而不是按照各个维度。在某一层,batch大小为m,响应图大小为w×h,则做BN的数据量为m×w×h。看下图,有四张图片(batchsize=4),通道数为3(图像为RGB三通道),尺寸为WxH,在进行批归一化的时候,是在某一通道上进行归一化,处理数据为4xWxH。

        BN在深层神经网络的作用非常明显:若神经网络训练时遇到收敛速度较慢,或者“梯度爆炸”等无法训练的情况发生时都可以尝试用BN来解决。同时,常规使用情况下同样可以加入BN来加速模型训练,甚至提升模型精度。

  • 优点:加速训练,提升模型性能,减轻梯度消失问题。
  • 缺点:需要计算每个小批量的均值和方差,且对于小批量大小较小的任务效果不好。

2. Layer Normalization (LN)

        Layer Normalization 不像 BN 那样依赖于小批量,而是对每个样本的特征进行归一化,即对每一层的输入进行标准化,计算均值和方差时仅在当前层的特征上进行。

        和 BN 相比,LN 同样包含两个步骤

Step 1: 数据归一化。沿着 C×H×W 维度计算 \mu 和 \sigma

Step 2: 对归一化的数据进行转换。同样引入两个可学习的参数\gamma,\beta

如何计算 μ 和 σ ? 假设输入的是图像数据,每个 batch 中的特征图尺寸为 [N, C, H, W],即一个 batch 中有 N 个样本。那么 LN 实际上就是针对每个样本做归一化,对于第 i 个样本有

        做LN时对每个样本的特征进行归一化,所以维度为单位而不是按照相应图进行。在某一张图片上,响应图大小为w×h,通道数为c,则做LN的数据量为c×w×h。看下图,有四张图片(batchsize=4),通道数为3(图像为RGB三通道),尺寸为WxH,在进行层归一化的时候,是在某一张图上进行归一化,处理数据为3xWxH。 

  • 优点:适用于循环神经网络(RNN)等时序模型,也能处理变长输入。
  • 缺点:相比 BN,LN 的计算开销较大。

        LN针对的是单独一个样本,在训练和预测阶段的使用并无差别;BN是针对一个batch进行计算的,训练时自然可以根据batch计算,但是预测时有时要预测的是单个样本,此时要么认为batch size就是1,不进行标准化处理,要么是在训练时记录标准化操作的均值和方差直接应用到预测数据,这两种解决方案都不是很完美,都会存在偏差。

3. Instance Normalization (IN)

        Instance Normalization 是在每一个样本的每个特征通道上进行归一化。与 LN 相似,但它通常用于生成模型(如风格迁移)中,尤其是在图像生成任务中,因为对于这个任务来说,每个样本的每个像素点都是十分重要的。BN 中,是在 batch 中跨样本做的归一化,而LN 中,在每个样本上跨通道的进行了归一化,因为不同的通道表征不同的特征,那么在图像风格迁移中,不同特征之间的差异性是十分重要的。

        IN 会对每个样本的每个通道进行独立归一化。与 BN 框架相同

Step 1: 数据归一化。沿着 H×W 计算 \mu 和 \sigma

Step 2: 对规范化后的数据进行数据变换。引入两个可学习的参数\gamma,\beta

如何计算均值 μ 和方差 σ ?

假设输入的是图像数据,每个 batch 中的特征图尺寸为 [N,C,H,W],即一个 batch 中有 N 个样本,每个样本对应的特征图有 C 和通道,那么 IN 实际上就是针对每个样本的每个通道做归一化。对于第 i 个样本的第 j 个通道有

        做LN时对每一个样本的每个特征通道上进行归一化,所以在某一张图片上,响应图大小为w×h,通道数为c,则做LN的数据量为w×h。看下图,有四张图片(batchsize=4),通道数为3(图像为RGB三通道),尺寸为WxH,在进行IN的时候,是在某一张图的某一个维度上进行归一化,处理数据为WxH。 

  • 优点:适合于生成对抗网络(GAN)等应用,特别是在风格迁移任务中表现良好。
  • 缺点:可能会破坏批量的统计特性,因此不常用于传统分类任务。

 4. Group Normalization (GN)

         Group Normalization 是一种折衷方案,它将特征通道分成多个组,对每个组内的通道进行归一化,而不是像 BN 那样使用整个小批量的均值和方差。GN 是为了弥补 BN 对小批量的依赖问题,尤其在批量大小较小的任务中表现良好。

        做GN时对每一个样本的某几个特征通道上进行归一化,所以在某一张图片上,响应图大小为w×h,通道数为c,则做LN的数据量为c/gxw×h。看下图,有四张图片(batchsize=4),通道数为4,尺寸为WxH,在进行GN的时候,如果分为两组进行归一化,处理数据为2xWxH。 

  • 优点:适用于小批量大小的任务,尤其在计算机视觉中的应用效果较好。
  • 缺点:需要选择适当的组数,可能会导致性能的波动。

        总结来说,这些归一化方法的主要区别在于它们的归一化方式和计算方式。BN 依赖于批量大小,LN 和 IN 适用于变长序列或生成任务,GN 则是一种在小批量任务中常用的折衷方案。

参考资料:

常见面试问题2:归一化-BN、LN、IN、GN_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1iS4y137mN/?spm_id_from=333.337.search-card.all.click&vd_source=0dc0c2075537732f2b9a894b24578eed一文搞懂Batch Normalization 和 Layer Normalization - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/647813604详解 Layer Normalization (LN) - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/568938529详解 Instance Normalization (IN) - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/568964436

标签:LN,BN,样本,归一化,数据,Normalization
From: https://blog.csdn.net/weixin_62403234/article/details/144215844

相关文章

  • Vulnhub Connect-The-Dots
    0x01:端口扫描主机发现nmap-sn192.168.231.0/24全端口扫描nmap--min-rate10000-p-192.168.231.144开放21ftp,80http,111rpcbind,2049nfsrpcbind主要的作用是将网络上的RPC服务与其对应的端口进行关联。它充当了客户端和服务器之间的桥梁,使得客户端可以通过服务的......
  • stable diffusion Controlnet常用控制类型解析与实战课程1
    本节内容,给大家带来的是StableDiffusionControlNet常用控制类型解析与实战课程的第一节课程。在上期课程中,我们已经了解了ControlNet的基本概念和使用方法,我们也知道,ControlNet提供了多达十几种的控制方式,而且控制类型和数量还在不断增加中,我们在使用controlnet时,经常遇到......
  • LATTICE HW-USBN-2B找不到设备怎么办?
     深圳市飞录科技有限公司www.szfpga.com  先确认下载器是否被系统识别,正常情况下在设备管理器是两个USBSerial名称。然后DectectCable,确保在A-000通道上操作。再次Scan扫描到芯片,如果出现黄色提示,再次点击芯片,选择保存工程。   老的芯片或者布线太长的芯片,TCK降......
  • Vulnhub narak
    0x01:端口扫描主机发现nmap-sn192.168.231.0/24全端口扫描nmap--min-rate10000-p-192.168.231.14322ssh,80httpUDP扫描nmap-sU--top=20192.168.231.143有两个端口开放详细端口扫描nmap-sT-sC-sV-O--min-rate10000-p22,80192.168.231.143漏洞扫......
  • Vulnhub:DC-2
    靶机地址:VulnerableByDesign-Search:DC-2~VulnHub信息收集: arp-scan主机探活确定目标主机ip192.168.6.25nmap扫描目标主机开放端口nmap-p--sS-Pn-sV192.168.6.25访问192.168.6.25失败重定向到dc-2添加本地hosts解析mousepa......
  • Vulnhub:DC-1
    靶机地址:DC:1~VulnHub打靶过程信息收集主机探活arp-scan-l确定目标主机ip192.168.6.24nmap扫描目标主机开放端口nmap-sS-sV-p--Pn192.168.6.24访问192.168.6.24登录页面识别CMSdrupal7也可利用whatweb识别网站指纹信息whatwe......
  • vulnhub:Empire: Breakout
    靶机地址Empire:Breakout~VulnHub打靶过程信息收集:目标ip:192.168.6.10在目标ip未知的情况下可用arp-scan命令发现主机arp-scan-l扫描目标开放端口nmap-sS-Pn-sV192.168.6.10扫描得到开放端口和服务端口号状态服务名称版本信息说明......
  • 1.langgraph中的Tool Calling (How to call tools using ToolNode)
    1.导入模块fromlangchain_core.messagesimportAIMessagefromlangchain_core.toolsimporttoolfromlanggraph.prebuiltimportToolNode2.工具定义@tooldefget_weather(location:str):"""Calltogetthecurrentweather."""......
  • linux ln命令详解
    介绍ln是linux的一个重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复......
  • centos安装宝塔打不开 安装lnmp 宝塔打不开了
    在CentOS上安装宝塔面板后,如果遇到无法打开面板的情况,可以按照以下步骤进行排查和解决:1.检查宝塔面板服务状态servicebtstatus如果服务未运行,尝试重启服务:servicebtrestart2.查看日志文件宝塔面板的日志文件通常位于 /www/server/panel/logs 目录下。......