手搓多模态-04 归一化介绍

机器学习归一化一个非常重要工具帮助我们加速训练速度我们前面SiglipVisionTransformer 也有用到归一化如下代码所示

class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层,将模型的调用分为了图像嵌入模型和transformer编码器模型的调用def __init__(self, config:SiglipVisionConfig):super().__init__()self.config = configself.embed_dim = config.hidden_sizeself.embeddings = SiglipVisionEmbeddings(config) ## 负责将图像嵌入成向量self.encoder = SiglipEncoder(config) ## 负责将向量编码成注意力相关的向量self.post_layer_norm = nn.LayerNorm(embed_dim, eps=config.layer_norm_eps) ## 层归一化def forward(self, pixel_values:torch.Tensor) -> torch.Tensor:"""
		pixel_values: [Batch_size,Channels,Height,Width]"""## [ Batch_size,Channels,Height,Width] -> [Batch_size,Num_Patches,Embedding_size] 
		hidden_states = self.embeddings(pixel_values) ## 将图像嵌入成向量# [Batch_size,Num_Patches,Embedding_size] -> [Batch_size,Num_Patches,Embedding_size]
		last_hidden_state = self.encoder(hidden_states) ## 将向量编码成注意力相关的向量# [Batch_size,Num_Patches,Embedding_size] -> [Batch_size,Num_Patches,Embedding_size]
		last_hidden_state = self.post_layer_norm(last_hidden_state)return last_hidden_state

这里post_layer_norm 就是归一化所以本文一起介绍归一化

归一化解决问题

归一化主要解决神经网络训练过程会出现协变量偏移 问题

协变量偏移(Covariate Shift)是指由于输入样本分布不均匀导致神经网络第一输入剧烈变化第一神经网络输入的剧烈变化又会导致神经网络第一输出产生剧烈变化从而影响传递神经网络之后每一导致每一轮迭代神经网络输出输出剧烈变化从而导致梯度非常不稳定参数找不到一个稳定优化方向从而导致训练缓慢

Batch Normalization

假设有一个 mini-batch 的输入 ,也就是:

  • :batch size
  • :通道数(对全连接层来说是特征维度)
  • :空间维度(在卷积层中)

其实本质上Batch Normalization 希望输入特征变化不再那么剧烈希望样本所有特征基于当前批次做一次归一化这样当前批次特征就不会剧烈变化

值得注意图像输入Batch Normalization普通特征Batch Normalization计算差别假定图像输入 [ N, C, H, W ]那么计算公式所示torch通道维度进行归一化每一个通道像素值通过该通道所有图片像素得到平均值归一化这是因为由于图像处理卷积神经网络里面同一个通道共享同一个卷积核整个通道所有像素看成一个特征

如果普通特征输入形如 N, D 】,NBatch_Size, D特征维度每一个特征通过计算所有N对应特征平均方差归一化

来说如下图所示

问题所在

主要问题在于依赖 mini-batch:批量太小时效果差

  • BatchNorm 的均值和方差是 在 batch 维度上估算 的。
  • 如果 batch size 很小(比如在线学习、NLP中的RNN),统计结果不稳定,归一化效果会变差。
  • 对于 batch size=1 时,根本无法统计 batch 内部分布。

因为BN 尝试一个批次代表整体样本分布但是只有批次样本很大时候才能拟合如果批次样本很小那么又会出现协变量偏移的问题

于是又引申出了layer_normalization....

Layer Normalization

Layer Normalization(层归一化)是为了克服 Batch Normalization 的局限性 而提出的,尤其在 batch size 很小处理序列模型(如 RNN、Transformer) 时非常有用。

LN 核心思想

在一个样本内部的所有特征维度上做归一化,而不是像 BatchNorm 那样在 batch 维度上归一化。

LN做法比较简单

图像卷积场景如果输入N,C,H,W分别代表Batch size通道图像高度宽度此时我们N不同图像图像C特征因为每个通道一整张图像像素都是一个特征一张图像总共C特征每个特征看成 H * W向量于是我们所有特征计算均值方差进行归一化

总结

不管BN还是LN归一化操作使得每一个计算value处于标准0,1)正态分布缓解训练过程协变量偏移问题

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

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

相关文章

Qt 入门 1 之第一个程序 Hello World

Qt 入门1之第一个程序 Hello World 直接上操作步骤从头开始认识,打开Qt Creator,创建一个新项目,并依次执行以下操作 在Qt Creator中,一个Kits 表示一个完整的构建环境,包括编译器、Qt版本、调试器等。在上图中可以直…

深入理解MySQL:核心特性、优化与实践指南

MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前属于Oracle公司。它是目前世界上最流行的开源数据库之一,广泛应用于各种规模的Web应用和企业系统中。 目录 一、核心特点 关系型数据库: 开源免费&am…

Linux 系统安装与优化全攻略:打造高效开发环境

一、开篇引言 (一)Linux 系统的广泛应用 Linux 凭借其开源、稳定且安全的特性,在服务器、嵌入式设备以及开发环境等领域都有着极为广泛的应用。 (二)撰写本文的目的 为读者提供一套全面且实用的指南,助…

代码训练day22回溯算法p1

1.组合 (1)模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯&#…

2024华为OD机试真题-任务最优调度(C++/Java/Python)-E卷-200分

2024华为OD机试最新E卷题库-(D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 考点 题目解析 代码 c++ java python 题目描述 给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执…

每日习题:20250407

2025 2025 2025年 04 04 04月 06 06 06日 题目 1 设 X X X是实随机变量,任意光滑的函数 f : R → R f:\mathbf{R} \rightarrow \mathbf{R} f:R→R,都有: E ( X f ( X ) ) E ( f ′ ( X ) ) E\left(Xf(X)\right)E\left(f(X)\right) E(Xf(X)…

TensorRT 有什么特殊之处

一、TensorRT的定义与核心功能 TensorRT是NVIDIA推出的高性能深度学习推理优化器和运行时库,专注于将训练好的模型在GPU上实现低延迟、高吞吐量的部署。其主要功能包括: 模型优化:通过算子融合(合并网络层)、消除冗余…

JCR一区文章,壮丽细尾鹩莺算法Superb Fairy-wren Optimization-附Matlab免费代码

本文提出了一种新颖的基于群体智能的元启发式优化算法——壮丽细尾鹩优化算法(SFOA),SFOA从精湛的神仙莺的生活习性中汲取灵感。融合了精湛的神仙莺群体中幼鸟的发育、繁殖后鸟类喂养幼鸟的行为以及它们躲避捕食者的策略。通过模拟幼鸟生长、繁殖和摄食阶…

使用Ubuntu18恢复群晖nas硬盘数据外接usb

使用Ubuntu18恢复群晖nas硬盘数据外接usb 1. 接入硬盘2.使用Ubuntu183.查看nas硬盘信息3. 挂载nas3.1 挂载损坏nas硬盘(USB)3.2 挂载当前运行的nas 4. 拷贝数据分批传输 5. 新旧数据对比 Synology NAS 出现故障,DS DiskStation损坏,则可以使用计算机和 U…

linux 安装 mysql记录

sudo apt-get install mysql-server 一直报错,按照下面的终于安装出来了 这个链接 https://cn.linux-console.net/?p13784 第 1 步:要删除 MySQL 及其所有依赖项,请执行以下命令: sudo apt-get remove --purge mysql* 第 2 步…

UE5学习笔记 FPS游戏制作35 使用.csv配置文件

文章目录 导入.csv要求首先创建一个结构体导入配置文件读取配置 导入 .csv要求 第一行必须包含标题 第一列的内容必须不能重复,因为第一列会被当成行的名字,在数据处理中发挥类似于字典的key的作用 当前的配置文件内容如下 首先创建一个结构体 结构…

谈谈策略模式,策略模式的适用场景是什么?

一、什么是策略模式?​​ 策略模式(Strategy Pattern)属于​​行为型设计模式​​。核心思路是将一组​​可替换的算法​​封装在独立的类中,使它们可以在运行时动态切换,同时使客户端代码与具体算法解耦。它包含三个…

AGI大模型(10):prompt逆向-巧借prompt

1 提示词逆向 明确逆向提示词⼯程概念 我们可以给ChatGPT提供⼀个简洁的提示词,让它能够更准确地理解我们所讨论的“逆向提示词⼯程”是什么意思,并通过这个思考过程,帮它将相关知识集中起来,进⽽构建⼀个专业的知识领域 提示词:请你举⼀个简单的例⼦,解释⼀下逆向pro…

IntelliJ IDEA全栈Git指南:从零构建到高效协作开发

文章目录 摘要 正文一、环境搭建:5分钟完成Git与IDEA的深度绑定二、基础操作:IDEA如何将Git效率提升300%三、分支管理:高并发团队的协作秘籍四、强制覆盖:高风险操作的生存指南五、实战避坑:血泪经验总结六、基于老项目…

指针的补充(用于学习笔记的记录)

1.指针基础知识 1.1 指针变量的定义和使用 指针也是一种数据类型&#xff0c;指针变量也是一种变量 指针变量指向谁&#xff0c;就把谁的地址赋值给指针变量 #include<stdio.h>int main() {int a 0;char b 100;printf("%p,%p \n", &a,&b); // …

【Cursor/VsCode】在文件列表中不显示.meta文件

打开设置文件 教程&#xff1a;【Cursor】打开Vscode设置 在settings.json里配置这个&#xff1a; "files.exclude": {"**/*.meta": true }

React-Diffing算法和key的作用

1.验证Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

Linux文件操作命令详解

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在Linux操作系统中,文件操作命令是用户与系统交互的重要工具。掌握这些命令能够高效地管理文件和目录。本文将详细介绍常用的Linux文件操作命令,包括它们的用法、选项、具体示例及运行结果。 1. 查看文…

Redisson使用详解

一、Redisson 核心特性与适用场景 Redisson 是基于 Redis 的 Java 客户端&#xff0c;提供分布式对象、锁、集合和服务&#xff0c;简化分布式系统开发。 典型应用场景&#xff1a; 分布式锁&#xff1a;防止重复扣款、超卖控制&#xff08;如秒杀库存&#xff09;。数据共享…

从代码学习深度学习 - GRU PyTorch版

文章目录 前言一、GRU模型介绍1.1 GRU的核心机制1.2 GRU的优势1.3 PyTorch中的实现二、数据加载与预处理2.1 代码实现2.2 解析三、GRU模型定义3.1 代码实现3.2 实例化3.3 解析四、训练与预测4.1 代码实现(utils_for_train.py)4.2 在GRU.ipynb中的使用4.3 输出与可视化4.4 解析…