【层归一化用于单个样本适合于序列建模,通俗】

层归一化(Layer Normalization),简称 LayerNorm,会将神经网络层的激活值规范到均值为0,并将其方差归一化为1。尤其是在循环神经网络(RNNs)和自注意力模型(如 Transformers)中。
LayerNorm 会对输入样本分别归一化(下图中的行,水平箭头); 使用dim=-1是在最后一个维度(特征维度)而不是行维度(样本数)上进行计算
在这里插入图片描述

层归一化步骤

对于一个给定的层的激活值 x,假设 x 的维度为 (batch_size, num_features),或者在更复杂的模型中可能是 (batch_size, seq_len, num_features)

层归一化的步骤如下:

  1. 计算均值和方差
    对于每个样本 x,计算其在指定维度(通常是特征维度上的)上的均值 μ 和方差 σ^2
    μ = 1 H ∑ i = 1 H x i \mu = \frac{1}{H} \sum_{i=1}^{H} x_i μ=H1i=1Hxi
    σ 2 = 1 H ∑ i = 1 H ( x i − μ ) 2 \sigma^2 = \frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2 σ2=H1i=1H(xiμ)2
    其中,H 是特征的总数量,即 H = num_features

  2. 归一化
    使用计算得到的均值 μ 和标准差 σ 对激活值进行归一化:

    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ

    这里的 ε 是一个很小的常数,用于防止分母为零,通常取值为 1e-51e-6

  3. 线性变换
    为了确保网络的表达能力,通常会再引入可学习的缩放因子 γ 和偏移量 β,对归一化后的激活值进行线性变换:

    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β

    其中 γβ 是与输入的维度相同的可训练参数。

层归一化的优势

  1. 适应小批量训练
    与批量归一化(Batch Normalization)不同,层归一化在计算均值和方差时只考虑单个样本的所有特征,而不是整个批次。这使得它在小批量甚至是批次大小为1的情况下表现更加稳定。

  2. 适应不同模型结构
    层归一化在循环神经网络(RNNs)和自注意力机制中特别有用,因为它不依赖于批量数据,从而避免了批量归一化在这些模型中的不稳定性。

  3. 加速训练
    通过规范化激活值的分布,层归一化可以减少梯度消失和爆炸的问题,加速训练收敛。

PyTorch中的实现

在 PyTorch 中,可以通过 torch.nn.LayerNorm 来使用层归一化,代码示例如下:

import torch
import torch.nn as nn# 定义输入张量 (batch_size, seq_len, num_features)
x = torch.randn(10, 20, 30)  # 例如 batch_size=10, seq_len=20, num_features=30# 定义层归一化,归一化维度为最后一个维度
layer_norm = nn.LayerNorm(normalized_shape=30)# 通过层归一化层
output = layer_norm(x)print(output.shape)  # 输出维度与输入相同

在这个示例中,LayerNorm 被应用于最后一个维度(即特征维度),以对每个样本的激活值进行归一化。

有个代码例子

torch.manual_seed(123)# 创建两个训练样例,每个样例有5个维度(特征)
batch_example = torch.randn(2, 5) layer = nn.Sequential(nn.Linear(5, 6), nn.ReLU())
out = layer(batch_example)
print(out)# 均值方差
mean = out.mean(dim=-1, keepdim=True)
var = out.var(dim=-1, keepdim=True)print("Mean:\n", mean)
print("Variance:\n", var)# 归一化,并看结果
out_norm = (out - mean) / torch.sqrt(var)
print("Normalized layer outputs:\n", out_norm)# 确认一下每个输入的均值都为0,方差都为1
mean = out_norm.mean(dim=-1, keepdim=True)
var = out_norm.var(dim=-1, keepdim=True)
print("Mean:\n", mean)
print("Variance:\n", var)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】Day 8

写在开头: 最近老板突然提出一个全新的组会主题,是关于 “最近我犯的傻”,其目的在于提供乐子的同时引以为戒。本来我还在愁到底去哪里找干的啥事儿,结果今天直接拉了个大的。什么叫无心插柳柳成荫啊,悲。 一…

【C++进阶】红黑树

目录 什么是红黑树?红黑树红黑树的性质 定义红黑树红黑树的操作insertinorderfindheightsize构造函数析构函数赋值拷贝判断红黑树 全部代码总结 什么是红黑树? 红黑树 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树&#xff…

lora通信模块工作模式(半双工)

一,工作模式 1,透明模式 2,定点模式 3,广播模式 测试结果 1,定点模式下两个必须都是定点模式才能通信 2,广播模式可以发送到透明模式 3,定点模式发送不了透明模式

【Python第三方库】Requests全面解析

文章目录 安装基本用法测试网站发送GET请求发送POST请求更多请求请求参数请求头其他常用请求属性处理响应响应状态码响应内容 处理超时处理异常 requests 是一个非常流行的 Python HTTP 库,用于发送所有类型的 HTTP 请求。它简洁易用,能够处理复杂的请求…

数据结构——栈的讲解(超详细)

