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

相关文章

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch