LayerNorm层归一化

news2024/11/24 6:46:03

1.背景

与 Batch normalization 不同,Layer normalization 是在特征维度上进行标准化的,而不是在数据批次维度上。像 Batch Norm 它的核心是数据批次之间的归一化【强调的是第 i 批次和第 i+1 批次的区别,然后BN去缩小他们的的区别】,而 Layer Norm 的核心强调的是每个批次中不同维度数据之间的区别。

2.实现原理

Layer normalization 是在特征维度上进行标准化的,而不是在数据批次维度上。

Layer normalization 的计算可以分为两步:
LN的计算过程

3.作用

1、特征强化: 通过归一化,每个样本的特征维度被标准化,使得每个维度的数据在训练过程中更加稳定,从而强化了每个维度数据的特征。
2、缓解梯度消失问题: 归一化使得输入数据的均值为零,方差为一,从而使得激活函数的输出更稳定,减小了梯度消失的问题。
3、稳定训练: 由于每一层的输入数据具有相同的均值和方差,梯度的传播更加稳定,有助于训练过程的稳定性和收敛速度。
4、缓解内部协变量偏移: 通过归一化每个样本的特征,Layer Normalization 可以减少每一层输入的分布变化,这有助于缓解训练过程中内部协变量偏移的问题。【虽然没有像BN那样对不同批次相同维的数据进行归一化(BN通过局部批次的数据得到每一个维度上数值的方差和均值),但是因为LN也缩小了数值的大小,所以说分布变化也一定变小了】
5、加速收敛和提高稳定性: 由于输入的均值和方差固定,梯度的变化更为稳定,从而加速了训练过程中的收敛。同时,归一化后的输入有助于缓解梯度消失和梯度爆炸问题,特别是在深层神经网络中。

4.代码

通过一个简单的例子来解释 Layer Normalization (LN) 是如何工作的

import torch
import torch.nn as nn

# 定义一个继承自nn.Module的LayerNorm类
class LayerNorm(nn.Module):
    def __init__(self, num_features, eps=1e-6):
        super().__init__()
        self.gamma = nn.Parameter(torch.ones(num_features))  # 缩放参数γ,可学习,初始值为1
        self.beta = nn.Parameter(torch.zeros(num_features))  # 偏移参数β,可学习,初始值为0
        self.eps = eps  # 防止除以零的小正数

    def forward(self, x):
        mean = x.mean(dim=-1, keepdim=True)  # 计算最后一维的均值
        std = x.std(dim=-1, keepdim=True, unbiased=False)  # 计算最后一维的标准差
        normalized_x = (x - mean) / (std + self.eps)  # 归一化处理
        return self.gamma * normalized_x + self.beta  # 应用可学习的参数并返回结果

if __name__ == '__main__':
    batch_size = 2
    seqlen = 3
    hidden_dim = 4

    # 初始化一个随机tensor,模拟一个batch中包含若干序列,每个序列有若干特征的情况
    x = torch.randn(batch_size, seqlen, hidden_dim)
    print(x)

    # 初始化自定义的LayerNorm类
    layer_norm = LayerNorm(num_features=hidden_dim)
    output_tensor = layer_norm(x)  # 对x进行层归一化
    print("output after layer norm:\n", output_tensor)

    # 使用PyTorch自带的LayerNorm进行对比
    torch_layer_norm = torch.nn.LayerNorm(normalized_shape=hidden_dim)
    torch_output_tensor = torch_layer_norm(x)  # 对x进行层归一化
    print("output after torch layer norm:\n", torch_output_tensor)

再举一个简单的例子

虑一个小的输入张量,它代表一个批次中的两个样本,每个样本有两个时间步,每个时间步有三个特征【2,2,3】。我们将使用 Python 和 PyTorch 来演示 LN 的过程:

import torch

# 定义一个小的张量,形状为 [batch_size, time_steps, features]
x = torch.tensor([
    [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]],  # 第一个样本的两个时间步
    [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]  # 第二个样本的两个时间步
])

# 手动实现 Layer Normalization,我们将在每个样本的每个时间步上分别归一化
normalized_x = torch.empty_like(x)

for i in range(x.shape[0]):  # 遍历批次
    for j in range(x.shape[1]):  # 遍历时间步
        # 计算第 i 个样本的第 j 个时间步的均值和标准差
        mean = x[i, j].mean()
        std = x[i, j].std()
        
        # 归一化处理
        normalized_x[i, j] = (x[i, j] - mean) / (std + 1e-6)

print("原始数据:")
print(x)
print("归一化后的数据:")
print(normalized_x)

5.LN在Transformer中所放位置

1.PreNorm和PostNorm在公式上的区别:
Post Norm和Pre Norm之间的对比

2.在大模型中的区别:
**Post-LN 😗*是在 Transformer 的原始版本中使用的归一化方案。在此方案中,每个子层(例如,自注意力机制或前馈网络)的输出先通过子层自身的操作——>然后再通过层归一化(Layer Normalization)

**Pre-LN:**是先对输入进行层归一化【LN操作】——>然后再传递到子层操作中【自注意力机制+残差】。这样的顺序对于训练更深的网络可能更稳定,因为归一化的输入可以帮助缓解训练过程中的梯度消失和梯度爆炸问题。
二者在大模型中的区别
残差思想的学习

