LayerNorm的思考

news2025/1/13 1:25:47

文章目录

  • 1. LayerNorm
  • 2. 图解
  • 3. softmax
  • 4. python 代码

1. LayerNorm

y = x − E [ x ] v a r ( x ) + ϵ ∗ γ + β \begin{equation} y=\frac{x-\mathrm{E}[x]}{\sqrt{\mathrm{var}(x)+\epsilon}}*\gamma+\beta \end{equation} y=var(x)+ϵ xE[x]γ+β

2. 图解

  • 矩阵A 表示如下:
    A = [ 0 1 2 3 4 5 6 7 8 9 10 11 ] \begin{equation} A=\begin{bmatrix} 0&1&2&3\\\\ 4&5&6&7\\\\ 8&9&10&11 \end{bmatrix} \end{equation} A= 04815926103711
  • 在pytorch中每一行代表一个样本,这里有3行,这有3个样本,每个样本有4个特征维度。
  • LayerNorm就在样本维度即,[0,1,2,3]上求解均值E(x),方差var(x)后,按照公式求得如下
    E ( x ) = ( 0 + 1 + 2 + 3 ) / 4 = 1.5 \begin{equation} E(x)=(0+1+2+3)/4=1.5 \end{equation} E(x)=(0+1+2+3)/4=1.5
    v a r ( x ) = [ ( 0 − 1.5 ) 2 + ( 1 − 1.5 ) 2 + ( 2 − 1.5 ) 2 + ( 3 − 1.5 ) 2 ] / 4 = 1.118 \begin{equation} \sqrt{\mathrm{var}(x)}=\sqrt{[(0-1.5)^2+(1-1.5)^2+(2-1.5)^2+(3-1.5)^2]/4}=1.118 \end{equation} var(x) =[(01.5)2+(11.5)2+(21.5)2+(31.5)2]/4 =1.118
    y = [ 0 − 1.5 1.118 , 1 − 1.5 1.118 , 2 − 1.5 1.118 , 3 − 1.5 1.118 ] = [ − 1.342 , − 0.447 , 0.447 , 1.342 ] \begin{equation} y=[\frac{0-1.5}{1.118},\frac{1-1.5}{1.118},\frac{2-1.5}{1.118},\frac{3-1.5}{1.118}]=[-1.342,-0.447,0.447,1.342] \end{equation} y=[1.11801.5,1.11811.5,1.11821.5,1.11831.5]=[1.342,0.447,0.447,1.342]

3. softmax

F.softmax的作用是使得向量中的元素归一化到0-1之间
在这里插入图片描述

4. python 代码

import math

import torch
import torch.nn as nn
import torch.nn.functional as F

torch.set_printoptions(precision=3, sci_mode=False)

if __name__ == "__main__":
    run_code = 0
    row = 3
    column = 4
    total = row * column
    matrix_a = torch.arange(total).reshape((row, column)).to(torch.float)
    print(f"matrix_a=\n{matrix_a}")
    soft_a = F.softmax(matrix_a, dim=-1)
    print(f"soft_a=\n{soft_a}")
    a = torch.tensor([0, 1, 2, 3]).to(torch.float)
    a_softmax = torch.exp(a) / torch.sum(torch.exp(a))
    print(f"a_softmax={a_softmax}")

    b = torch.tensor([4, 5, 6, 7]).to(torch.float)
    b_softmax = torch.exp(b) / torch.sum(torch.exp(b))
    print(f"b_softmax={b_softmax}")

    c = torch.tensor([4, 5, 6, 7]).to(torch.float)
    c_softmax = torch.exp(c) / torch.sum(torch.exp(c))
    print(f"c_softmax={c_softmax}")

    soft_dim1 = F.softmax(matrix_a, dim=-2)
    print(f"soft_dim1=\n{soft_dim1}")

    d = torch.tensor([0, 4, 8]).to(torch.float)
    d_softmax = torch.exp(d) / torch.sum(torch.exp(d))
    print(f"d_softmax={d_softmax}")

    d2 = torch.tensor([1, 5, 9]).to(torch.float)
    d2_softmax = torch.exp(d2) / torch.sum(torch.exp(d2))
    print(f"d2_softmax={d2_softmax}")
    layer_norma = nn.LayerNorm(4)
    layer_norma_eps = layer_norma.eps
    layer_norma_weight = layer_norma.weight
    print(f"layer_norma_eps=\n{layer_norma_eps}")
    print(f"layer_norma_weight=\n{layer_norma_weight}")
    layer_matrix = layer_norma(matrix_a)
    print(f"layer_matrix=\n{layer_matrix}")
    mean_a = torch.mean(matrix_a, dim=-1, keepdim=True)
    print(f"mean_a=\n{mean_a}")
    var_a = torch.sqrt(torch.var(matrix_a, dim=-1, keepdim=True, unbiased=False))
    print(f"std_a=\n{var_a}")
    my_layer = (matrix_a - mean_a) / var_a
    print(f"my_layer=\n{my_layer}")
    a1 = matrix_a[0, :]
    print(f"a1=\n{a1}")
    a1_mean = torch.sum(a1) / 4
    print(f"a1_mean={a1_mean}")
    a1_var =torch.sqrt(torch.sum((a1 - a1_mean) ** 2)/4)
    print(f"a1_var={a1_var}")
    var1 = math.sqrt(((0-1.5)**2+(1-1.5)**2+(2-1.5)**2+(3-1.5)**2)/4)
    print(f"var1={var1}")
  • 结果:
