【大模型LLM面试合集】大语言模型架构_layer_normalization
2.layer_normalization
1.Normalization
1.1 Batch Norm
为什么要进行BN呢?
- 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。
- Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。
BN的主要思想: 针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布, 避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。
BN的使用位置: 全连接层或卷积操作之后,激活函数之前。
BN算法过程:
- 沿着通道计算每个batch的均值
- 沿着通道计算每个batch的方差
- 做归一化
- 加入缩放和平移变量 γ \gamma γ和 β \beta β
加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。
BN的作用:
- 允许较大的学习率;
- 减弱对初始化的强依赖性
- 保持隐藏层中数值的均值、方差不变,让数值更稳定,为后面网络提供坚实的基础;
- 有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)
BN存在的问题:
- 每次是在一个batch上计算均值、方差,如果batch size太小,则计算的均值、方差不足以代表整个数据分布。
- batch size太大: 会超过内存容量;需要跑更多的epoch,导致总训练时间变长;会直接固定梯度下降的方向,导致很难更新。
1.2 Layer Norm
LayerNorm是大模型也是transformer结构中最常用的归一化操作,简而言之,它的作用是 对特征张量按照某一维度或某几个维度进行0均值,1方差的归一化 操作,计算公式为:
y = x − E ( x ) V ar ( x ) + ϵ ∗ γ + β \mathrm{y}=\frac{\mathrm{x}-\mathrm{E}(\mathrm{x})}{\sqrt{\mathrm{V} \operatorname{ar}(\mathrm{x})+\epsilon}} * \gamma+\beta y=Var(x)+ϵx−E(x)∗γ+β
这里的 x x x 可以理解为** 张量中具体某一维度的所有元素**,比如对于 shape 为 (2,2,4) 的张量 input,若指定归一化的操作为第三个维度,则会对第三个维度中的四个张量(2,2,1),各进行上述的一次计算.
详细形式:
a i = ∑ j = 1 m w i j x j , y i = f ( a i + b i ) a_{i}=\sum_{j=1}^{m} w_{i j} x_{j}, \quad y_{i}=f\left(a_{i}+b_{i}\right) ai=j=1∑mwijxj,yi=f(ai+bi)
a ˉ i = a i − μ σ g i , y i = f ( a ˉ i + b i ) , \bar{a}_{i}=\frac{a_{i}-\mu}{\sigma} g_{i}, \quad y_{i}=f\left(\bar{a}_{i}+b_{i}\right), aˉi=σai−μgi,yi=f(aˉi+bi),
μ = 1 n ∑ i = 1 n a i , σ = 1 n ∑ i = 1 n ( a i − μ ) 2 . \mu=\frac{1}{n} \sum_{i=1}^{n} a_{i}, \quad \sigma=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(a_{i}-\mu\right)^{2}}. μ=n1i=1∑nai,σ=n1i=1∑n(ai−μ)2.
这里结合PyTorch的nn.LayerNorm算子来看比较明白:
nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, device=None, dtype=None)
normalized_shape
:归一化的维度,int(最后一维)list(list里面的维度),还是以(2,2,4)为例,如果输入是int,则必须是4,如果是list,则可以是[4], [2,4], [2,2,4],即最后一维,倒数两维,和所有维度eps
:加在分母方差上的偏置项,防止分母为0elementwise_affine
:是否使用可学习的参数 γ \gamma γ 和 β \beta β ,前者开始为1,后者为0,设置该变量为True,则二者均可学习随着训练过程而变化
Layer Normalization (LN) 的一个优势是不需要批训练,在单条数据内部就能归一化。LN不依赖于batch size和输入sequence的长度,因此可以用于batch size为1和RNN中。LN用于RNN效果比较明显,但是在CNN上,效果不如BN。
1.3 Instance Norm
IN针对图像像素做normalization,最初用于图像的风格化迁移。在图像风格化中,生成结果主要依赖于某个图像实例,feature map 的各个 channel 的均值和方差会影响到最终生成图像的风格。所以对整个batch归一化不适合图像风格化中,因而对H、W做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
对于,IN 对每个样本的 H、W 维度的数据求均值和标准差,保留 N 、C 维度,也就是说,它只在 channel 内部求均值和标准差,其公式如下:
y t i j k = x t i j k − μ t i σ t i 2 + ϵ μ t i = 1 H W ∑ l = 1 W ∑ m = 1 H x t i l m σ t i 2 = 1 H W ∑ l = 1 W ∑ m = 1 H ( x t i l m − m u t i ) 2 y_{t i j k}=\frac{x_{t i j k}-\mu_{t i}}{\sqrt{\sigma_{t i}^{2}+\epsilon}} \quad \mu_{t i}=\frac{1}{H W} \sum_{l=1}^{W} \sum_{m=1}^{H} x_{t i l m} \quad \sigma_{t i}^{2}=\frac{1}{H W} \sum_{l=1}^{W} \sum_{m=1}^{H}\left(x_{t i l m}-m u_{t i}\right)^{2} ytijk=σti2+ϵxtijk−μtiμti=HW1l=1∑Wm=1∑Hxtilmσti2=HW1l=1∑Wm=1∑H(xtilm−muti)2
1.5 Group Norm
GN是为了解决BN对较小的mini-batch size效果差的问题**。**
GN适用于占用显存比较大的任务,例如图像分割。对这类任务,可能 batch size 只能是个位数,再大显存就不够用了。而当 batch size 是个位数时,BN 的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN 也是独立于 batch 的,它是 LN 和 IN 的折中。
具体方法: GN 计算均值和标准差时,把每一个样本 feature map 的 channel 分成 G 组,每组将有 C/G 个 channel,然后将这些 channel 中的元素求均值和标准差。各组 channel 用其对应的归一化参数独立地归一化。
μ n g ( x ) = 1 ( C / G ) H W ∑ c = g C / G ( g + 1 ) C / G ∑ h = 1 H ∑ w = 1 W x n c h w \mu_{n g}(x)=\frac{1}{(C / G) H W} \sum_{c=g C / G}^{(g+1) C / G} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n c h w} μng(x)=(C/G)HW1c=gC/G∑(g+1)C/Gh=1∑Hw=1∑Wxnchw
σ n g ( x ) = 1 ( C / G ) H W ∑ c = g C / G ( g + 1 ) C / G ∑ h = 1 H ∑ w = 1 W ( x n c h w − μ n g ( x ) ) 2 + ϵ \sigma_{n g}(x)=\sqrt{\frac{1}{(C / G) H W} \sum_{c=g C / G}^{(g+1) C / G} \sum_{h=1}^{H} \sum_{w=1}^{W}\left(x_{n c h w}-\mu_{n g}(x)\right)^{2}+\epsilon} σng(x)=(C/G)HW1c=gC/G∑(g+1)C/Gh=1∑Hw=1∑W(xnchw−μng(x))2+ϵ
1.6 RMS Norm
与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分,计算公式为:
a ˉ i = a i RMS ( a ) g i , w h e r e RMS ( a ) = 1 n ∑ i = 1 n a i 2 . \bar{a}_{i}=\frac{a_{i}}{\operatorname{RMS}(\mathbf{a})} g_{i}, \quad where~ \operatorname{RMS}(\mathbf{a})=\sqrt{\frac{1}{n} \sum_{i=1}^{n} a_{i}^{2}}. aˉi=RMS(a)aigi,where RMS(a)=n1i=1∑nai2.
RMS中去除了mean
的统计值的使用,只使用root mean square(RMS)
进行归一化。
1.4 pRMSNorm介绍
RMS具有线性特征,所以提出可以用部分数据的RMSNorm来代替全部的计算,pRMSNorm表示使用前p%的数据计算RMS值。k=n*p表示用于RMS计算的元素个数。实测中,使用6.25%的数据量可以收敛
RMS ‾ ( a ) = 1 k ∑ i = 1 k a i 2 \overline{\operatorname{RMS}}(\mathbf{a})=\sqrt{\frac{1}{k} \sum_{i=1}^{k} a_{i}^{2}} RMS(a)=k1i=1∑kai2
1.7 Deep Norm
Deep Norm是对Post-LN的的改进,具体的:
- DeepNorm在进行Layer Norm之前会以 α \alpha α 参数扩大残差连接
- 在Xavier参数初始化过程中以 β \beta β 减小部分参数的初始化范围
一些模型的具体参数使用方法如下:
论文中,作者认为 Post-LN 的不稳定性部分来自于梯度消失以及太大的模型更新,同时,有以下几个理论分析
- 定义了“预期模型更新”的概念表示 模型更新的规模量级
- 证明了 W Q W^Q WQ和 W K W^K WK不会改变注意力输出大小数量级的界限,因而 β \beta β 并没有缩小这部分参数
- 模型倾向于累积每个子层的更新,从而导致模型更新量呈爆炸式增长,从而使早期优化变得不稳定
- 使用Deep Norm 的 “预期模型更新”,在参数 α , β \alpha, \beta α,β 取值适当的时候,以常数为界
同时,作者通过实验证实了Deep Norm在训练深层transformer模型的时候具备近乎恒定的更新规模,成功训练了1000层transformer的模型,认为Deep Norm在具备 Post-LN 的良好性能 的同时又有 Pre-LN 的稳定训练
代码实现:microsoft/torchscale: Foundation Architecture for (M)LLMs
2. BN & LN & IN & GN
常用的Normalization方法主要有:
- Batch Normalization(BN,2015年)、
- Layer Normalization(LN,2016年)、
- Instance Normalization(IN,2017年)、
- Group Normalization(GN,2018年)。
它们都是从激活函数的输入来考虑、做文章的,以不同的方式对激活函数的输入进行 Norm 的。
将输入的 feature map shape 记为**[N, C, H, W]
**,其中N表示batch size,即N个样本;C表示通道数;H、W分别表示特征图的高度、宽度。这几个方法主要的区别就是在:
- BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;
- LN在通道方向上,对C、H、W归一化,主要对RNN效果明显;
- IN在图像像素上,对H、W做归一化,用在风格化迁移;
- GN将channel分组,然后再做归一化。
比喻成一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 有W 个字符。
- BN 求均值时,相当于把这些书按页码一一对应地加起来(例如第1本书第36页,第2本书第36页…),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字),求标准差时也是同理。
- LN 求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”,求标准差时也是同理。
- IN 求均值时,相当于把一页书中所有字加起来,再除以该页的总字数:H×W,即求每页书的“平均字”,求标准差时也是同理。
- GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,求每个小册子的“平均字”和字的“标准差”。
3.Post-LN 和 Pre-LN
左边是原版Transformer的Post-LN,即将LN放在addition之后;右边是改进之后的Pre-LN,即把LN放在FFN和MHA之前。
一般认为,Post-Norm在残差之后做归一化,对参数正则化的效果更强,进而模型的收敛性也会更好;而Pre-Norm有一部分参数直接加在了后面,没有对这部分参数进行正则化,可以在反向时防止梯度爆炸或者梯度消失,大模型的训练难度大,因而使用Pre-Norm较多。
目前比较明确的结论是:同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm。Pre Norm更容易训练好理解,因为它的恒等路径更突出,但为什么它效果反而没那么好呢?为什么Pre Norm的效果不如Post Norm?
参考资料:
- Batch Normalization
- Layer Normalization
- Instance Normalization
- Group Normalization
- Root Mean Square Layer Normalization
- Group Normalization
- Deep Normalization
- A Survey of Large Language Models
相关文章:

