神经网络常用归一化和正则化方法解析(一)

news2024/11/12 10:02:52

🎀个人主页: https://zhangxiaoshu.blog.csdn.net
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️,如有错误敬请指正!
💕未来很长,值得我们全力奔赴更美好的生活!

前言

神经网络中的归一化和正则化是为了提高训练稳定性、加速收敛、减少过拟合等目的而采取的一系列技术手段,本文对常见的归一化方法如,批归一化BN、层归一化LN、实例归一化IN、组归一化GN进行介绍。有关常见的正则化方法L1正则化、L2正则化、dropout 和 Early Stopping的介绍参见我写的这篇文章:神经网络常用归一化和正则化方法解析(二)


文章目录

  • 前言
  • 一、归一化和正则化
    • 1. 归一化(Normalization)
    • 2. 正则化(Regularization)
  • 二、常用归一化方法
    • 1. 批归一化(Batch Normalization)
    • 2. 层归一化(Layer Normalization)
    • 3. 实例归一化(Instance Normalization)
    • 4. 组归一化(Group Normalization)
    • 5. PyTorch演示
  • 总结


一、归一化和正则化

1. 归一化(Normalization)

归一化是一组技术,用于调整神经网络中输入数据的分布,以帮助网络更有效地学习。主要包括批归一化、层归一化、实例归一化和组归一化等。归一化的目标是使输入数据的分布更稳定,有助于缓解梯度消失或爆炸的问题,并提高网络的训练速度和泛化性能。

  • 加速收敛: 归一化可以帮助加速神经网络的收敛过程。在训练过程中,各层输入的分布可能会发生变化,导致训练过程不稳定。通过归一化,可以保持每层输入的分布相对稳定,有助于梯度的传播和权重的更新。

  • 缓解梯度消失/爆炸问题: 在深层网络中,梯度消失或爆炸是常见的问题。通过在每层输入上进行归一化,可以避免梯度在反向传播时变得非常小或非常大。

  • 更好的泛化能力: 归一化有助于提高模型的泛化能力,使其在未见过的数据上表现更好。

常见的归一化技术包括批归一化(Batch Normalization)、层归一化(Layer Normalization)实例归一化(Instance Normalization)、组归一化(Group Normalization)。

2. 正则化(Regularization)

正则化是一种用于控制模型复杂度、防止过拟合的技术。过拟合指的是模型在训练数据上表现很好,但在测试数据上表现较差,因为模型过度适应了训练数据的噪声和细节。

  • 防止过拟合: 正则化是一种减少模型在训练数据上过拟合的技术。

  • 控制权重的大小: 正则化通过在损失函数中添加额外的惩罚项,如L1正则化和L2正则化,可以控制模型参数的大小,防止其变得过于复杂。

  • 提高泛化能力: 正则化有助于提高模型在未见过的数据上的泛化能力,使其更好地适应新的输入。

常见的正则化技术包括L1正则化、L2正则化、dropout和Early Stopping。

综合来说,归一化和正则化在神经网络中的使用可以使模型更稳定、更容易训练,同时提高其泛化能力,从而更好地适应未见过的数据。归一化是一种数据处理的方法,旨在将数据缩放到相对一致的尺度,以便更好地进行比较和分析。归一化通常用于预处理数据,使得不同特征或不同样本的数值范围相对一致。 正则化是一种用于控制模型复杂度、防止过拟合的技术。正则化通过在模型的损失函数中添加额外的项,对模型参数进行惩罚,从而限制模型的复杂性。

  • 归一化适用于数据预处理,正则化适用于模型训练。 如果你的数据具有不同的尺度,可能需要进行归一化;如果你的模型在训练集上表现良好但在测试集上泛化能力差,可能需要考虑正则化。

  • 归一化通常是标准的数据预处理步骤,而正则化是训练模型时的一种策略。 在训练模型之前,你通常会对数据进行归一化,以便更好地训练模型。正则化则是在训练过程中使用的手段,用于控制模型的复杂度。

  • 具体选择取决于任务和模型。 在实际应用中,选择归一化和正则化的方法需要考虑具体任务、数据的特性以及所使用的模型。不同的场景可能需要不同的策略。

二、常用归一化方法

