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

news2024/9/19 10:34:08

层归一化(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.coloradmin.cn/o/1995859.html

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

相关文章

加强混合工作时代的组织网络安全态势

随着组织转向采用和实施混合和远程工作模式,网络安全的重要性从未如此重要。虽然工作场所的这种演变提供了灵活性并有望提高生产力,但它也带来了组织无法忽视的无数网络安全挑战。多样化工作环境的整合需要强大的安全措施、创新的保护策略和警惕的文化&a…

信息学奥赛初赛天天练-60-NOIP2018普及组-基础题4-逻辑推理、分类归纳、找规律

PDF文档公众号回复关键字:20240809 NOIP2018 基础题4 1 甲乙丙丁四人在考虑周末要不要外出郊游 已知①如果周末下雨,并且乙不去,则甲一定不去;②如果乙去,则丁一定去;③如果丙去,则丁一定不去&#xff1b…

TLS 证书有效期缩短预计将使管理工作复杂化

76% 的安全领导者认识到迫切需要缩短证书有效期来提高安全性。然而,许多人觉得自己还没有准备好采取行动,77% 的人表示,改为使用 90 天证书将意味着不可避免地会出现更多中断。 谷歌计划缩短 TLS 证书有效期 81% 的安全主管认为&#xff0c…

性能分析的思想和方法

性能分析的思想和方法 作为新手,经历了性能测试需求分析、性能测试计划、性能测试压测工具/脚本等前置的一系列准备后,到了实施环节,支棱起来压测后,怎么判断有没有问题呢? 本文主要讲一下性能分析思想的几种方法,让大家知道在压测过程中发现了问题后如何去分析问题。…

Cmseasy_5.5的SQL注入

未授权访问进入后台获取Cookie安全码 在cmseasy目录下的lib/admin/admin.php中有这么一句代码,可以让我们实现未授权访问进入到cmseasy的后台获取Cookie安全码,为我们后期的注入做准备。 if($servipfront::ip()&&front::get(ishtml)1) return; …

python连接MySQL数据库使用pymysql

开头 经过这么一段时间的学生信息管理系统的摸爬滚打,不断的学习更新的知识,不断修改自己的认知,针对pymysql以及MySQL数据库的知识做个总结,以纪念我这段时间的学习。 目录 开头 pymysql的使用流程 1.导入pymysql的工具包 方…

TB6612FNG电机驱动连线图

TB6612FNG电机驱动连线图 原理图: 实物对应图: 面包板连线图:

多线程更新最大值

背景 有一张图像,很大,假设10000x10000,需要找其中的最大值和最小值,可以使用opencv的cv::minMaxLoc,但是对于这样的大图来说太慢了。可以多线程并行找。 方法 参考:How to atomically update a maximum…

【practise】电话号码的字母组合

关于我: 睡觉待开机:个人主页 个人专栏: 《优选算法》《C语言》《CPP》 生活的理想,就是为了理想的生活! 作者留言 PDF版免费提供:倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。…

【秋招突围】2024届校招-米哈游笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🌰 明晚又有米…

Ubuntu安装MySQL5.7 + Apache + PHP + 禅道 保姆及教程

目录 开始安装MySQL 5.7 1、获取安装包 2、解压到指定位置 安装MySQL 启动MySQL 进入到MySQL进行测试 设置允许所有IP可以连接 配置允许远程连接 和 开启 gtid 和 binlog 日志(这一步如果不需要可以不操作 如果只需要配置允许远程连接只添加bind-address 0…

【日记】看完黑神话悟空最终预告后的另一种担忧(538 字)

正文 上午我都不知道黑神话发新预告了。看完之后整个人快要爆炸了。草。这是爆了多少新东西出来。这又引起了我另一个担忧:目前已经透露出来的内容,会不会已经占到了游戏体量的一半甚至大半?目前来说,美术、音乐、动作都没什么大问…

动态规划之——背包DP(完结篇)

文章目录 概要说明分组背包模板例题1思路code模板例题2思路code 有依赖的背包问题模板例题思路code 背包问题求方案数模板例题思路code 背包问题求具体方案模板例题思路code 概要说明 本文讲分组背包、有依赖的背包、 背包问题求方案数以及背包问题求具体方案 入门篇(01背包和…

JavaEE 第7节 线程饥饿及其解决办法

目录 一、什么是线程饥饿? 二、线程饥饿的解决办法 *wait()与notify()方法解决线程饥饿 1、wait(等待) 2、notify(通知) 1)notify 2)notifyAll 3)关于wait方法的一些补充 1、wait的方法的三个功能是原子性的:…

力扣刷题-环形链表判断是否有环

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 首先,我们先来看一下这段代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool …

【RISC-V设计-10】- RISC-V处理器设计K0A之IDU

【RISC-V设计-10】- RISC-V处理器设计K0A之IDU 文章目录 【RISC-V设计-10】- RISC-V处理器设计K0A之IDU1.简介2.顶层设计3.端口说明4.代码设计5.总结 1.简介 指令译码单元(Instruction Decoder Unit,简称IDU)是CPU中的一个关键组件&#xff…

用Vue和Axios将数据库数据显示在前端页面

在本次实例中Vue只用在了前端部分&#xff0c;Axios用于向后端请求数据&#xff0c;我们这里要用到Ajax技术来访问后端数据。 HTML&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

CTF-RCE

eval执行 ?cmdsystemctl("ls"); ?cmdsystemctl("ls /"); ?cmdsystemctl("cat /flag_27523); 命令注入 输入ip试试发先可以执行 127.0.0.1 查看一下看看有社么 127.0.0.1 | ls 试着看看php文件 127.0.0.1 | cat 297581345892.php 貌似这个文件有…

韩式告白土味情话-柯桥生活韩语学习零基础入门教学

你们韩国人别太会告白了&#xff01; 1、너 얼굴에 뭐가 조금 묻었어! 你的脸上有点5376东西&#xff01; 뭐가 조금 묻었1585757는데? 有点什么&#xff1f; 이쁨이 조금 묻었네. 有点漂亮。 2、돌잡이 때 뭐 잡았어요&#xff1f; 你抓周的时候抓了什么&#xff1f; 쌀 잡았…

打开一个页面,整个过程会使用哪些协议?

打开一个页面&#xff0c;整个过程会使用哪些协议? 网络通信模型可以用下图来简单表示&#xff0c;根据下面这个顺序&#xff0c;我们来说明&#xff0c;打开一个页面&#xff0c;整个过程会使用哪些协议? 首先&#xff0c;我们可以梳理一个简单的完整流程: 1.在浏览器中输…