当前位置: 首页 > news >正文

LLM:归一化 总结

一、Batch Normalization

原理

Batch Normalization 是一种用于加速神经网络训练并提高稳定性的技术。它通过在每一层网络的激活值上进行归一化处理,使得每一层的输入分布更加稳定,从而加速训练过程,并且减轻了对参数初始化的依赖。

公式

在这里插入图片描述

例子

下面是一个使用 Python 和 NumPy 实现的 Batch Normalization 例子:

import numpy as npclass BatchNormalization:def __init__(self, epsilon=1e-5, momentum=0.9):# 初始化BatchNormalization类,设定epsilon和momentum的默认值self.epsilon = epsilon  # 防止分母为零的小常数self.momentum = momentum  # 用于更新运行中均值和方差的动量self.running_mean = None  # 运行中的均值self.running_var = None  # 运行中的方差self.gamma = None  # 缩放参数self.beta = None  # 平移参数def initialize_params(self, D):# 初始化gamma, beta, running_mean和running_var的参数self.gamma = np.ones(D)  # 初始化缩放参数为1self.beta = np.zeros(D)  # 初始化平移参数为0self.running_mean = np.zeros(D)  # 初始化运行中的均值为0self.running_var = np.ones(D)  # 初始化运行中的方差为1def forward(self, X, training=True):# 前向传播,X是输入数据,training表示是否为训练模式if self.running_mean is None:# 如果是第一次运行,初始化参数self.initialize_params(X.shape[1])  # X.shape[1]是特征的维度if training:# 训练模式下batch_mean = np.mean(X, axis=0)  # 计算mini-batch的均值batch_var = np.var(X, axis=0)  # 计算mini-batch的方差# axis=0 代表沿着第一维,也就是行,可以想象成一个尺子,和每行对齐,依次往下移动,得到所有行在这些列上的均值,因此维度是【5】# axis=1 代表沿着第二维,也就是列。同理,最后维度是行的维度。# 更新运行中的均值self.running_mean = self.momentum * self.running_mean + (1 - self.momentum) * batch_mean# 更新运行中的方差self.running_var = self.momentum * self.running_var + (1 - self.momentum) * batch_var# 标准化输入数据X_normalized = (X - batch_mean) / np.sqrt(batch_var + self.epsilon)else:# 测试模式下,使用运行中的均值和方差进行标准化X_normalized = (X - self.running_mean) / np.sqrt(self.running_var + self.epsilon)# 应用可学习的缩放和平移参数out = self.gamma * X_normalized + self.betareturn outdef __call__(self, X, training=True):# 使类实例可以像函数一样被调用return self.forward(X, training)# 示例数据
np.random.seed(0)  # 设置随机种子以确保结果可重复
X = np.random.randn(10, 5)  # 生成一个随机的10x5的矩阵# 创建BatchNormalization实例
bn = BatchNormalization()# 在训练模式下进行前向传播
output_train = bn(X, training=True)
print("Training Mode Output:\n", output_train)  # 打印训练模式下的输出# 在测试模式下进行前向传播
output_test = bn(X, training=False)
print("Testing Mode Output:\n", output_test)  # 打印测试模式下的输出

维度变化

假设输入数据 X 的形状是 (batch_size, D),其中 D 是特征的维度,batch_size 是 mini-batch 的大小。Batch Normalization 处理后的输出数据形状保持不变,仍然是 (batch_size, D)

应用场景

Batch Normalization 可以应用于网络的任意层,常见的应用包括:

  • 全连接层后的激活值
  • 卷积层后的激活值(在这种情况下,均值和方差是沿着通道维度计算的)

结论

Batch Normalization 是一种强大的正则化和加速训练的方法,通过对 mini-batch 内的数据进行归一化处理,减少了内部协变量偏移,提高了网络的训练效率和稳定性。
BN的基本思想就是:把网络的每个隐含层的分布都归一化到标准正态。其实就是把越来越偏的分布强制拉回到比较标准的分布,这样使得激活函数的输入值落在该激活函数对输入比较敏感的区域,这样一来输入的微小变化就会导致损失函数较大的变化。通过这样的方式可以使梯度变大,就避免了梯度消失的问题,而且梯度变大意味着收敛速度快,能大大加快训练速度。