1. 批归一化(Batch Normalization)

Batch Normalization(BN)的基本思想:

对每个特征维度上的输入进行标准化,使其均值接近0,方差接近1。即,BN为一个batch内,在所有图像对应的相同通道上做归一化

BN的计算过程如下

  1. 对于每个特征维度,计算该维度上的均值和方差。
  2. 对输入进行标准化,即减去均值并除以方差。
  3. 将标准化后的数据乘以一个可学习的缩放参数(gamma)并加上一个可学习的平移参数(beta)。

这个过程可以用数学公式表示为:

B N ( x i ) = γ ( x i − μ σ 2 + ϵ ) + β \mathrm{BN}\left(x_{i}\right)=\gamma\left(\frac{x_{i}-\mu}{\sqrt{\sigma^{2}+\epsilon}}\right)+\beta BN(xi)=γ(σ2+ϵ xiμ)+β

其中:

  • x i x_{i} xi是输入的第 i 个特征。
  • μ \mu μ是特征维度上的均值。
  • σ \sigma σ是特征维度上的标准差。
  • ϵ \epsilon ϵ是一个很小的常数,防止除法中的零。
  • γ \gamma γ是缩放参数、 β \beta β是平移参数,两者都是可学习得参数,这是因为归一化后数据为正态分布,使得表达能力下降,所以加入可学习得参数自己学习归一化分布。

BN的优势包括:

  • 加速收敛: BN可以减少训练深度神经网络时的收敛时间,因为它缓解了梯度消失和爆炸的问题。

  • 增强模型的泛化能力: BN有轻微的正则化效果,可以降低模型对参数初始化和超参数的敏感性,提高模型在未见过的数据上的泛化能力。

  • 允许使用较大的学习率: BN的标准化效果使得可以使用更高的学习率,加速模型收敛。

  • 独立性: BN对每个批次独立工作,使得模型在小批次上也能较好地进行训练。

BN通常被应用在卷积层和全连接层之间,以及激活函数之前。在实践中,BN已经成为训练深度神经网络时的标配技术之一。

2. 层归一化(Layer Normalization)

Layer Normalization(LN)的基本思想:

Layer Normalization是一种归一化技术,其基本思想是对每一层的输入进行标准化,使得每个神经元在同一层的输入具有相似的分布。相较于Batch Normalization(BN),它更关注对每个样本(实例)的独立性,而不是整个批次。即,LN为一个batch内,在一个图像对应的所有通道上做归一化

Layer Normalization的计算过程:

给定输入 x x x,假设 x x x 的维度为 ( N , C , H , W ) (N, C, H, W) (N,C,H,W),其中 N N N 是批次大小, C C C 是通道数, H H H W W W 是高度和宽度。Layer Normalization对每个样本(实例)在通道维度上进行标准化,计算过程如下:

对每个通道 c c c 计算均值 μ c \mu_c μc 和标准差 σ c \sigma_c σc

μ c = 1 H × W ∑ i = 1 H ∑ j = 1 W x c i j \mu_{c}=\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_{c i j} μc=H×W1i=1Hj=1Wxcij
σ c = 1 H × W ∑ i = 1 H ∑ j = 1 W ( x c i j − μ c ) 2 + ϵ \sigma_{c}=\sqrt{\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W}\left(x_{c i j}-\mu_{c}\right)^{2}+\epsilon} σc=H×W1i=1Hj=1W(xcijμc)2+ϵ

其中, ϵ \epsilon ϵ 是一个很小的常数,防止除法中的零。

对每个通道 c c c 对输入 x x x 进行标准化:

x c i j ^ = x c i j − μ c σ c \hat{{x}_{cij}} =\frac{{x}_{cij}-\mu_c }{\sigma_c } xcij^=σcxcijμc

对标准化后的结果进行缩放和平移,得到最终的输出:

y c i j = γ c x c i j ^ + β c {y}_{cij}=\gamma_c \hat{{x}_{cij}} +\beta_c ycij=γcxcij^+βc

其中, γ c \gamma_c γc β c \beta_c βc 是可学习的缩放和平移参数。