【大模型LLM面试合集】大语言模型架构_layer_normalization
2.layer_normalization 1.Normalization 1.1 Batch Norm 为什么要进行BN呢? 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。Internal Covariat…...

OpenGL笔记八之EBO和EBO绘制流程
OpenGL笔记八之EBO和EBO绘制流程 —— 2024-07-07 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记八之EBO和EBO绘制流程1.EBO2.glDrawElements:如果使用了ebo,最后一个参数可以写03.glDrawElements:如果使用了e…...

maven——(重要)手动创建,构建项目
创建项目 手动按照maven层级建好文件夹,并写上java,测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下,执行: mvn compile 就开始显示下面这些,…...

数学建模·非线性规划
整型规划 适用于一个变量或多个变量的值只能是整型的情况 整形规划的分类 0-1背包问题 对于一个物品来说,只有选和不选两种情况 表现为单下标,单变量问题 例:建设学校问题 对于每个学校来说只有选和不选两种情况,在数学上我们用…...

SpringCloud第三篇(服务中心与OpenFeign)
p 文章目录 一、服务中心二、Nacos注册中心 一、服务中心 在上一章我们实现了微服务拆分,并且通过Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题。 试想一下,假如商品微服务被调用较多,为了应对更高的并发…...

Linux重要知识点
1. 命令行操作 Linux大多数操作都是通过命令行进行的。熟悉常用命令和脚本是使用Linux的基础。 基本命令:如 ls, cd, cp, mv, rm,这些命令用于文件和目录的管理。文件权限和管理:了解如何使用 chmod, chown, chgrp 等命令来管理文件权限和所…...