参考:https://blog.csdn.net/BXD1314/article/details/120148013
https://zhuanlan.zhihu.com/p/244983042

二、Layer Normalization

原理

Layer Normalization 是一种用于标准化神经网络层输出的技术,它与 Batch Normalization 类似,但不同的是它是沿着每个样本的特征维度进行标准化。Layer Normalization 不依赖于 mini-batch 的统计数据,因此在处理 RNN 等时间序列数据时表现更好。

公式

在这里插入图片描述

例子

下面是一个使用 Python 和 NumPy 实现的 Layer Normalization 例子:

import numpy as npclass LayerNormalization:def __init__(self, epsilon=1e-5):# 初始化LayerNormalization类,设定epsilon的默认值self.epsilon = epsilon  # 防止分母为零的小常数self.gamma = None  # 缩放参数self.beta = None  # 平移参数def initialize_params(self, D):# 初始化gamma和beta的参数self.gamma = np.ones(D)  # 初始化缩放参数为1self.beta = np.zeros(D)  # 初始化平移参数为0def forward(self, X):# 前向传播,X是输入数据if self.gamma is None or self.beta is None:# 如果是第一次运行,初始化参数self.initialize_params(X.shape[1])  # X.shape[1]是特征的维度# 计算每个样本的均值和方差mean = np.mean(X, axis=1, keepdims=True)  # keepdims=True保持结果的维度一致var = np.var(X, axis=1, keepdims=True)  # keepdims=True保持结果的维度一致# 标准化输入数据X_normalized = (X - mean) / np.sqrt(var + self.epsilon)# 应用可学习的缩放和平移参数out = self.gamma * X_normalized + self.betareturn outdef __call__(self, X):# 使类实例可以像函数一样被调用return self.forward(X)# 示例数据
np.random.seed(0)  # 设置随机种子以确保结果可重复
X = np.random.randn(10, 5)  # 生成一个随机的10x5的矩阵# 创建LayerNormalization实例
ln = LayerNormalization()# 进行前向传播
output = ln(X)
print("Layer Normalization Output:\n", output)  # 打印输出

关键点解释

  • 计算每个样本的均值和方差

    • 使用 np.mean(X, axis=1, keepdims=True) 计算每个样本的均值,axis=1 表示沿着特征维度计算,keepdims=True 确保输出的形状与输入一致。
    • 使用 np.var(X, axis=1, keepdims=True) 计算每个样本的方差,axis=1 表示沿着特征维度计算,keepdims=True 确保输出的形状与输入一致。
  • 标准化和应用缩放和平移参数

    • 对输入数据进行标准化,得到 X_normalized
    • 使用可学习的参数 gammabeta 对标准化后的数据进行缩放和平移,得到最终输出 out

总结

Layer Normalization 是一种有效的正则化技术,特别适用于 RNN 和其他不依赖于 mini-batch 统计的模型。它通过对每个样本的特征维度进行标准化,提供了更稳定的训练过程。

参考:https://pytorch.org/docs/stable/generated/torch.nn.LayerNorm.html
https://zhuanlan.zhihu.com/p/54530247

三、RMSNorm

公式

在这里插入图片描述

RMSNorm的思想就是移除层归一化中的均值的计算部分。

代码

import torch
import torch.nn as nn# 假设有一个批次(batch)的嵌入向量
batch, sentence_length, embedding_dim = 20, 5, 10# 生成随机的嵌入向量,形状为 [20, 5, 10]
embedding = torch.randn(batch, sentence_length, embedding_dim)# 创建RMSNorm实例,传入的特征维度是 embedding_dim
rms_norm = nn.RMSNorm(embedding_dim)# 对嵌入向量进行归一化
normalized_embedding = rms_norm(embedding)print("Original Embedding:\n", embedding.shape)
print("Normalized Embedding:\n", normalized_embedding.shape)

参考:
https://mltalks.medium.com/rmsnorm%E8%AE%BA%E6%96%87%E9%98%85%E8%AF%BB-bfae83f6d464
https://blog.csdn.net/yjw123456/article/details/138139970
https://blog.csdn.net/qq_43814415/article/details/136985115
https://pytorch.org/docs/stable/generated/torch.nn.RMSNorm.html#torch.nn.RMSNorm