Layer Normalization的优势:

  • 不依赖于批次大小: LN 不像 BN 那样依赖于批次大小,因此在小批次的情况下表现更好。

  • 适用于变长序列: LN 适用于变长序列数据,因为它是在通道维度上进行标准化,而不考虑序列的长度。

  • 保持样本独立性: LN 更注重样本(实例)之间的独立性,适用于一些不同样本之间具有不同特性的情况。

总体而言,LN 在一些特定场景中可能比 BN 更适用,特别是在处理变长序列等情况下。然而,选择使用哪种归一化方法通常取决于具体的任务需求和实验结果。

3. 实例归一化(Instance Normalization)

实例归一化(Instance Normalization)的思想:

实例归一化是一种深度学习中的归一化技术,与批归一化(Batch Normalization)不同,实例归一化主要关注单个样本(实例)的数据分布,而不是整个批次。实例归一化的基本思想是对每个样本在每个通道上进行独立的标准化,使得每个样本在通道的分布接近标准正态分布。相对于批归一化,实例归一化在每个样本上进行独立的归一化,因此更适用于一些样本之间分布差异较大的情况,例如风格迁移等任务。即,IN为一个batch内,在每个图像对应的每个通道上做归一化

实例归一化的优势:

  • 适用于样本差异较大的任务: 实例归一化逐个样本地进行归一化,因此更适用于样本之间的分布差异较大的情况,例如风格迁移等任务。

  • 减少内部协变量偏移: 实例归一化有助于减少内部协变量偏移,即在深度神经网络中,每一层的输入分布在训练过程中发生的变化。

  • 不依赖于批次大小: 相对于批归一化,实例归一化对于批次大小的依赖较小,因此在小批次的情况下仍然表现良好。

  • 保留样本的个体性: 实例归一化保留了每个样本的个体性,不同样本之间的特征分布更为独立,有助于保留样本之间的个性。

总体而言,实例归一化是一种在特定任务和场景下表现出色的归一化技术,特别适用于样本之间分布差异较大的情况。在一些生成模型、风格迁移等任务中,实例归一化已经得到广泛的应用。

4. 组归一化(Group Normalization)

组归一化(Group Normalization)的思想:

组归一化是一种深度学习中的归一化技术,它介于批归一化(Batch Normalization)和实例归一化(Instance Normalization)之间。与批归一化不同,组归一化将通道分为若干组,然后对每一组的特征进行独立的归一化。这样的归一化方式保留了通道之间的独立性,同时避免了对整个批次的依赖。组归一化在每一组内进行归一化,使得每组内的特征在训练过程中保持相对独立的分布。即,GN为一个batch内,一个图像对应的所有通道的分组上做归一化

组归一化的优势:

  • 适用于小批次和大批次: 与批归一化相比,组归一化对批次大小的依赖较小,因此在小批次和大批次的情况下都能表现良好。

  • 减少内部协变量偏移: 组归一化有助于减少内部协变量偏移,使得每组内的特征在训练过程中保持相对独立的分布。

  • 适用于高分辨率图像: 在处理高分辨率图像时,组归一化的性能通常比批归一化更好,因为它不依赖于批次大小,有助于保持特征之间的独立性。

  • 灵活性: 由于组归一化对通道进行了分组,因此在某些场景下可以更灵活地控制每个分组的特征独立性,适应不同的模型结构和任务需求。

总体而言,组归一化在一些特定场景中表现出色,特别是在处理小批次和高分辨率图像的情况下。在一些最新的深度学习模型中,组归一化逐渐得到了广泛的应用。

5. PyTorch演示

下面是使用 PyTorch 随机生成张量并演示四种归一化的输出的代码:

import torch
import torch.nn as nn

# 随机生成张量
x = torch.rand((2, 3, 4, 4))  # 2个样本,3个通道,每个通道尺寸为4x4

# Batch Normalization
batch_norm = nn.BatchNorm2d(3)
x_batch_norm = batch_norm(x.clone())

# Layer Normalization
layer_norm = nn.LayerNorm(x.size()[1:])
x_layer_norm = layer_norm(x.clone())

# Instance Normalization
instance_norm = nn.InstanceNorm2d(3)
x_instance_norm = instance_norm(x.clone())