matrix_a=
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]])
soft_a=
tensor([[0.032, 0.087, 0.237, 0.644],
        [0.032, 0.087, 0.237, 0.644],
        [0.032, 0.087, 0.237, 0.644]])
a_softmax=tensor([0.032, 0.087, 0.237, 0.644])
b_softmax=tensor([0.032, 0.087, 0.237, 0.644])
c_softmax=tensor([0.032, 0.087, 0.237, 0.644])
soft_dim1=
tensor([[    0.000,     0.000,     0.000,     0.000],
        [    0.018,     0.018,     0.018,     0.018],
        [    0.982,     0.982,     0.982,     0.982]])
d_softmax=tensor([    0.000,     0.018,     0.982])
d2_softmax=tensor([    0.000,     0.018,     0.982])
layer_norma_eps=
1e-05
layer_norma_weight=
Parameter containing:
tensor([1., 1., 1., 1.], requires_grad=True)
layer_matrix=
tensor([[-1.342, -0.447,  0.447,  1.342],
        [-1.342, -0.447,  0.447,  1.342],
        [-1.342, -0.447,  0.447,  1.342]], grad_fn=<NativeLayerNormBackward0>)
mean_a=
tensor([[1.500],
        [5.500],
        [9.500]])
std_a=
tensor([[1.118],
        [1.118],
        [1.118]])
my_layer=
tensor([[-1.342, -0.447,  0.447,  1.342],
        [-1.342, -0.447,  0.447,  1.342],
        [-1.342, -0.447,  0.447,  1.342]])
a1=
tensor([0., 1., 2., 3.])
a1_mean=1.5
a1_var=1.1180340051651
var1=1.118033988749895

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

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

相关文章

ExplaineR:集成K-means聚类算法的SHAP可解释性分析 | 可视化混淆矩阵、决策曲线、模型评估与各类SHAP图

集成K-means聚类算法的SHAP可解释性分析 加载数据集并训练机器学习模型 SHAP 分析以提取特征对预测的影响 通过混淆矩阵可视化模型性能 决策曲线分析 模型评估&#xff08;多指标和ROC曲线的目视检查&#xff09; 带注释阈值的 ROC 曲线 加载 SHAP 结果以进行下游分析 与…

Kafka 会丢消息吗?

目录 01 生产者(Producer) 02 消息代理(Broker) 03 消费者(Consumer) 来源:Kafka 会丢消息吗? Kafka 会丢失信息吗? 许多开发人员普遍认为,Kafka 的设计本身就能保证不会丢失消息。然而,Kafka 架构和配置的细微差别会导致消息的丢失。我们需要了解它如何以及何时…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料8. 补充 - 8812AU网卡 1. 源由 在《Open FPV VTX开源之硬件规格及组成》章节中&#xff0…

仓颉笔记——写一个简易的web服务并用浏览器打开

创建一个web服务端&#xff0c;同时创建一个客户端去读取这个服务端。 也满足浏览器打开web的需求。 直接上代码。 import net.http.* import std.time.* import std.sync.* import std.log.LogLevel// 1. 构建 Server 实例 let server ServerBuilder().addr("127.0.0.1&…