前言: 小编已经在前面讲完了链表和顺序表的内容,下面我们继续乘胜追击,开始另一个数据结构:栈的详解,下面跟上小编的脚步,开启今天的学习之路! 目录 1.栈的概念和结构 1.1.栈的概念 1.2.栈的结构…

Vatee万腾平台:数据智能的创新引擎,引领企业数字化转型新纪元

在数字化转型的浪潮中,企业正以前所未有的速度重构着自身的运营模式与核心竞争力。作为这一变革的领航者,Vatee万腾平台凭借其卓越的数据智能能力,正逐步揭开企业数字化转型的新篇章。本文将深入探讨Vatee万腾平台如何以数据为核心&#xff0…

【多线程基础】进程和线程的区别和联系(重要)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java多线程 📚本系列文章为个人…

【JavaEE】CAS原理

目录 ​前言 什么是CAS? 如何使用CAS? CAS实现自旋锁 CAS的ABA问题 面试题 1.讲解下你自己理解的CAS机制 2.ABA问题怎么解决? 前言 在多线程中,多个线程同时对一个共享变量进行读写操作,那么就会出现线程安全问…

01 NoSQL之Redis配置与优化

目录 1.1 Redis介绍 1.1.1关系数据库与非关系型数据库 1 . 关系型数据库 2. 非关系型数据库 3.非关系型数据库产生背景 (1) High performance--对数据库高并发读写需求 (2) Huge Storage--对海量数据高效存储与访问需求 (3) High Scalability …

gitlab cicd快速入门有哪些方法 gitlabcicd和Jenkins哪个更好用

在现代软件开发中,持续集成和持续交付(CI/CD)已成为必不可少的流程。它们不仅能提高开发效率,还能保证代码的质量和稳定性。在众多CI/CD工具中,GitLab和Jenkins是最为常用的两种。本文将围绕“gitlab ci/cd快速入门有哪…

vuex properties of undefined (reading ‘getters‘)

前言: 最近打算用vue 写个音乐播放器,在搞 vuex 的时候遇到一个很神奇报错;vuex 姿势练了千百次了,刚开始的时候我一直以为是代码问题,反复检查了带了,依旧报错。 Error in mounted hook: "TypeError:…

[Android] [解决]Bottom Navigation Views Activity工程带来的fragment顶部空白间距问题

用Android Stuio创建一个Bottom Navigation Views Activity工程, 我们刻意设置一下fragment背景为黑色,会发现,这个fragment离顶部还有一段不小空白距离, 怎么解决呢? 在activity_main.xml里面,删掉这句&a…

极狐GitLab安全版本:16.10.1、16.9.3、16.8.5

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

数据结构之线性表(单链表的实现)

目录 一、单链表的原理 二、单链表的实现 1.单链表的定义 2.单链表的初始化 3.清空单链表 4.单链表是否为空 5.单链表的长度 6.获取指定位置 i 的元素 7.获取指定元素 e 的位置 8.向链表中插入指定位置的元素 9.向链表中删除指定位置的元素 10.遍历链表中的元素 …

告别手动操作!KeyMouseGo实现自动化工作流

前言 在这个快节奏的时代,我们每天都在与电脑打交道,重复着那些繁琐而单调的操作;你是否曾想过,能让电脑自己完成这些任务,而你则悠闲地喝着咖啡,享受着生活?今天,就让我们一起揭开一…

【sdk】- 对接阿里云抠图

文档地址:https://help.aliyun.com/zh/viapi/use-cases/general-image-segmentation?spma2c4g.11186623.0.0.3814173cenldIs java对接阿里云的通用分割,将代码原封不动复制进来,执行结果失败,咨询阿里云的人员之后,由…

优盘数据救援:应对文件与目录损坏的全方位指南

一、问题剖析:优盘文件或目录损坏的困境 在数字化时代,优盘(USB闪存驱动器)作为便携、高效的数据存储工具,广泛应用于数据传输、备份与分享。然而,面对频繁的使用与不当操作,优盘中的文件或目录…

FPGA常见型号

FPGA(现场可编程门阵列)开发板种类繁多,涵盖了从入门级教育用途到高性能工业应用的广泛领域。以下是一些常见的 FPGA 开发板型号及其特点: 1. Xilinx(赛灵思)系列 Xilinx 是 FPGA 领域的领导者之一&#…

Ubuntu22.04安装Docker教程

简介 ​ Docker 是一个开源的平台,旨在简化应用开发、交付和运行的过程。通过使用容器技术,Docker 能够让开发人员将应用及其依赖环境一同打包,从而实现快速部署、一致的开发环境和优秀的可移植性。 系统版本 ​ 本文以Ubuntu 22.04.4 LTS…

【探索Linux】P.46(高级IO —— 五种IO模型简介 | IO重要概念)

阅读导航 引言一、五种IO模型1. 阻塞IO(1)定义(2)特点 2. 非阻塞IO(1)定义(2)特点 3. IO多路复用(1)定义(2)特点 4. 信号驱动IO&#…