Unity宏和编辑器
宏:UNITY_EDITOR 等等 编辑器:Unity未运行时的状态 如何使用:#if UNITY_EDITOR 代码 #endif 什么情况下使用:包裹那些想要在编辑器模式下使用的代码 而在Unity运行时不会去调用的代码 AssetDatabase.LoadAssetAtPath(路…...

计算机网络——网络层(概念及IP地址划分)
目录 网络层概念 网络层向上层提供的两种服务 虚电路 网络提供数据报服务 虚电路服务与数据报服务的对比 网络层的两个层面 分组传送到路由器的运作 对网络层进行分层 网际协议IP 虚拟互联网络 IP地址 IP地址及其表示方法 IP地址的计算方式 IP地址的结构 …...

【JVM实战篇】内存调优:内存泄露危害+内存监控工具介绍+内存泄露原因介绍
文章目录 内存调优内存溢出和内存泄漏内存泄露带来什么问题内存泄露案例演示内存泄漏的常见场景场景一场景二 解决内存溢出的方法常用内存监控工具Top命令优缺点 VisualVM软件、插件优缺点监控本地Java进程监控服务器的Java进程(生产环境不推荐使用) Art…...

CVE漏洞爬虫脚本
前言:前阵子公司非要把CVE漏洞信息拉倒本地,说方便安全员们查看,其实在莫慌看来,大可不必,90%的CVE漏洞其实不具备现实利用的可能性的(不代表不能被利用),但是你说它没有意义也是不对…...

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解
今天,小编将为大家讲解如何搭建一个完整的互联网医院系统源码,并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统,需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块…...

高通平台android的Framework开发遇到的一些问题总结
涉及到framwork的修改一般都在QSSI文件夹下。 1、Android设备,发现耳机插入了设备,但是设备statusbar并没有显示耳机插入的状态。 frameworks/base/packages/SystemUI/res/values/config.xml 下修改: <string-array name"config_s…...

基于modbus tcp通讯的雷赛导轨控制器调试软件
0.前言 之前工作遇到了雷赛电机驱动器设备,主要是用来控制光学导轨移动。雷赛的调试软件用的时串口通讯,还要他们定制的串口线,在现场都是485转网络的接口,调试起来也很不方便。所以我就照着他们的说明书,写了一个简易…...

阿里云产品流转
本文主要记述如何使用阿里云对数据进行流转,这里只是以topic流转(再发布)为例进行说明,可能还会有其他类型的流转,不同服务器的流转也可能会不一样,但应该大致相同。 1 创建设备 具体细节可看:…...

GO语言中的接口(interface)
go 接口 interface 1、什么是接口(interface)?2、注意事项3、interface底层实现4、侵入式与非侵入式5、接口的应用场景空接口的应用场景 6、其他使用 1、什么是接口(interface)? 在Go语言中,接口…...

模拟电路再理解系列(2)-电源滤波电路
前言 今天梳理一下电源滤波电路,在大部分电路设计中,都有滤波电路这一块儿,严格地说的话除了电源滤波还有信号滤波,经常会看到电路里面有一些电容,电感等串并联在一起的模块,大概率就是起到滤波作用&#…...