3.为什么Pre Norm效果比Post Norm效果更好?
我们进行梯度分析:
公式对比得出原因
**总结:**后进行自注意力机制和残差网络,相比之下,能够有效地降低我们的梯度消失风险。

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

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

相关文章

Jacob环境探索(兼容性、管理员、DLL位置、VS环境,COM权限)

概述: 最近在生产开发实践出现了很多问题,经过了一系列排查,特做如下总结 探索成果: 1. jacob.dll的建议位置 首先jacob的官网,以及官方GitHub,你可以从这里找到DLL文件,以及相关资料然后DLL文…

lxml库在爬虫领域的贡献及应用

重头戏lxml库里面的xpath 一段代码给各位开开胃 这段代码首先导入了lxml库中的etree模块,然后定义了一个包含HTML内容的字符串html。接着,我们使用etree.HTML()函数解析这个HTML字符串,得到一个表示整个HTML文档的树形结构。最后,…

WindTerm使用SSH密钥连接阿里云实例,服务器设置SSH密钥登录

安装Windterm 地址https://github.com/kingToolbox/WindTerm/releases 下载完放到文件夹就可以打开 阿里云开启密钥对 打开阿里云ecs控制台 https://ecs.console.aliyun.com/keyPair/region/cn-wulanchabu 网络与安全->密钥对,创建密钥对,创建成…

STM32项目分享:智能蓝牙手环

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

改变Layout布局中路由渲染区域页面跳转变全屏

有一个需求需要点击侧边栏跳转页面时变全屏,而不是还在content中

QWidget 属性——windowTitle·windowIcon·qrc

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、windowTitle二、windowIcon三、qrc 一、windowTitle windowTitle 是一个通常用于表示窗口标题…

企业级开源项目,云缓存解决方案:CacheCloud

CacheCloud:简化缓存管理,释放数据潜力- 精选真开源,释放新价值。 概览 CacheCloud是由搜狐视频团队开发的一款开源的Redis缓存云平台,支持Redis多种架构(Standalone、Sentinel、Cluster)高效管理、有效降低大规模redis运维成本&…

深入理解rtmp(一)之开发环境搭建

深入理解rtmp(一)之开发环境搭建 手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投…

c++【入门】火柴棒三角形问题

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 如下图所示,摆1个火柴棒三角形需要3根火柴,那么摆2个火柴棒三角形就需要6根火柴,请问摆n个火柴棒三角形需要多少根火柴? 输入 一个整数n,代表想要摆放的火柴棒三角形…

[大模型]Llama-3-8B-Instruct FastApi 部署调用

环境准备 在 Autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1。 接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换源…

【AI大模型】Transformers大模型库(九):大模型微调之计算微调参数占比

目录 一、引言 二、计算微调参数占比 2.1 概述 2.2 模型参数结构一览 2.3 微调参数占比计算 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。 🤗 Transform…

【Qt】文件操作

文章目录 1 :peach:Qt 文件概述:peach:2 :peach:输入输出设备类:peach:3 :peach:文件读写类:peach:4 :peach:文件和目录信息类:peach: 1 🍑Qt 文件概述🍑 文件操作是应⽤程序必不可少的部分。Qt 作为⼀个通⽤开发库,提供了跨平台的⽂件操作能…

使用开源的zip.cpp和unzip.cpp实现压缩包的创建与解压(附源码)

目录 1、使用场景 2、压缩包的创建 3、压缩包的解压 4、CloseZipZ和CloseZipU两接口的区别 5、开源zip.cpp和unzip.cpp文件的下载 VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排…

【机器学习300问】112、什么是特征点检测?

特征点检测是计算机视觉中的一种技术,用于识别图像中具有显著局部特征的点。这项技术在多个领域内扮演着核心角色,包括图像识别、三维重建、运动跟踪和图像匹配等。 一、特征点任务的目的 在计算机视觉(CV)中,特征点检…

PyCharm QThread 设置断点不起作用

背景: 端午节回来上班第一天,不想干活,领导又再后面看着,突然想起一个有意思的问题,为啥我的程序在子进程QThread的子类里打的断点不好用呢?那就解决一下这个问题吧。 原因: 如果您的解释器上…

PB案例学习笔记-19制作一个图片按钮

写在前面 这是PB案例学习笔记系列文章的第19篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

【C++题解】1121 - “倒”数

问题&#xff1a;1121 - “倒”数 类型&#xff1a;需要找规律的循环 题目描述&#xff1a; 输入一个正整数 N&#xff08;0<N<2147483647&#xff09;&#xff0c;将这个数倒着合成一个新数后输出。 比如&#xff1a; 543 &#xff0c;倒过来是345 &#xff08;请注意…

2024年吉林等级保护测评机构名单

据悉&#xff0c;在吉林地区具备等保测评资质的机构为数不多&#xff0c;但每一家都承载着保障信息系统安全的重任。这些机构拥有专业的技术团队和丰富的经验&#xff0c;能够为各单位提供高质量的等保测评服务。今天我们小编就给大家汇总了一下2024年吉林等级保护测评机构名单…

基于电压矢量变换的锁相环simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于电压矢量变换的锁相环simulink建模与仿真&#xff0c;这个模型的基本构架如下所示&#xff1a; 2.系统仿真结果 由图中锁相结果可以看出&#xff0c;利用新型锁相环技术在…

[大模型]LLaMA3-8B-Instruct WebDemo 部署

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu20.04)-->12.1 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行 demo。 pip 换源…