四、区别

Batch Normalization (BatchNorm) vs. Layer Normalization (LayerNorm)

Batch Normalization

原理:Batch Normalization 对 mini-batch 内的激活值进行标准化处理,使得每一层的输入分布更稳定。

适用场景

  • 适用于卷积神经网络(CNN),尤其在计算机视觉任务中效果显著。
  • 对于大型批次训练效果更好。

缺陷

  • 在小批量训练或在线学习(batch size=1)时表现不佳。
  • 依赖于 mini-batch 的统计数据,在循环神经网络(RNN)等序列模型中效果不佳。
Layer Normalization

原理:Layer Normalization 对每个样本的特征维度进行标准化,使得每层的输入特征分布更加稳定。

适用场景

  • 适用于循环神经网络(RNN)和变压器(Transformer)等模型。
  • 适合小批量或在线学习,因为不依赖于 mini-batch 的统计数据。

缺陷

  • 计算量较大,增加了训练时间。
  • 在某些特定任务中,效果可能不如 Batch Normalization。

Layer Normalization vs. RMS Normalization (RMSNorm)

Layer Normalization

优点

  • 稳定训练过程,适用于各种深度神经网络。

缺陷

  • 计算量较大,因为需要计算均值和方差。
RMS Normalization

原理:RMSNorm 通过计算均方根值对输入进行归一化,而不需要计算均值和方差。

适用场景

  • 适用于不需要偏置项的模型。
  • 在处理变压器和RNN等序列模型时表现良好。

优点

  • 计算简便,仅需计算均方根值,计算量小。
  • 在一些任务中表现与 LayerNorm 相当,但训练速度更快。

缺陷

  • 在某些特定任务中可能不如 LayerNorm 稳定。

总结

  • Batch Normalization 更适合卷积神经网络和大型批量训练,但不适用于小批量训练和序列模型。
  • Layer Normalization 更适用于序列模型和小批量训练,虽然计算量较大,但能提供稳定的训练效果。
  • RMS Normalization 通过简化计算实现了高效的归一化,适用于需要快速训练且不需要偏置项的模型。

相关文章:

LLM:归一化 总结

一、Batch Normalization 原理 Batch Normalization 是一种用于加速神经网络训练并提高稳定性的技术。它通过在每一层网络的激活值上进行归一化处理,使得每一层的输入分布更加稳定,从而加速训练过程,并且减轻了对参数初始化的依赖。 公式 …...

蓝桥杯 2024 年第十五届省赛真题 —— 最大异或结点

目录 1. 最大异或结点1. 问题描述2. 输入格式3. 输出格式4. 样例输入5. 样例输出6. 样例说明7. 评测用例规模与约定 2. 解题思路1. 解题思路2. AC_Code 1. 最大异或结点 1. 问题描述 小蓝有一棵树,树中包含 N N N 个结点,编号为 0 , 1 , 2 , ⋯ , N − 1 0,1,2,…...

AV1技术学习:Loop Restoration Filter

环路恢复滤波器(restoration filter)适用于64 64、128 128 或 256 256 像素块单元,称为 loop restoration units (LRUs)。每个单元可以独立选择是否跳过滤波、使用维纳滤波器(Wiener filter)或使用自导滤波器&#…...

如何使用python实现自动化办公?干货满满!

Python作为一种简单而强大的编程语言,不仅在数据科学和软件开发领域广受欢迎,还在办公自动化方面发挥了巨大作用。通过Python,我们可以编写脚本来自动执行各种重复性任务,从而提高工作效率并减少错误。在本文中,我们将…...

QT Creator下载安装详细教程(保姆级教程)

qt下载安装 1.下载网址 通过清华大学开源软件镜像站进行下载:链接: https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/online_installers/ 这里我选的是4.4版本的,也可以选择4.7版本,问题不大。 根据电脑系统选择下载linux…...

无人机公司销售需要什么资质

国家民航局于2024年1月1日实施了《无人驾驶航空器飞行管理暂行条例》,根据这个管理条例里面的 第十一条 使用除微型以外的民用无人驾驶航空器从事飞行活动的单位应当具备下列条件,并向国务院民用航空主管部门或者地区民用航空管理机构申请取得民用无人驾…...

