层规范化和批规范的两种比较

规范化的作用

  1. 缓解内部协变量移位
    • 内部协变量移位指的是在训练过程中,网络各层的输入分布发生变化,导致后续层需要不断适应新的输入分布。规范化可以稳定中间层的输入分布,从而加快训练速度并提高模型的稳定性。
  2. 加速收敛
    • 规范化可以使得中间层的输入分布更加集中,有助于梯度下降更快地找到最优解。这是因为规范化后的数据通常具有更好的数值稳定性,梯度更容易传播。
  3. 提高模型泛化能力
    • 规范化可以减少模型对特定输入分布的依赖,使得模型在面对不同分布的数据时表现更好,从而提高模型的泛化能力。
  4. 改善梯度流动
    • 规范化可以改善梯度流动,防止梯度消失或梯度爆炸问题。通过规范化,梯度更容易在整个网络中传递。

层规范化和批规范的两种比较

1、批规范化(Batch Normalization,LN)

加速训练和改善模型泛化能力的一种正则化技术

2、层规范化(Layer Normalization,BN)

为了稳定神经网络训练而提出的一种规范化方法

层规范化计算公式:
对于每个样本 x ,层规范化计算如下: 计算每个特征维度上的均值 μ 和方差 σ 2 : μ = 1 D ∑ i = 1 D x i σ 2 = 1 D ∑ i = 1 D ( x i − μ ) 2 其中 D 是样本的特征数量。 归一化: x ^ i = x i − μ σ 2 + ϵ 其中 ϵ 是一个小的常数,防止除零错误。 缩放和平移: y i = γ x ^ i + β ,其中 γ 和 β 是可学习的参数。 对于每个样本x,层规范化计算如下:\\ 计算每个特征维度上的均值\mu和方差\sigma^2: \\ \mu = \frac{1}{D} \sum_{i=1}^{D} x_i\\ \sigma^2 = \frac{1}{D} \sum_{i=1}^{D} (x_i - \mu)^2 \\ 其中D是样本的特征数量。\\ ~\\ 归一化: \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}\\ 其中\epsilon是一个小的常数,防止除零错误。\\ ~\\ 缩放和平移:y_i = \gamma \hat{x}_i + \beta,其中\gamma和\beta是可学习的参数。 对于每个样本x,层规范化计算如下:计算每个特征维度上的均值μ和方差σ2μ=D1i=1Dxiσ2=D1i=1D(xiμ)2其中D是样本的特征数量。 归一化:x^i=σ2+ϵ xiμ其中ϵ是一个小的常数,防止除零错误。 缩放和平移:yi=γx^i+β,其中γβ是可学习的参数。

重点是对每一个样本的特征求均值和方差,在归一化。

批规范化计算公式:

对于给定的 b a t c h 的数据,批规范化计算如下: 计算 b a t c h 上的均值 μ 和方差 σ 2 : μ = 1 N ∑ i = 1 N x i σ 2 = 1 N ∑ i = 1 N ( x i − μ ) 2 其中 N 是 b a t c h 的大小。 归一化: x ^ i = x i − μ σ 2 + ϵ 缩放和平移: y i = γ x ^ i + β ,其中 γ 和 β 是可学习的参数。 对于给定的batch的数据,批规范化计算如下:\\ 计算batch上的均值\mu和方差\sigma^2: \\ \mu = \frac{1}{N} \sum_{i=1}^{N} x_i\\ \sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2 \\ 其中N是batch的大小。\\ ~\\ 归一化: \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} \\ ~\\ 缩放和平移: y_i = \gamma \hat{x}_i + \beta,其中\gamma和\beta是可学习的参数。 对于给定的batch的数据,批规范化计算如下:计算batch上的均值μ和方差σ2μ=N1i=1Nxiσ2=N1i=1N(xiμ)2其中Nbatch的大小。 归一化:x^i=σ2+ϵ xiμ 缩放和平移:yi=γx^i+β,其中γβ是可学习的参数。

重点是对一个batch大小数据在同一个特征维度上求均值和方差,在归一化。

代码比较

构建虚拟数据集sample.py

