nn.LayerNorm的参数说明

2024-03-29 20:04
文章标签 参数 说明 nn layernorm

本文主要是介绍nn.LayerNorm的参数说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pytorch库中的torch.nn.LayerNorm模块,它是一种在自然语言处理中广泛应用的正规化技术。LayerNorm通过对输入数据进行归一化处理,可以提高模型的鲁棒性和泛化能力。具体体现如下两个方面:

1、将数据归一化至同一量级,解决数据间的可比性问题,如果量级不一样,那么网络可能解读错误。

2、归一化之后,寻求最优解的过程会变得平缓,可以更快的收敛到最优解

函数原型:

torch.nn.LayerNorm(normalized_shape: Union[int, List[int], torch.Size],eps: float = 1e-05,elementwise_affine: bool = True)

第一个参数:normalized_shape
如果传入整数,比如5,则被看做只有一个整数的list,此时LayerNorm会对输入的最后一维进行归一化,这个int值需要和输入的最后一维一样大。

假设此时输入的数据维度是[3, 5],则对3个长度为5的向量求均值方差,得到3个均值和3个方差,分别对这3行进行归一化(每一行的5个数字都是均值为0,方差为1);LayerNorm中的weight和bias也分别包含5个数字,重复使用3次,对每一行进行仿射变换(仿射变换即乘以weight中对应的数字后,然后加bias中对应的数字),并会在反向传播时得到学习。


如果输入的是个list或者torch.Size,比如[3, 5]或torch.Size([3, 5]),则会对网络最后的两维进行归一化,且要求输入数据的最后两维尺寸也是[3, 5]。

假设此时输入的数据维度也是[3, 5],首先对这15个数字求均值和方差,然后归一化这个15个数字;weight和bias也分别包含15个数字,分别对15个归一化后的数字进行仿射变换(仿射变换即乘以weight中对应的数字后,然后加bias中对应的数字),并会在反向传播时得到学习。


假设此时输入的数据维度是[N, 3, 5],则对这N个[3,5]做上述一样的操作,只是此时做仿射变换时,weight和bias被重复用了N次。


假设此时输入的数据维度是[N, T, 3, 5],也是一样的,维度可以更多。
注意:显然LayerNorm中weight和bias的shape就是传入的normalized_shape。

第二个参数:eps

归一化时加在分母上防止除零

第三个参数:elementwise_affine

如果设为False,则LayerNorm层不含有任何可学习参数。

如果设为True(默认是True)则会包含可学习参数weight和bias,用于仿射变换,即对输入数据归一化到均值0方差1后,乘以weight,即bias。

import torch
import torch.nn as nn# 创建输入数据
input_data = torch.randn(4, 6)
print(input_data)
print(input_data.size())# 创建LayerNorm层
#对最后一个维度进行归一化
layer_norm1 = nn.LayerNorm(6)
#对两个维度同时归一化
layer_norm2 = nn.LayerNorm([4,6])# 进行LayerNorm处理
output1 = layer_norm1(input_data)
output2 = layer_norm2(input_data)print(output1)
print(output2)输出:
tensor([[ 1.4415,  0.1733, -1.2644, -2.7267, -0.0138, -0.0792],[ 2.0240,  0.8238, -0.4269, -0.2043, -1.8146,  0.5594],[ 1.2774, -0.7218,  0.3526,  1.6711,  0.0966,  0.4277],[ 0.7997,  0.1011,  0.5100,  0.7205, -0.5538, -0.2981]])
torch.Size([4, 6])tensor([[ 1.4260,  0.4501, -0.6563, -1.7816,  0.3061,  0.2558],[ 1.5704,  0.5591, -0.4948, -0.3072, -1.6640,  0.3363],[ 0.9737, -1.5872, -0.2109,  1.4780, -0.5389, -0.1147],[ 1.1532, -0.2205,  0.5835,  0.9975, -1.5082, -1.0055]],grad_fn=<NativeLayerNormBackward>)tensor([[ 1.2579,  0.0510, -1.3174, -2.7092, -0.1271, -0.1894],[ 1.8123,  0.6701, -0.5204, -0.3085, -1.8410,  0.4184],[ 1.1018, -0.8010,  0.2216,  1.4765, -0.0221,  0.2930],[ 0.6471, -0.0178,  0.3713,  0.5717, -0.6411, -0.3977]],grad_fn=<NativeLayerNormBackward>)

这篇关于nn.LayerNorm的参数说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859508

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py