代码自动化重构工具OpenRewrite介绍

OpenRewrite 是一个用于大规模自动化代码重构的开源框架,它极大地提升了开发人员的研发效率,通过自动化地进行代码重构和转换,帮助开发人员消除代码库中的技术债务。 通过 LST、访问器和配方的结合,OpenRewrite 能够实现准确的代…...

Win11安装Docker

下载Docker Desktop for Windows 下载 下载连接:Install Docker Desktop on Windows | Docker Docs 地址在国外,需要科学上网。也可使用我提供的,百度网盘:https://pan.baidu.com/s/1232TTkkzLsoZyFjC3bmgiQ 安装 下载完成之后…...

Windows电脑如何启动RTSP服务实现本地摄像头数据共享

技术背景 提起Windows共享本地摄像头,好多人想到的是通过ffmepg或vlc串流到服务器,实际上,用轻量级RTSP服务更简单,本文就介绍下,如何用大牛直播SDK的Windows轻量级RTSP服务,采集摄像头,生成本…...

探索 Spring WebFlux:构建响应式 Web 应用

探索 Spring WebFlux:构建响应式 Web 应用 随着互联网的发展,传统的同步编程模型已经难以应对高并发和高吞吐量的需求。为了解决这些问题,响应式编程逐渐成为主流。Spring WebFlux 是 Spring 5 引入的一个响应式 Web 框架,它基于…...

C# 植物大战僵尸

Winform 版本开发 高效率、流畅植物大战僵尸 git地址:冯腾飞/植物大战僵尸...

css 作业 2

文章目录 前言第四题第五题第六题第七题第八题第九题第十题(子标签) 前言 昨天写了前面三次作业,今天把剩下的七个作业写完 第四题 http://127.0.0.1:5500/index1.html,就用这个网址查看代码在网页的展示效果 代码评测过不了&…...

axios在vue中的使用

文章目录 一、axios是什么?二、使用步骤2.1 下载2.2 引入2.3 使用Get请求Post请求Forms 三、封装 一、axios是什么? Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和no…...

FastAPI(七十七)实战开发《在线课程学习系统》接口开发-- 课程编辑和查看评论

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 课程编辑 先来看下课程编辑 1.判断是否登录 2.判断课程是否存在 3.是否有权限(只有自己可以修改自己的课程) 4.名称是否重复…...

【JavaEE初阶】线程的概念及创建

目录 📕 前言 📕 认识线程(Thread) 🚩 概念 😊线程是什么 🙂 为啥要有线程 😭 进程和线程的区别(面试题重点) 🤭 Java的线程和操作系统线程…...

0727,学什么学,周六就应该休息!!!!!

周六就应该休息,一天就忙了两小时也不是我的错喵 目录 UDP的小总结 01:使用select实现一个基于UDP的一对一即时聊天程序。 1.0 复读机服务器和树洞客户端 2.0 byby不了一点的敬业服务器!!! 今天到此为止&#x…...

【C#】获取DICOM图像像素的像素值

8位像素深度的像素值 public byte GetGreyValue(int x, int y) {x Math.Min(x, m_nWidth - 1);y Math.Min(y, m_nHeight - 1);unsafe{byte* greyValue (byte*)m_pDicomData.ToPointer() y * m_nWidth x;return *greyValue;} } 16位像素深度的像素值 public ushort GetG…...

k8s多集群管理工具kubecm

文章目录 一、概述二、安装1、官网链接2、各平台安装2.1、MacOS2.2、Linux2.3、Windows 三、实例1、验证2、配置kubecm自动补全(选做)2.1、Bash2.2、Zsh2.3、fish2.4、PowerShell 3、创建存放kubeconfig文件的目录4、添加到 $HOME/.kube/config4.1、kube…...

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换,效率过低,所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本(Build 19041 及更高版本)或 Win…...

【C#】在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合?

问题点 使用C#语言在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合? 这个多边形可能存在交叉及互相重叠部分 图像的宽、高可以定义为:2000*2000 多边形坐标集合:Point[] polygon_points new Point[] { new Point…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...