Transformer输出张量的值全部相同?!

news2025/3/1 6:57:26

【bug】Transformer输出张量的值全部相同?!

  • 现象
  • 原因
  • 解决

现象

输入经过TransformerEncoderLayer之后,基本所有输出都相同了。
核心代码如下,

from torch.nn import TransformerEncoderLayer
self.trans = TransformerEncoderLayer(d_model=2,
								     nhead=2,
								     batch_first=True,
								     norm_first=True)
...
x = torch.randn(2, 8, 2)
print("x before transformer", x, x.shape)
x = self.trans(x)		# Transformer Encoder Layers
print("x after transformer", x, x.shape)

输出:

x before transformer tensor([[[ 0.2244, -1.9497],
         [ 0.4710, -0.7532],
         [-1.4016,  0.5266],
         [-1.1386, -2.5170],
         [-0.0733,  0.0240],
         [-0.9647, -0.9760],
         [ 2.4195, -0.0135],
         [-0.3929,  1.2231]],

        [[ 0.1451, -1.2050],
         [-1.1139, -1.7213],
         [ 0.5105,  0.4111],
         [ 2.1308,  2.5476],
         [ 1.2611, -0.7307],
         [-2.0910,  0.1941],
         [-0.3903,  1.3022],
         [-0.2442,  0.5787]]]) torch.Size([2, 8, 2])
x after transformer tensor([[[ 1.0000, -1.0000],
         [ 1.0000, -1.0000],
         [-1.0000,  1.0000],
         [ 1.0000, -1.0000],
         [-1.0000,  1.0000],
         [ 1.0000, -1.0000],
         [ 1.0000, -1.0000],
         [-1.0000,  1.0000]],

        [[ 1.0000, -1.0000],
         [ 1.0000, -1.0000],
         [ 1.0000, -1.0000],
         [-1.0000,  1.0000],
         [ 1.0000, -1.0000],
         [-1.0000,  1.0000],
         [-1.0000,  1.0000],
         [-1.0000,  1.0000]]], grad_fn=<NativeLayerNormBackward0>) torch.Size([2, 8, 2])

原因

在询问过全知全能的New Bing之后,找到一篇文章。

简化Transformer模型训练技术简介

Understand the difficulty of training transformer
时间:2020
引用:124
期刊会议:EMNLP 2020
代码:https://github.com/LiyuanLucasLiu/Transformer-Clinic

在这里插入图片描述

Transformer的Layer Norm的位置很关键。

如果我们使用Post-LN,模型可能对参数不稳定,导致训练的失败。 而Pre-LN却不会。

原始Transformer论文中为Post-LN。一般来说,Post-LN会比Pre-LN的效果好。

针对这点,Understand the difficulty of training transformer文中提出使用Admin初始化。在训练稳定的前提下,拥有Post-LN的性能。

在这里插入图片描述

解决

这里我们使用Pre-LN。

torch.nn.TransformerEncodelayer就提供了norm_frist的选项。

self.trans = TransformerEncoderLayer(d_model=2,
								     nhead=2,
								     batch_first=True,
								     norm_first=True)

修改后,输出:

x before transformer tensor([[[ 0.5373,  0.9244],
         [ 0.6239, -1.0643],
         [-0.5129, -1.1713],
         [ 0.5635, -0.7778],
         [ 0.4507, -0.0937],
         [ 0.2720,  0.7870],
         [-0.5518,  0.8583],
         [ 1.5244,  0.5447]],

        [[ 0.3450, -1.9995],
         [ 0.0530, -0.9778],
         [ 0.8687, -0.6834],
         [-1.6290,  1.6586],
         [ 1.2630,  0.4155],
         [-2.0108,  0.9131],
         [-0.0511, -0.8622],
         [ 1.5726, -0.7042]]]) torch.Size([2, 8, 2])
x after transformer tensor([[[ 0.5587,  0.9392],
         [ 0.5943, -1.0631],
         [-0.5196, -1.1681],
         [ 0.5635, -0.7765],
         [ 0.4341, -0.0819],
         [ 0.2943,  0.7998],
         [-0.5329,  0.8661],
         [ 1.5166,  0.5528]],

        [[ 0.3450, -1.9860],
         [ 0.0273, -0.9603],
         [ 0.8415, -0.6682],
         [-1.6297,  1.6686],
         [ 1.2261,  0.4175],
         [-2.0205,  0.9314],
         [-0.0595, -0.8421],
         [ 1.5567, -0.6847]]], grad_fn=<AddBackward0>) torch.Size([2, 8, 2])

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

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

相关文章

日记本-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-3】 日记本 【任务介绍】 1.任务描述 编写一个日记本功能的程序&#xff0c;使用字节流经日记的具体信息记录在本地的txt文件中。当用户输入日记的特定内容后&#xff0c;会将输入的内容保存至本地的txt文件中。需要输入的内容包括“姓名”&#xff0c;“天气”、“…

OpenFeign详解

OpenFeign是什么&#xff1f; OpenFeign&#xff1a; OpenFeign是Spring Cloud 在Feign的基础上支持了SpringMVC的注解&#xff0c;如RequesMapping等等。OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口&#xff0c;并通过动态代理的方式产生实现类&am…

基于YOLOv5的细胞检测实战

数据及代码链接见文末 1.任务与数据集介绍 如下图所示,我们有一个医学细胞数据集,需要从数据集中检测出三种不同的细胞。标签中已经标注了细胞的类别和位置。 我们也可以看到,三种细胞有着不同的形态和颜色,同时数据集的标签也存在没有标注到的细胞 2.数据与标签配置方…

【打卡-Coggle竞赛学习2023年2月】图节点嵌入