Trie树算法

Trie树&#xff0c;也称为前缀树或字典树&#xff0c;是一种特殊的树型数据结构。它用于存储一组字符串&#xff0c;使得查找、插入和删除字符串的操作非常高效。类似这种&#xff0c; 模板&#xff1a; 这是用数组来模拟上图中的树的结构&#xff0c;逻辑上和上图结构一致。 …

03-51单片机定时器和串口通信

一、51单片机定时器 1.定时器介绍 1.1为什么要使用定时器 在前面的学习中&#xff0c;用到了 Delay 函数延时&#xff0c;这里学习定时器以后&#xff0c;就可以通过定时器来完成&#xff0c;当然定时器的功能远不止这些&#xff1a; 51 单片机的定时器既可以定时&#xff…

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

【深度学习】核心概念-人工神经网络(Artificial Neural Network, ANN)

人工神经网络是一种受生物神经系统启发的机器学习模型&#xff0c;旨在通过连接大量的节点&#xff08;称为神经元或节点&#xff09;来模拟人脑的学习方式。它是一种在监督学习和非监督学习中广泛应用的深度学习模型。 人工神经网络的基本结构 一个人工神经网络通常由以下三个…

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法&#xff0c;其优势是减少插值误差(特别是龙格现象&#xff1a;表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。 1. 切比雪夫节点 切比雪夫插值的核心是使用切比雪夫节点作为插值点。切比雪夫节点是切…

ELK的搭建

ELK elk&#xff1a;elasticsearch logstatsh kibana统一日志收集系统 elasticsearch&#xff1a;分布式的全文索引引擎点非关系型数据库,存储所有的日志信息&#xff0c;主和从&#xff0c;最少需要2台 logstatsh&#xff1a;动态的从各种指定的数据源&#xff0c;获取数据…

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性&#xff08;五大功能域&#xff09; 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …

英文字体:复古八十年代优雅品牌邀请函电影标题设计衬线字体 Eighties Nostalgia Font

嘿&#xff0c;大家好&#xff0c;我希望你们一切顺利&#xff0c;考虑到现在世界上发生的一切&#xff0c;你们在生活的各个方面都取得了进步。过去 3 年对我们所有人来说都是过山车&#xff0c;我一直非常怀念美好的时光。怀旧之情将我带到了 Pinterest&#xff0c;自然而然地…

GPT大模型下,如何实现网络自主防御

近年来&#xff0c;随着GPT大模型的出现&#xff0c;安全领域的攻防对抗变得更加激烈。RSAC2023人工智能安全议题重点探讨了人工智能安全的最新发展&#xff0c;包括人工智能合成器安全、安全机器学习以及如何利用渗透测试和强化学习技术来确保人工智能模型的安全性和可靠性。 …

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量&#xff08;自行百度&#xff09; https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码&#xff0c;切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…

韩顺平老师Linux学习笔记【持续更新...】

1、课程内容 1.1、课程大纲 1.2、Linux使用在哪些地方 Linux运维工程师Linux嵌入式工程师Linux下开发项目&#xff1a;JavaEE、大数据、Python、PHP、C/C、Go 1.3、Linux的应用领域 个人桌面领域服务器领域&#xff08;最强领域&#xff09;嵌入式领域 2、Linux入门 2.1、…

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#xff1a; ● 贪心算法理论基础 ● 455.…

浅谈容灾技术方案详解

一、什么是容灾&#xff1f; 容灾指的是&#xff0c;在异地搭建一套或多套和主生产系统一样的IT系统&#xff0c;用于应对在系统因发生意外&#xff08;自然灾害、人为灾害、设备系统故障等&#xff09;造成业务影响的情况&#xff0c;达到尽量让生产业务损失最小的目的。 二…

《框架程序设计》期末复习

目录 Maven 简介 工作机制&#xff08;★&#xff09; 依赖配置&#xff08;★&#xff09; Maven命令 MyBatis 入门 单参数查询&#xff08;★&#xff09; 多参数查询&#xff08;★★★&#xff09; 自定义映射关系&#xff08;★★★&#xff09; 基本增删改查操…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…

刚体变换矩阵的逆

刚体运动中的变换矩阵为&#xff1a; 求得变换矩阵的逆矩阵为&#xff1a; opencv应用 cv::Mat R; cv::Mat t;R.t(), -R.t()*t