import numpy as np
import torchnp.random.seed(0)batch_size = 32
input_size = 10
inputs = np.random.randn(batch_size, input_size).astype(np.float32)
inputs_tensor = torch.tensor(inputs, requires_grad=True)
print(inputs_tensor.shape) #torch.Size([32, 10])

layer_norm.py文件

import torch
from sample import inputs_tensordef manual_layer_norm(x, gamma, beta, eps=1e-5):"""- x: 输入张量 (batch_size, input_size)- eps: 防止除零的小常数"""mean = x.mean(dim=-1, keepdim=True)  # torch.Size([32, 1]) 每个样本计算自己的均值var = x.var(dim=-1, keepdim=True)  # torch.Size([32, 1]) 每个样本计算自己的方差x_normalized = (x - mean) / torch.sqrt(var + eps)  # torch.Size([32, 10]) 每个样本减自己的均值除自己方差x_normalized = gamma * x_normalized + betareturn x_normalized# 初始化缩放因子 gamma 和平移因子 beta 且需要反向更新
gamma = torch.ones(inputs_tensor.size(-1), requires_grad=True)
beta = torch.zeros(inputs_tensor.size(-1), requires_grad=True)layer_norm_outputs = manual_layer_norm(inputs_tensor, gamma, beta)print(f"Layer Normalized Inputs:\n{layer_norm_outputs.shape}")  # torch.Size([32, 10])
print(f"Layer Normalized gamma:\n{gamma.shape}")  # torch.Size([10])
print(f"Layer Normalized beta:\n{beta.shape}")  # torch.Size([10])

batch_norm.py文件

import numpy as np
import torch
from sample import inputs_tensordef manual_batch_norm(x, gamma, beta, eps=1e-5):"""- x: 输入张量 (batch_size, input_size)- eps: 防止除零的小常数"""mean = x.mean(dim=0, keepdim=True)  # torch.Size([1, 10]) 按batch大小每个特征方向求一个均值var = x.var(dim=0, keepdim=True)  # torch.Size([1, 10]) 按batch大小每个特征方向求一个方差x_normalized = (x - mean) / torch.sqrt(var + eps)  # torch.Size([32, 10]) 每个样本减去对应维度上的均值在除以方差x_normalized = gamma * x_normalized + betareturn (x_normalized,)# 初始化缩放因子 gamma 和平移因子 beta 且需要反向更新
gamma = torch.ones(inputs_tensor.size(-1), requires_grad=True)
beta = torch.zeros(inputs_tensor.size(-1), requires_grad=True)batch_norm_outputs = manual_batch_norm(inputs_tensor, gamma, beta)print(f"Batch Normalized Inputs:\n{batch_norm_outputs.shape}")  # torch.Size([32, 10])

最后解释为什么都要进行缩放和平移?

规范化后的数据通常被调整到接近标准正态分布(均值为0,方差为1)。然而,直接使用这种规范化后的数据可能会限制网络的表达能力。因此,在规范化之后,通常会对数据进行缩放和平移,以便让网络能够学习到更适合任务的特征分布。

LN中的缩放和平移参数也是针对单个样本的所有特征共享的。

BN中的缩放和平移参数是针对mini-batch内的每个特征通道共享的。

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

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

相关文章

7--SpringBoot-后端开发、原理详解(面试高频提问点)

目录 SpringBoot原理 起步依赖 自动配置 配置优先级 Bean设置 获取Bean 第三方Bean SpringBoot原理 内容偏向于底层的原理分析 基于Spring框架进行项目的开发有两个不足的地方: 在pom.xml中依赖配置比较繁琐,在项目开发时,需要自己去找…

VuePress搭建文档网站/个人博客(详细配置)主题配置-侧边栏配置

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

洞悉市场先机,Vatee万腾平台助力企业精准决策

在瞬息万变的商业环境中,每一个市场动向都可能成为企业兴衰的关键。因此,洞悉市场先机,做出精准决策,成为了企业持续发展和保持竞争力的核心要素。Vatee万腾平台,凭借其强大的数据分析能力和智能化技术,正成…

生信初学者教程(八):数据收集