uniapp使用多列布局显示图片,一行两列
完整代码: <script setup>const src "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg" </script><template><view class"content"><view class"img-list"><image :src"src…...

近期几首小诗汇总-生活~卷
生活 为生活飘零,风雨都不阻 路见盲人艰,为她心点灯 贺中科大家长论坛成立十五周年 科学家园有喜贺 园外丑汉翘望中 曾一学子入我科 正育科二盼长大 憧憬也能入此家 与科学家论短长 园外翘首听高论 发现有隙入此坛 竟然也能注册成 入园浏览惶然立 此贴…...

超时导致SparkContext构造失败的问题探究
文章目录 1.前言2. 基于事故现场对问题进行分析2.1 日志分析2.2 单独测试Topology代码试图重现问题 3. 源码解析3.1 Client模式和Cluster模式下客户端的提交和启动过程客户端提交时在两种模式下的处理逻辑ApplicationMaster启动时在两种模式下的处理逻辑 3.2 两种模式下的下层角…...

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)
目录 一、引言 二、音频分类(audio-classification) 2.1 概述 2.2 技术原理 2.2.1 Wav2vec 2.0模型 2.2.1 HuBERT模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.4 pipeline实战 2.4.1 …...

Nginx 负载均衡详解
Nginx是一个高性能的HTTP和反向代理服务器,拥有丰富的功能和模块,负载均衡就是其中之一。负载均衡是一种技术,用于在多台服务器之间分配工作负载,以确保高可用性和可靠性。本文将详细介绍Nginx的负载均衡算法、工作原理、配置方法…...

Unity3D开发之传送带实现
/// <summary> /// 传送带 直线传送带 /// </summary> public class ConveyerBelt : MonoBehaviour {public float Speed 1;protected float mspeed;protected Vector3 direction;protected Rigidbody rd;List<GameObject> Goods new List<GameObject&…...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(二)-支持高分辨率视频直播应用
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...

python的私有属性和数据封装
1.私有属性 在 Python 中,私有属性是一种编程约定,用于表示某些属性在类的内部使用,不希望被外部直接访问或修改。 私有属性的命名通常以双下划线 __ 开头。例如,在类中定义一个私有属性可以像这样: class MyClass:de…...

一文学会鉴别“套壳”ChatGPT模型
一文学会鉴别“套壳”ChatGPT模型 随着ChatGPT等明星模型的诞生,市场上也开始出现一些“套壳”现象,即部分模型表面标榜原创或先进,实则在核心算法上与知名模型高度相似。作为技术探索者,如何拨开迷雾,识别这些“李鬼…...

Docker基本管理1
Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自…...

python-28-零基础自学python-json存数据、读数据,及程序合并
学习内容:《python编程:从入门到实践》第二版 知识点: import json引入、 try-except-else return def函数、打开文件、 练习内容: 练习10-11:喜欢的数 编写一个程序,提示用户输入喜欢的数ÿ…...

Excel第30享:基于辅助列的条件求和
1、需求描述 如下图所示,现要统计2022年YTD(Year To Date:年初至今日)各个人员的“上班工时(a2)”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1:确定逻辑。“从日期中提取出…...

Java查看RSA密钥的ASN1结构
背景:服务端使用Java开发的,接口需要客户端传一个RSA公钥,手机端使用Flutter开发的,然后就选择使用 pointycastle 生成密钥,很不巧,dart版本不像Java一样有个可以直接获取编码过的公钥信息的方法࿱…...

友思特方案 | 低延迟GigE Vision解决方案:用于红外设备、医疗和工业级探测面板
导读 维持实时视频系统软硬件的长期成本效益,是该系统在医疗、工业等领域广泛应用的前提。友思特低延迟GigE Vision解决方案创新性地突破了这一难题,提供高带宽且高可靠性的端到端网络链接,有效降低了开发成本、复杂性和时间。 引言 虽然实…...