# Group Normalization
group_norm = nn.GroupNorm(1, 3)  # 1 group for simplicity
x_group_norm = group_norm(x.clone())

# 打印结果
print("Original Tensor:")
print(x)
print("\nBatch Normalization:")
print(x_batch_norm)
print("\nLayer Normalization:")
print(x_layer_norm)
print("\nInstance Normalization:")
print(x_instance_norm)
print("\nGroup Normalization:")
print(x_group_norm)

总结

在这里插入图片描述
以下是对这四种归一化方法的简要总结:

批归一化(Batch Normalization):

  • 思想: 一个batch内,在所有图像对应的相同通道上做归一化。
  • 优点: 提高训练稳定性,加速收敛,有轻微的正则化效果,对深度网络和各种激活函数都有效。
  • 缺点: 不太适用于小数据集,可能引入一些额外的计算开销。

层归一化(Layer Normalization):

  • 思想: 一个batch内,在一个图像对应的所有通道上做归一化。
  • 优点: 在不同大小的小批量上效果更为稳定,适用于循环神经网络(RNN)等场景。
  • 缺点: 对小数据集和卷积神经网络(CNN)的效果可能不如批归一化。

实例归一化(Instance Normalization):

  • 思想: 一个batch内,在每个图像对应的每个通道上做归一化。
  • 优点: 对于样本维度较大的情况效果较好,适用于图像生成等任务。
  • 缺点: 在其他任务上的效果可能不如批归一化。

组归一化(Group Normalization):

  • 思想: 一个batch内,一个图像对应的所有通道的分组上做归一化。
  • 优点: 适用于小批量、样本数不同的情况,对卷积层效果较好。
  • 缺点: 对小数据集的效果可能较差,相对于批归一化在某些场景下可能计算开销较大。

综合而言,选择归一化方法需要考虑具体的任务和网络结构,不同的方法在不同的场景下表现更为优越。在实践中,根据具体问题进行实验和验证,选择最适合的归一化方法。

文中图片大多来自论文和网络,如有侵权,联系删除,文中有不对的地方欢迎指正。

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

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

相关文章

CRM:提升营销效果的关键

一场成功的营销活动,可以帮助企业扩大知名度,获取大量的优质商机。作为专业的管理软件,CRM系统同样具备营销管理的能力,帮助企业实现营销活动的规划、执行和监控,提高营销效果。下面说说,CRM营销自动化对企…

职场人的年底总结,年初规划,又要开始啦!

在2023年,你可能错过了某些重要的职业发展机会,或者错失了一些与家人和朋友共度的时光。也可能经历了企业的降本增效,面临了被否定和裁员的风险;或者是得到了企业的重用和提拔,一个人撑起了整个业务部门。这些经历不仅…

Python中函数添加超时时间,Python中signal使用

from time import time, sleepimport signal# 模拟要删除5条数据,中间有超时的i 5# 超时后执行的方法def timeout_handler(signal, frame):# 引发异常raise TimeoutError("删除第" str(i) "条,超时!")# 或者执行其他操作,不往外抛异常(超时的函数不会被…

【排障记录】Oracle自动归档清理任务无法进行(windows平台),原因居然是?

前言 接用户求助,生产业务上的一套数据库存在归档文件占用过多磁盘空间的问题(约四万个),需要清理,最好设置成定期自动清理,以减少人工干预。 处置过程 由于Oracle搭建在windows操作系统之上&#xff0c…

spring boot mybatis TypeHandler 源码如何初始化及调用

目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17,my…

编译原理词法分析:NFA转DFA(原理+完整代码+可视化实现)

NFA转换为DFA 【本文内容摘要】 什么是DFA通过子集构造法将NFA转换为DFA生成DFA的dot文件并且形成可视化。 如果本文对各位看官有用的话,请记得给一个免费的赞哦(收藏也不错)! 文章目录 NFA转换为DFA一、什么是DFA二、NFA转换为…

java表达式、java中jexl3的使用,java中jexl3如何自定义函数方法,jexl3自定义函数怎么传集合数组列表

引入jexl3 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-jexl3</artifactId><version>3.2.1</version> </dependency> 基本用法 //引入对应包 import org.apache.commons.jexl3.*;public class …

【STM32入门】3.OLED屏幕