文章目录## Part4 图节点嵌入### 背景介绍### 环境配置### 学习打卡- 任务1&#xff1a;图属性与图构造- 任务2&#xff1a;图查询与遍历- 任务3&#xff1a;节点中心性与应用- 任务4&#xff1a;图节点嵌入算法&#xff1a;- 任务5&#xff1a;图节点嵌入算法&#xff1a;- 任…

PowerAutomation获取邮件附件并删除这个邮件方法

这个文章是怎么来的呢&#xff1f;现在不是低代码开发平台启蒙阶段嘛&#xff1f;笔者也有幸在工作中进行了尝试&#xff0c;目前也已经在实际工作中结合Python进行了使用&#xff0c;当然&#xff0c;是可以提高IT的工作效率的。需求是这样的&#xff0c;想从公司的EBS平台报表…

3.5 实战:Spring Boot 实现系统多环境配置

第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战&#xff1a;Spring Boot 实现系统多环境配置 3.5 实战&#xff1a;Spring Boot 实现系统多环境配置 在实际项目开发的…

python的所有知识点(含讲解),不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…

2023年安徽省职业院校技能大赛“网络空间安全” 比赛任务书

2023年安徽省职业院校技能大赛“网络空间安全” 比赛任务书 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 Nginx安全策略 A-3 日志监控 A-4 中间件服务加固 A-5 本地安全策略 A-6 防火墙策…

基本程序设计技术

一.统计&#xff08;计数&#xff09;问题&#xff1a;方法&#xff1a;计数变量c的初值为0&#xff0c;每输入一个数据&#xff0c;进行必要判断后&#xff0c;若输入的数据满足统计条件&#xff0c;则计数变量c自加1&#xff0c;这样当对所有输入进行判断后&#xff0c;计数变…

多线程案例(一)【单例模式+阻塞队列】

一、单例模式 单例模式属于最容易被问到的一种设计模式。 啥是设计模式&#xff1f; 类似于棋谱&#xff0c;按摩模式写代码&#xff0c;可以更加规范。 单例模式的含义&#xff1a; 单例&#xff1a;单个实例对象 某个类有且只有一个对象。 这一点在很多场景上都需要. 比如…

如何轻松录制 CS 游戏玩法?4 种免费录制 CS 游戏视频的方法

CS:GO&#xff0c;又名反恐精英&#xff1a;全球攻势&#xff0c;是一款多人第一人称射击游戏&#xff0c;由 Valve 和 Hidden Path Entertainment 于 2012 年设计推出。作为反恐精英系列的第四代&#xff0c;它广受欢迎与全球游戏玩家。随着近年来电子竞技的兴起&#xff0c;用…

冒泡排序(朴素+优化)

思想 先来看一张动图 上面这张图就是冒泡排序的代码可视化 很显然我们可以发现&#xff0c;冒泡排序的基本思想就是从前往后比对&#xff0c;一直将找到的最大值交换到序列的末尾感觉冒泡排序这个名字还是很形象的 朴素做法 不难看出&#xff0c;将最大值交换到末尾的操作一…

数据结构与算法之打家劫舍(二)动态规划思想

前言&#xff1a;上一个题目所求的数组是线性的&#xff0c;首尾并不影响结果。这道题目的数组的首尾相连接&#xff0c;构成一个环。再来求这一道题目&#xff0c;难度进一步上身。我们直接进入题目&#xff1a;一.题目二.在上一道题目的基础上进行剖析对于一个数组&#xff0…

​科伦博泰冲刺港交所上市:持续大额亏损,科伦药业为其控股股东​

近日&#xff0c;四川科伦博泰生物医药股份有限公司&#xff08;下称“科伦博泰”&#xff09;在港交所递交招股书&#xff0c;准备在港交所主板上市&#xff0c;高盛和中信证券为其联合保荐机构。据贝多财经了解&#xff0c;科伦博泰为A股上市公司科伦药业&#xff08;SZ:0024…

6.Kafka发布和显示系统通知

1.阻塞队列生产者线程线程需要实现 Runnable 接口重写接口的run方法声明变量private BlockingQueue<Integer> queue接受传入的阻塞队列创建有参构造器实现示例逻辑&#xff0c;生产100个数据&#xff0c;put进阻塞队列&#xff0c;每生产一个数据停顿20毫秒&#xff0c;输…

Ubuntu22.04 安装 mysql8,redis7,MongoDB6

服务器的准备 我的服务器是在腾讯云租的&#xff0c;所以服务器的apt源都是默认配好的&#xff0c;没配好的自行网上查找apt源配置。本文同样适用于Ubuntu 22&#xff0c;20。Ubuntu18亦可参考。云服务器一般防火墙未开放端口访问&#xff0c;请自行配置&#xff0c;否则后续远…

【unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity游戏制作 ⭐mango的冒险场景二——镜头和法球特效跟随⭐ 文章目录⭐mango的冒险场景二——镜…

【2023蓝桥杯】枚举专项题笔记

【枚举】卡片小蓝有很多数字卡片&#xff0c;每张卡片上都是数字 0 到 9。小蓝准备用这些卡片来拼一些数&#xff0c;他想从 1开始拼出正整数&#xff0c;每拼一个&#xff0c;就保存起来&#xff0c;卡片就不能用来拼其它数了。小蓝想知道自己能从 1拼到多少。例如&#xff0c…

JVM垃圾回收器概述

Serial串行回收 Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择。 Serial收集器作为HotSpot中client模式下的默认新生代垃圾收集器。 Serial收集器采用复制算法、串行回收和"stop-the-World"机制的方式执行内存回收。 除了年轻…

【Redis】概述环境搭建(一)

&#x1f697;Redis学习起始站~ &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 &#x1f44d;希望您能有所收获 一.初识Redis (1) 概述 Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库。这里有两…