文章目录 数据分布表达谱数据最终数据分布自动下载GSE14520下载GSE149614下载其它数据在确定研究疾病为肝细胞癌**(Liver Hepatocellular Carcinoma: HCC)**后,系统地进行了文献回顾,专注于搜索与HCC相关的荟萃分析文章,以获取该领域的研究动态和已有成果。为了支持的研究…

dev c++输出中文乱码解决 printf乱码解决

把编码换成utf8就行 打开eiditor options

数据结构修炼——顺序表和链表的区别与联系

目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表(linear list)是n…

叶片检测系统源码分享

叶片检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

地平线4登录xbox后提示需要登录档案怎么解决

这个游戏是真nt(在联机上),典型搞联机2小时游玩半小时,多半时间都花费在联机上了,不是为了联机和朋友跑车,早给他卸载了。 本人的游戏问题:看了一些视频感觉没什么作用,我的现象就是…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作,请看【第二篇】内容 这次做一个这样的东西,通过在2DRT上实时绘制,生成动态的体积纹理,也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇(本篇)是对“…

Java面试——集合篇

1.Java中常用的容器有哪些? 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 如图: 面试官追问:说说集合有哪些类及他们各自的区别和特点? S…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1,Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

idea启动oom了解决

解决 Error:java: java.lang.OutOfMemoryError: WrappedJavaFileObject[org.jetbrains.jps.javac.InputFileObject[file:///D:/mingan/pb/backend/src/main/java/com/cy/backend/service/impl/StorageServiceImpl.java]]pos36199: WrappedJavaFileObject[org.jetbrains.jps.j…

nodejs 012:Babel(巴别塔)语言转换与代码兼容

这里写目录标题 安装 Babel配置presets配置:常见的 Babel Presetsplugins配置:以 plugin-transform-class-properties 的类中属性为例index.jsx Babel 是一个独立的 JavaScript 编译器,主要用于将现代 JavaScript 代码转换为旧版本的 JavaScr…

Jira Cloud涨价5%-20%,钉钉项目Teambition成优选替代

近日,Jira再次宣布涨价,Cloud版涨幅达到5%-20%,这一消息来源于Atlassian官方面向合作伙伴发布的2024年最新涨价通知。 Atlassian旗下核心产品,包括Jira、Confluence、JiraServiceManagement等的Cloud版本价格将有所提高&#xff…

使用k8s搭建mariadb+nginx+wordpress

前期准备 1.启动docker进程 2.拉取三个镜像 mariadb:latest wordpress:latest nginx:alpine 3.保存三个镜像 docker save -o wordpress.tar wordpress:latest 4.上传到其他的节点主机 scp wordpress.tar root 192.168.118.88:~ 5.切换到node01和node02两个节点上 ctr…

【最新华为OD机试E卷】报文响应时间(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

谷歌女高管被裁员,3份兼职越干越开心!55岁正是闯的年纪!

在职场的金字塔顶端,那些大龄女性高管正在面对一场无形却深刻的危机。曾经,她们凭借坚定的决心和无畏的勇气,在职场中披荆斩棘,闯出了一片天地。 现代职场的年轻化和技术更新正将她们逐渐推向边缘。裁员通知的突如其来&#xff0…

Leetcode面试经典150题-97.交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是…

好的头戴式降噪耳机一定很贵吗?四款热门头戴耳机盘点及推荐!

在快节奏的现代生活中&#xff0c;噪音无处不在&#xff0c;它常常干扰着我们的工作、学习与休闲时光。而一款高性价比的降噪蓝牙耳机&#xff0c;就如同一个贴心的伙伴&#xff0c;能为我们营造出一片宁静的听觉空间。如今&#xff0c;耳机市场蓬勃发展&#xff0c;想要好的头…

第161天:安全开发-Python-红队项目漏扫调用API推送微信任务自动添加并启动

目录 案例一&#xff1a;Python-红队项目-Xray调用推送微信 案例二&#xff1a;Python-红队项目-Awvs 调用自动添加 案例三&#xff1a; Python-红队项目-SQLMAP 调用自动添加 案例一&#xff1a;Python-红队项目-Xray调用推送微信 首先本地测试调用api发送信息给微信 api…