1.OLED引脚 OLED屏幕的接线按图所示&#xff0c;本例中用的是4管脚OLED屏幕 2.驱动程序 配套的驱动程序是“OLED.c"&#xff0c;主要由以下函数构成&#xff1a;1、初始化&#xff1b;2、清屏&#xff1b;3、显示字符&#xff1b;4、显示字符串&#xff1b;5、显示数字…

杀虫剂市场分析:2022年市场规模突破100亿元

杀虫剂是杀死害虫的一种药剂&#xff0c;目前杀虫剂主要应用在农业种植领域中&#xff0c;其中水稻的应用占比最大。杀虫剂的分类繁多&#xff0c;目前市场上主要以有机磷杀虫剂等为主流。 杀虫剂是指被用于杀死昆虫或防止昆虫进行破坏性行为的化学物质&#xff0c;杀虫剂的种类…

C盘爆满,python pip无法安装应用

解决方法1 C盘扩容 从其他盘压缩空间&#xff0c;C盘使用压缩的空间进行扩容&#xff0c;治标不治本&#xff0c;以后C盘还会越来越大 解决方法2 转移pip安装目录 1. 获取显示pip安装目录 C:\Users\biewang>pip show pip Name: pip Version: 23.3.1 Summary: The PyPA r…

品牌保护与知识产权:跨境电商中的法律挑战与解决方案

随着跨境电商的蓬勃发展&#xff0c;品牌保护和知识产权问题日益成为业界关注的焦点。在全球范围内进行电商业务&#xff0c;涉及到多国法律法规的复杂性&#xff0c;品牌所有者需要面对一系列法律挑战&#xff0c;保护其品牌和知识产权不受侵害。本文将深入探讨跨境电商中面临…

操作系统概论:揭秘计算机背后的神秘力量

操作系统概论 & 功能 概述定义操作系统功能作为系统资源的管理者向上层提供方便易用的服务作为最接近硬件的层次 主页传送门&#xff1a;&#x1f4c0; 传送 概述 概念&#xff1a; 定义 控制和管理计算机硬件和软件资源的程序一种系统软件为上层用户、应用程序提供简单易…

关于对ArrayBlockingQueue 的AQS探究

1、介绍 条件队列是 AQS 中最容易被忽视的一个细节。大部分时候&#xff0c;我们都用不上条件队列&#xff0c;但是这并不说明条件队列就没有用处了&#xff0c;它反而是我们学习生产者-消费者模式的最佳教材。条件队列是指一个阻塞队列&#xff0c;其中的元素是等待某个条件成…

派对的最大快乐值

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 派对的最大快乐值 &#x1f48e;总结 派对的最大快乐值 题目 员工信息的定义如下&#xff1a; 公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、没有环的多叉树。树的头节点是公…

Win环境中安装Jenkins指南

目录 安装Java环境 下载并安装Jenkins Jenkins版本 启动Jenkins 如何删除Jenkins 安装Java环境 访问 Oracle官方网站 下载并安装JDK 安装完成后&#xff0c;设置系统环境变量 JAVA_HOME 到你的 JDK 安装路径&#xff0c;并将 %JAVA_HOME%\bin 添加到系统 PATH 中。 下载…

css实现姓名两端对齐

1.1 效果 1.2 主要代码 text-align-last: justify; 1.3 html完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

外包干了3年,技术退步明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor

目录 【UE】UEC CurveFloat、CurveVector、CurveLinearColor 一、CurveFloat 二、CurveVector 三、CurveLinearColor 四、材质设置 五、运行结果 【UE】UEC CurveFloat、CurveVector、CurveLinearColor 一、CurveFloat #pragma once#include "CoreMinimal.h" …

人工智能时代AIGC绘画实战

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

RAG落地实践、AI游戏开发、上海·深圳·广州线下工坊启动!星河社区重磅周

飞桨星河社区在成立的5年以来&#xff0c;已汇集660万AI开发者&#xff0c;覆盖深度学习初学者、在职开发者、企业开发者、高校教师、创业者等&#xff0c;已成为AI领域最具影响力的社区之一&#xff0c;无论是AI爱好者还是AI开发者&#xff0c;都能在这里探索AI的无限可能。飞…